現在的
Linux發行版的核心都具備了運行
IPv6的條件
. IPv6功能被編譯成一個可載入模組
. 在一般情況下模組不會在開機的時候自動載入
.
參照更新的資訊
: IPv6+Linux-Status-Distribution
檢察現在的系統是否支持IPv6
注意您的
/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 功能的核心
如果以上兩個結果都證實了核心不具有
IPv6功能
, 您可以有如下選擇
:
如果您決定編譯一個核心
,您必需讀過
Linux Kernel HOWTO. 以及這方面的經驗
.
注意
:您必需使用核心
2.4.x系列或更高
. 因為
IPv6對
2.2.x系列缺少相應的支持
. 並且需要
ICMPv6 和
6to4 支持的補丁
.(補丁可以在
kernel series 2.2.x IPv6 patches找到
).
將核心同 USAGI 的擴展一起編譯.
只推薦熟悉核心編譯和
IPv6的用戶使用
. 參照
: USAGI project / FAQ.
IPv6-ready network devices
不是所有的設備都有能力傳輸
IPv6數據包
, 這裡有一個現狀表
: IPv6+Linux-status-kernel.html#transport.
現階段不會支持IPv6的連結
- Serial Line IP (SLIP, RFC 1055), should be better called now to SLIPv4, device named: slX
- Parallel Line IP (PLIP), same like SLIP, device names: plipX
- ISDN with encapsulation rawip, device names: isdnX
在將來都不會支持IPv6的設備
- ISDN with encapsulation syncppp, device names: ipppX (design issue of the ipppd, will be merged into more general PPP layer in kernel series 2.5.x)
別扯太遠了
, 如果您有一個正在運行
IPv6的核心
,怎麼會沒有設定的工具呢
? 安裝包裡早就有幾個這樣的工具了
.
net-tools package
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"
iproute package
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 中有利於快速診斷
.
IPv6 ping
這個程式一般在
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
為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
Ping6 to multicast addresses(多播地址)
一個發現
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防火牆可以做到
.
IPv6 traceroute6
這個程式一般在
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
IPv6 tracepath6
這個程式一般在
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
IPv6 tcpdump
在
Linux作業系統中
tcpdump 是主要的數據包捕獲工具
.IPv6支持
3.6 的版本
.
tcpdump用於降低數據包雜訊的參數
:
- icmp6: 過濾本地ICMPv6通訊.
- ip6: 過濾本地IPv6通訊.(包括 ICMPv6)
- proto ipv6: filters tunneled IPv6-in-IPv4 traffic
- not port ssh: 在遠程SSH會話中禁止SSH數據包的顯示. to suppress displaying SSH packets for running tcpdump in a remote SSH session
使用命令行參數也可以從一個數據包中捕獲
/列印資訊
.
- "-s 512": 增加捕獲限定為512 bytes.
- "-vv": 詳細列印.
- "-n": 不將地址轉換成名稱,在名稱服務有問題時可以用到.
IPv6 ping to 3ffe:ffff:100:f101::1 native over a local link
# 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)
IPv6 ping to 3ffe:ffff:100::1 routed through an IPv6-in-IPv4-tunnel
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的情況下做的
.
檢查DNS對IPv6地址的解析能力
因為這幾年
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 clients
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
openssh已經支持
IPv6, 但必需對它用以下的參數進行編譯後才能使用
:
- --without-ipv4-default: the client tries an IPv6 connect first automatically and fall back to IPv4 if not working
- --with-ipv4-default: default connection is IPv4, IPv6 connection must be force like following example shows:
$ ssh -6 ::1
user@::1's password: ******
[user@ipv6host user]$
如果您的
ssh不能對
-6 進行反應
, 可能作業系統的
IPv6還未激活
,或
ssh的版本太低
.
ssh.com
他們的客戶
/服務端程式是免費的
.
IPv6-ready web 流覽器
目前支持
IPv6的
web 流覽器列表
: IPv6+Linux-status-apps.html#HTTP.
這些流覽器大部份都存在問題
:
- 如果 proxy(代理)只支持IPv4, IPv6的請求將會失敗. 方法: 升級proxy
- Automatic proxy settings (*.pac) 不能對IPv6的不同請求進行適當的處理 (written in Java-script and well hard coded in source like to be seen in Maxilla source code).
一些早期的版本不能對
IPv6地址進行正確的操作
, 如
: http://[3ffe:400:100::1]/
一個小測試
,顯示在沒有代理的情況下的
URL 和 流覽器
.
URLs for testing
測試
IPv6最方便的方法是訪問
: http://www.kame.net/. 如果海龜是活動的
, 說明連接是通過
IPv6進行的
, 它不動的話
, 說明連接是通過
IPv4進行的
.
包括:sshd, httpd, telnetd,