现在的Linux发行版的核心都具备了运行IPv6的条件. IPv6功能被编译成一个可载入模块. 在一般情况下模块不会在开机的时候自动载入.
参照更新的信息: IPv6+Linux-Status-Distribution
注意您的/proc-file-system.必须有如下的结构:
/proc/net/if_inet6
一个简单的测试:
# test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
如果失败, 表明模块没有载入.
执行载入模块的命令:
# modprobe ipv6
如果成功, 模块会在列表中显示,执行如下命令:
# lsmod |grep -w 'ipv6' && echo "IPv6 module successfully loaded"
模块是可以自动载入的,只要在核心模块设定文件( /etc/modules.conf 或 /etc/conf.modules)中加入:
alias net-pf-10 ipv6 # automatically load IPv6 module on demand
也可以关掉IPv6模块的自动载入:
alias net-pf-10 off # disable automatically load of IPv6 module on demand
如果以上两个结果都证实了核心不具有IPv6功能, 您可以有如下选择:
如果您决定编译一个核心,您必须读过 Linux Kernel HOWTO. 以及这方面的经验.
注意:您必须使用核心2.4.x系列或更高. 因为IPv6对2.2.x系列缺少相应的支持. 并且需要ICMPv6 和 6to4 支持的补丁.(补丁可以在 kernel series 2.2.x IPv6 patches找到).
只推荐熟悉核心编译和IPv6的用户使用. 参照: USAGI project / FAQ.
不是所有的设备都有能力传输IPv6数据包, 这里有一个现状表: IPv6+Linux-status-kernel.html#transport.
别扯太远了, 如果您有一个正在运行IPv6的核心,怎么会没有设定的工具呢? 安装包里早就有几个这样的工具了.
net-tools package 包含一些工具如: ifconfig ,route. 这些可以令您在界面上设定IPv6. 在命令行(shell) 用ifocnig -? 或 route -? 查看诸如IPv6 或 inet6.如果有,则说明具备IPv6设定能力.
输入以下命令进行检查:
# /sbin/ifconfig -? 2>& 1|grep -qw 'inet6' && echo "utility 'ifconfig' is
?IPv6-ready"
也可以使用route:
# /sbin/route -? 2>& 1|grep -qw 'inet6' && echo "utility 'route' is IPv6-ready"
Alexey N. Kuznetsov (Linux 网路代码现阶段的维护者) 写了一个tool-set可以通过netlink 设备来设定网路.它可以比net-tool提供更多的功能, 但没有多少文档并且它不是为胆小的人设计的.
# /sbin/ip 2>&1 |grep -qw 'inet6' && echo "utility 'ip' is IPv6-ready"
如果没有找到 /sbin/ip 那么我极力推荐您安装iproute package.
在为IPv6准备好了系统后,您可以用IPv6进行网路通讯. 首先您必须学习如何用嗅探程序来检查IPv6数据包. 强烈推荐这样做,因为在debugging/troubleshooting 中有利于快速诊断.
这个程序一般在iputils包里, 用来测试简单传输发送 ICMPv6 回应请求并等待ICMPv6 回应包.
用法:
# ping6 < hostwithipv6address >
# ping6 < ipv6address >
# ping6 [-I < device >] < link-local-ipv6address >
例子:
# ping6 -c 1 ::1
PING ::1(::1) from ::1 : 56 data bytes
64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec
--- ::1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms
提示 ping6必须有适当的root权限才能使用, 如果不是root组用户,使用时可能产生问题:
1.ping6 不在用户的路径当中 (probably, because ping6 is generally stored in /usr/sbin -> add path (not really recommended)
2.ping6 不能被正确执行, 通常没有适当的权限 chmod u+s /usr/sbin/ping6
用local-addresses 作为ping6 目标必须指定一个界面. 否则核心将不知道数据包发往哪个设备. 在没有指定的情况下会有这样的输出:
# ping6 fe80::212:34ff:fe12:3456
connect: Invalid argument
为ping6指定界面的结果:
# ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205
PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from
?fe80::212:34ff:fe12:3478 eth0: 56 data bytes
64 bytes from fe80::212:23ff:fe12:3456: icmp_seq=0 hops=64 time=445 usec
--- fe80::2e0:18ff:fe90:9205 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss round-trip
?min/avg/max/mdev = 0.445/0.445/0.445/0.000 ms
一个发现IPv6-active hosts 的比较有趣的机制:
# ping6 -I eth0 ff02::1 PING ff02::1(ff02::1) from fe80:::2ab:cdff:feef:0123 eth0: 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from fe80::212:34ff:fe12:3450: icmp_seq=1 ttl=64 time=0.549 ms (DUP!)
与IPv4不同的是, ping 的回应在广播地址中是可以屏蔽的,目前只有IPv6防火墙可以做到.
这个程序一般在iputils包里, 和IPv4的traceroute程序相似, 但与当前版本不同的是IPv6不能正确地使用ICMP echo-request. 看下面这个例子:
# traceroute6 www.6bone.net
traceroute to 6bone.net (3ffe:b00:c18:1::10) from 3ffe:ffff:0000:f101::2, 30
?hops max, 16 byte packets
1 localipv6gateway (3ffe:ffff:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms
2 swi6T1-T0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms
3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms
4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441 ms
5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms
6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms
这个程序一般在iputils包里, 它用来追踪MTU的路径.看下面的例子:
# tracepath6 www.6bone.net
1?: [LOCALHOST] pmtu 1480
1: 3ffe:401::2c0:33ff:fe02:14 150.705ms
2: 3ffe:b00:c18::5 267.864ms
3: 3ffe:b00:c18::5 asymm 2 266.145ms pmtu 1280
3: 3ffe:3900:5::2 asymm 4 346.632ms
4: 3ffe:28ff:ffff:4::3 asymm 5 365.965ms
5: 3ffe:1cff:0:ee::2 asymm 4 534.704ms
6: 3ffe:3800::1:1 asymm 4 578.126ms !N
Resume: pmtu 1280
在Linux作业系统中 tcpdump 是主要的数据包捕获工具.IPv6支持 3.6 的版本.
tcpdump用于降低数据包杂讯的参数:
使用命令行参数也可以从一个数据包中捕获/列印信息.
# tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
tcpdump: listening on eth0
3ffe:ffff:100:f101:2e0:18ff:fe90:9205 > 3ffe:ffff:100:f101::1: icmp6: echo
?request (len 64, hlim 64)
3ffe:ffff:100:f101::1 > 3ffe:ffff:100:f101:2e0:18ff:fe90:9205: icmp6: echo
?reply (len 64, hlim 64)
1.2.3.4和5.6.7.8是遂道的终点(这些都是例子).
# tcpdump -t -n -i ppp0 -s 512 -vv ip6 or proto ipv6
tcpdump: listening on ppp0
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 3ffe:ffff:100::1: icmp6: echo request
?(len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
5.6.7.8 > 1.2.3.4: 3ffe:ffff:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
?64, hlim 61) (ttl 23, id 29887, len 124)
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 3ffe:ffff:100::1: icmp6: echo request
?(len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
5.6.7.8 > 1.2.3.4: 3ffe:ffff:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
?64, hlim 61) (ttl 23, id 29919, len 124)
在当前的发行版中已经包含了能和IPv6协同工作的程序(服务端/客户端)
参照:
IPv6+Linux-Status-Distribution.
或者检查
http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html
一些可用程序的线索:
IPv6 & Linux - HowTo - Part 3或
IPv6 & Linux - HowTo - Part 4.
想要进行下面的测试, 您的作业系统必须拥有IPv6能力. 有些例子是真实地连结了6bone的情况下做的.
因为这几年Domain Name System (DNS)安全的不断升级, 它们中的大部份都具备了对IPv6 地址类型AAAA的解析能力. (新的类型A6 只有BIND9和更高的版本支持)检查DNS对IPv6地址的解析能力:
# host -t AAAA www.join.uni-muenster.de
将得到下面的结果:
www.join.uni-muenster.de. is an alias for ns.join.uni-muenster.de.
ns.join.uni-muenster.de. has AAAA address 3ffe:400:10:100:201:2ff:feb5:3806
IPv6-ready telnet 客户端. 对它进行一个简单的测试:
$ telnet 3ffe:400:100::1 80
Trying 3ffe:400:100::1...
Connected to 3ffe:400:100::1.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 16 Dec 2001 16:07:21
GMT Server: Apache/2.0.28 (Unix)
Last-Modified: Wed, 01 Aug 2001 21:34:42 GMT
ETag: "3f02-a4d-b1b3e080"
Accept-Ranges: bytes
Content-Length: 2637
Connection: close
Content-Type: text/html; charset=ISO-8859-1
Connection closed by foreign host.
如果telnet只出现"cannot resolve hostname", 说明作业系统的IPv6还未激活.
openssh已经支持IPv6, 但必须对它用以下的参数进行编译后才能使用:
$ ssh -6 ::1
user@::1's password: ******
[user@ipv6host user]$
如果您的ssh不能对 -6 进行反应, 可能作业系统的IPv6还未激活,或ssh的版本太低.
他们的客户/服务端程序是免费的.
目前支持IPv6的web 流览器列表: IPv6+Linux-status-apps.html#HTTP.
这些流览器大部份都存在问题:
一些早期的版本不能对IPv6地址进行正确的操作, 如: http://[3ffe:400:100::1]/
一个小测试,显示在没有代理的情况下的 URL 和 流览器.
测试IPv6最方便的方法是访问: http://www.kame.net/. 如果海龟是活动的, 说明连接是通过IPv6进行的, 它不动的话, 说明连接是通过IPv4进行的.
包括:sshd, httpd, telnetd,