Linux下移动IPv6实现指南
4.2.4 在HA上配置radvd
为使MN能知道其位于家乡网络,HA也应发出RA。因此我们应该也在HA上启用RADVD。/etc/radvd.conf文件应包含以下内容:
# cat /etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
MaxRtrAdvInterval 3;
MinRtrAdvInterval 1;
AdvIntervalOpt off;
AdvHomeAgentFlag on;
HomeAgentLifetime 10000;
HomeAgentPreference 20;
AdvHomeAgentInfo on;
prefix fec0:106:2700::2/64
{
AdvRouterAddr on;
AdvOnLink on;
AdvAutonomous on;
AdvPreferredLifetime 10000;
AdvValidLifetime 12000;
};
};
也应在HA上执行radvdump命令以检查是否发送了radvd报文:
# radvdump
Router advertisement from fe80::202:2dff:fe54:d11e (hoplimit 255)
Received by interface eth0
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvCurHopLimit: 64
AdvManagedFlag: off
AdvOtherConfigFlag: off
AdvHomeAgentFlag: on
AdvReachableTime: 0
AdvRetransTimer: 0
Prefix fec0:106:2700::2/64
AdvValidLifetime: 12000
AdvPreferredLifetime: 10000
AdvOnLink: on
AdvAutonomous: on
AdvRouterAddr: on
AdvSourceLLAddress: 00 02 2D 54 D1 1E
AdvHomeAgentInfo:
HomeAgentPreference: 20
HomeAgentLifetime: 1000
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:7D:F3:03:
inet6 addr: fec0:106:2700:0:290:7dff:fef3:
inet6 addr: fec0:106:2700::4/64 Scope:Site ②
inet6 addr: fe80::290:7dff:fef3:
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:513 errors:89 dropped:89 overruns:0 frame:85
TX packets:140 errors:41 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:56084 (54.7 Kb) TX bytes:19212 (18.7 Kb)
Interrupt:3 Base address:0x100
①
一个新的(多余的)自动生成的地址。因为我们在/proc/sys/net/ipv6/conf/eth0/autoconf中设置autoconf为1,所以MN会产生一个由HA的前缀和其MAC地址组合成的新的地址。我不认为能避免这个地址的产生。
②
原始静态IPv6地址。
③
引导时生成的链路本地地址。
5 若干实验
5.1 预测试
如上进行每项配置;家乡网络与所访问网络具有不同的ESSID尤为重要。
当您在MN上启动移动IPv6时,您会看到组播路由器请求报文:
# tcpdump -i eth0 -vv ip6 or proto ipv6
...
13:32:54.681763 fe80::202:a5ff:fe
(src lladdr: 0:2:a5:
13:32:55.681763 fe80::202:a5ff:fe
(src lladdr: 0:2:a5:
13:32:57.681765 fe80::202:a5ff:fe
(src lladdr: 0:2:a5:
...
5.2 移动检测
通常情况下移动检测采用邻居不可达性检测来在缺省路由器不在双向可达时进行检测。此时,移动节点必须发现一台缺省路由器(通常位于新链路上)。
为便于了解所发生的情况,您应为每条命令使用一个xterm窗口:
# watch ifconfig eth0
# watch route -A inet6
# tcpdump -i eth0 -vv ip6 or proto ipv6
为“移动”到另一个网络,您可在MN上执行以下命令:
# iwconfig eth1 essid visitnet
则MN位于另一个无线网络,因为它发送出了“路由器请求”(组播),AR将使用其前缀进行响应。然后MN会使用所接收到的前缀和其MAC地址来进行自身配置。若您输入ifconfig eth0,您会看到新的IPv6地址:
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:7D:F3:03:
inet6 addr: fec0:106:1100:0:290:7dff:fef3:
inet6 addr: fec0:106:2700:0:290:7dff:fef3:
inet6 addr: fec0:106:2700::4/64 Scope:Site ③
inet6 addr: fe80::290:7dff:fef3:
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:854 errors:154 dropped:154 overruns:0 frame:148
TX packets:293 errors:58 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:96536 (94.2 Kb) TX bytes:44664 (43.6 Kb)
Interrupt:3 Base address:0x100
①
组合AR的前缀与MAC地址所生成的新的“外地”地址
②
多余的家乡网络地址(因为HA radvd报文与MN autoconf设置为“true”)。
③
“原始”(家乡)地址
④
引导时生成的链路本地地址
几乎同时,MN会执行与HA的绑定更新。在tcpduom窗口中,您会看到几个报文分组发送到HA。为对绑定更新已发送以及来自MN的确认进行验证:
# mipdiag -s
Mobile IPv6 Statistics
NEncapsulations : 0
NDecapsulations : 0
NBindUpdatesRcvd : 0
NBindAcksRcvd : 1 ①
NBindNAcksRcvd : 0
NBindRqsRcvd : 0
NBindUpdatesSent : 1 ②
NBindAcksSent : 0
NBindNAcksSent : 0
NBindRqsSent : 0
NBindUpdatesDropAuth : 0
NBindUpdatesDropInvalid : 0
NBindUpdatesDropMisc : 0
NBindAcksDropAuth : 0
NBindAcksDropInvalid : 0
NBindAcksDropMisc : 0
NBindRqsDropAuth : 0
NBindRqsDropInvalid : 0
NBindRqsDropMisc : 0
①
接受到一条绑定ACK报文。
②
发送一条绑定UPDATE报文。
您也可用以下命令对绑定进行验证(在MN上):
# mipdiag -l
Mobile IPv6 Binding update list
Recipient CN: fec0:106:2700::2
BINDING home address: fec0:106:2700::4 care-of address: fec0:106:1100:0:290:7dff:fef3:
expires: 936 sequence: 0 state: 1
delay: 3 max delay 32 callback time: 736
您也可在HA上用statistics选项(-s)和“binding cache”(-c)选项对其进行验证:
# mipdiag -c
Mobile IPv6 Binding cache
Home Address Care-of Address Lifetime Type
fec0:106:2700::4 fec0:106:1100:0:290:7dff:fef3:
5.3 ping6
您可尝试从Mn ping AR的eth1(fec0:106:1100::1):
# ping6 fec0:106:1100::1
64 bytes from fec0:106:1100::1: icmp_seq=1 ttl=62 time=8.01 ms
64 bytes from fec0:106:1100::1: icmp_seq=2 ttl=62 time=8.02 ms
...
使用tcpdump命令可以看到报文分组如何移动:
12:13:51.789688 fec0:106:1100:0:202:a5ff:fe
fec0:106:2700::4 > fec0:106:1100::1: icmp6: echo request \ ②
(len 64, hlim 64) (len 104, hlim 255)
12:13:51.797675 fec0:106:2700::2 > fec0:106:1100:0:202:a5ff:fe
fec0:106:1100::1 > fec0:106:2700::4: icmp6: echo reply \
(len 64, hlim 62) (len 104, hlim 253)
①
报文分组首先使用MN的新IPv6地址从MN到HA。
②
接着从HA到AR。
③
然后AR对HA进行响应并将报文分组通过隧道传输给MN。
现在可看到更新后的统计结果(MN上的):
# mipdiag -s
Mobile IPv6 Statistics
NEncapsulations : 56
NDecapsulations : 25
...