Linux下移动IPv6实现指南
4.2 配置过程详解
4.2.1 搭建功能完备的IPv6网络
在我们开始测试移动IP以前,需要一个功能完备的IPv6网络。所有节点之间应能相互ping通。这是关键部分。比如,若AR无法ping通HA,就没有绑定更新。
我会给出搭建网络的方法和使用IPv6运行的简单步骤。搭建IPv6网络的更多信息,参见Peter Bieringer的Linux IPv6 HOWTO。
为简单起见,我禁用了加密功能-注意:在与无线网络打交道时,您应总使用加密!
也请注意不同的无线网络有不同的ESSID!
1.MN:移动节点有一个无线网卡。应禁用转发功能,但应接受自动配置与路由广播:
# iwconfig eth0 mode ad-hoc essid homenet enc off
# ifconfig eth0 inet6 add fec0:106:2700::4/64
# echo "0" > /proc/sys/net/ipv6/conf/eth0/forwarding
# echo "1" > /proc/sys/net/ipv6/conf/eth0/autoconf
# echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_ra
# echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_redirects
# /etc/init.d/mobile-ip6 start
2.HA:家乡代理有一个无线网卡。应启用转发,因为它使用正常路由来将截获的报文分组从物理网卡发送到虚拟隧道网卡。注意:必须添加缺省路由,否则在与位于外地LAN上的MN通信时会出现问题。一个可能的解决方法是使用HA作为家乡网络的缺省路由。
# iwconfig eth0 mode ad-hoc essid homenet enc off
# ifconfig eth0 inet6 add fec0:106:2700::2/64
# echo "1" > /proc/sys/net/ipv6/conf/eth0/forwarding
# echo "0" > /proc/sys/net/ipv6/conf/eth0/autoconf
# echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_ra
# echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_redirects
# ip route add ::/0 via fec0:106:2700::1
# /etc/init.d/mobile-ip6 start
3.R(家乡)路由器有两个网卡;一个无线与一个有线。路由器必须启用转发功能。
# ifconfig eth0 inet6 add fec0:106:2300::2/64
# iwconfig eth1 mode ad-hoc essid homenet enc off
# ifconfig eth1 inet6 add fec0:106:2700::1/64
# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
# echo "0" > /proc/sys/net/ipv6/conf/all/autoconf
# echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra
# echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
# ip route add fec0:106:1100::/64 via fec0:106:2300::1
4.AR:接入路由器(位于外地链路上)也有两个网卡;一个无线和一个有线。必须启用转发功能。
# ifconfig eth0 inet6 add fec0:106:2300::1/64
# iwconfig eth1 mode ad-hoc essid visitnet enc off
# ifconfig eth1 inet6 add fec0:106:1100::1/64
# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
# echo "0" > /proc/sys/net/ipv6/conf/all/autoconf
# echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra
# echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
# ip route add fec0:106:2700::/64 via fec0:106:2300::2
您可不修改proc变量,而使用sysctl。
注意:我们在实验床设置了静态路由。所有主机之间应该都可以相互ping通。
4.2.2 配置移动IPv6
MIPv6设置中最后要在network-mip6.conf中进行配置。RedHat系统中,该文件位于/etc/sysconfig/。该文件内容应非常容易理解。
1.HA:HA配置文件应包含以下设置:# cat /etc/network-mip6.conf
# Home Agent configuration file
FUNCTIONALITY=ha
DEBUGLEVEL=1
MIN_TUNNEL_NR=1
MAX_TUNNEL_NR=5
TUNNEL_SITELOCAL=yes
2.MN:MN配置文件看起来应该像这样:
# cat /etc/network-mip6.conf
# Mobile Node configuration file
FUNCTIONALITY=mn
DEBUGLEVEL=1
TUNNEL_SITELOCAL=yes
MIN_TUNNEL_NR=1
MAX_TUNNEL_NR=3
HOMEDEV=mip6mnha1
HOMEADDRESS=fec0:106:2700::4/64 # MN''s home adress
HOMEAGENT=fec0:106:2700::2/64 # HA''s address
3.接着,启动移动IP:
# /etc/init.d/mobile-ip6 start
Starting
您通过在HA上执行ifconfig命令来验证其是否启动。若建立了隧道,ip6tnl1,则启动了移动ip6:
# ifconfig
eth1 Link encap:Ethernet HWaddr 00:02:2D:2D:DE:79
inet6 addr: fec0:106:2700::2/64 Scope:Site
inet6 addr: fe80::202:2dff:fe2d:de79/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:618 errors:6 dropped:6 overruns:0 frame:6
TX packets:1485 errors:22 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:87914 (85.8 KiB) TX bytes:252596 (246.6 KiB)
Interrupt:3 Base address:0x100
ip6tnl1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 ①
UP POINTOPOINT RUNNING NOARP MTU:1460 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:576 (576.0 b) TX bytes:624 (624.0 b)
ip6tnl2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00②
UP RUNNING NOARP MTU:1460 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)
①隧道建立,准备连接。
②另外一条隧道就绪。
您也会看到mipv6模块被加载(MN)。
# lsmod
Module Size Used by Not tainted
mip6_mn 59888 0 (unused)
ipv6_tunnel 11448 1 [mip6_mn]
mip6_base 40728 0 [mip6_mn]
ipv6 179764 -1 [mip6_mn ipv6_tunnel mip6_base]
...
4.2.3 在AR上配置radvd
当MN来到一个新网络时,它进行链路本地地址配置,若成功则进入下一阶段。[RFC2462](IPv6无状态地址自动配置)描述了下一阶段:
“自动配置的下一阶段包括获得一条路由广播或确定没有路由器的存在。若存在路由器,则它们会发送具体规定主机应进行何种自动配置的路由器广播。若路由器不存在,则应当触发有状态自动配置。”
“路由器定期发送路由器广播,但连续广播之间的延迟通常比执行自动配置的主机愿意等待的时间更长。为快速获得一条广播,主机向全路由器组播组发送一条或多条路由器请求”。—第8页。
这是我们使用RADVD所在。
与IPv6无状态地址自动配置相关的更多细节请阅读[RFC2462]。
我们在AR的无线网卡上配置RADVD。radvd.conf文件应包含以下内容:
# cat /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvIntervalOpt on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvHomeAgentFlag off;
prefix fec0:106:1100::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
然后我们启动它:
# /etc/init.d/radvd start
您现在应可使用radvdump命令来确定所有radvd报文都正确的定期发送:
# radvdump
Router advertisement from fe80::202:2dff:fe54:d1b2 (hoplimit 255)
Received by interface eth1
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvCurHopLimit: 64
AdvManagedFlag: off
AdvOtherConfigFlag: off
AdvHomeAgentFlag: off
AdvReachableTime: 0
AdvRetransTimer: 0
Prefix fec0:106:1100::/64
AdvValidLifetime: 2592000
AdvPreferredLifetime: 604800
AdvOnLink: on
AdvAutonomous: on
AdvRouterAddr: off
AdvSourceLLAddress: 00 02 2D 54 D1 B2
注意!当在HA上使用radvd并启用“autoconf”(在proc中)时,除静态地址以外,您也会在MN上得到一个自动生成的IPv6地址: