2004-04-20
修订历史 | ||
---|---|---|
版本 1.2 | 2004-04-20 | 修订人: LKS |
更新了链接。将许可协议改回 GFDL | ||
版本 1.1 | 2004-02-04 | 修订人: LKS |
添加了 "在多个外部 LAN 中漫游" 和 "返回家乡"。进行了一些清理和重构。 | ||
版本 1.0 | 2003-12-02 | 修订人: TMM |
由 LDP 审核 | ||
版本 0.5.2 | 2003-11-26 | 修订人: LKS |
大量清理。感谢 John Levon levon [at] movementarian.org | ||
版本 0.5.1 | 2003-11-22 | 修订人: LKS |
由于某些 GFDL 问题,将许可协议从 GFDL 更改为 OPL 。 | ||
版本 0.5 | 2003-11-18 | 修订人: LKS |
转换为 XML Docbook。进行了一些清理。 | ||
版本 0.4 | 2002-11-07 | 修订人: LKS |
修复了一些错误 + 更新。感谢 Henrik Petander petander (at) tcs hut fi。 | ||
版本 0.3.1 | 2003-11-03 | 修订人: LKS |
更新到 MIPL relase 1.0 (kernel 2.4.22)。 | ||
版本 0.3 | 2003-08-05 | 修订人: LKS |
初始版本。 |
本文档描述了设置和使用 Linux 移动 IPv6 的软件和步骤。"IPv6 中的移动性支持" 草案 回答了移动 IP 的内容和原因
"每个移动节点始终由其归属地址标识,无论其当前连接到 Internet 的哪个位置。当远离其归属网络时,移动节点还会与转交地址关联,该地址提供有关移动节点当前位置的信息。寻址到移动节点归属地址的 IPv6 数据包通过移动节点的归属代理 (HA) 透明地路由到其转交地址。该协议使 IPv6 节点能够缓存移动节点的归属地址与其转交地址的绑定,然后将任何目标地址为移动节点的数据包直接发送到该转交地址。" --- draft-ietf-mipv6-24, 第 1-2 页。
"如果在 IPv6 中没有对移动性的特定支持,当移动节点离开其归属链路(在其归属 IPv6 子网前缀正在使用的链路上)时,寻址到移动节点(主机或路由器)的数据包将无法到达该移动节点,因为路由是基于数据包目标 IP 地址中的子网前缀。为了在移动后继续通信,移动节点可以在每次移动到新链路时更改其 IP 地址,但是当移动节点更改位置时,该移动节点将无法维护传输层和更高层连接。IPv6 中的移动性支持尤其重要,因为在 IPv6 的生命周期内,移动计算机很可能占 Internet 人口的大多数或至少相当大的比例。" --- draft-ietf-mipv6-24, 第 6 页。
有关所有详细信息,请阅读 "IPv6 中的移动性支持" 草案
移动 IP
移动节点 (MN) 漫游到外部网络并获取新的转交地址。
MN 执行与其归属代理 (HA) 的绑定更新(新转交地址在 HA 处注册)。HA 向 MN 发送绑定确认。
对应节点 (CN) 想要联系 MN。HA 拦截目标地址为 MN 的数据包。
然后,HA 使用 MN 的转交地址将所有数据包从 CN 隧道传输到 MN。
当 MN 回答 CN 时,它可以使用其当前的转交地址(并执行与 CN 的绑定),并直接与 CN 通信(优化路由),或者它可以将其所有数据包通过 HA 隧道传输。
有关说明,请参见图 "移动 IP"。
IP 版本 6 (IPv6) 是 Internet 协议的新版本,旨在作为 IP 版本 4 (IPv4) 的后继者 [RFC-791]。从 IPv4 到 IPv6 的更改主要分为以下几类
扩展的寻址能力
简化标头格式
改进了对扩展和选项的支持
流标记能力
身份验证和隐私能力
您应该对 IPv6 无状态自动配置有基本的了解,才能完全理解 '移动 IPv6' (MIPv6) 的工作方式。您可以在 [RFC2462] 中阅读有关 IPv6 无状态地址自动配置的信息。
有关 IPv6 的更多信息,请访问 IETF 的 IPv6 工作组。
目前有两种可用的移动 IPv6 Linux 实现。英国兰卡斯特大学拥有最古老的 (?) 实现 (http://www.cs-ipv6.lancs.ac.uk/MobileIP/)。支持的最新内核是 2.1.90,并且与 IETF 移动 IPv6 草案 v5 兼容(当前修订版为 v24)。自 1998 年以来,代码和网站尚未更新,因此被认为是过时的。
另一个实现,即最新的实现,是赫尔辛基理工大学的 MIPL 项目。支持的最新内核是 2.4.22,并且它们具有针对即将到来的 2.6 内核的补丁(请参见 FAQ)。访问 http://www.mobile-ipv6.org/ 以获取论文、软件或浏览邮件存档。
MIPL MIPv6 实现需要内核补丁。该实现修改了 IPv6 内核堆栈,因此必须重新编译内核。安装过程已得到很好的记录,但我将提供一个简短的分步说明。
请注意!对两个不同内核的需求(一个用于 MN,一个用于 HA)已过时。只需在同一内核中编译对 MN 和 HA 的支持即可。无法同时作为 MN 和 HA 运行;选择哪种模式取决于加载了哪些模块。
从 http://www.mobile-ipv6.org/ 下载最新的 Linux MIPv6 源代码。今天的最新版本是:mipv6-1.0-v2.4.22。最后四个数字对应于应应用补丁的 Linux 内核
# cd /usr/local/src # wget http://www.mobile-ipv6.org/download/mipv6-1.0-v2.4.22.tar.gz # tar zxfv mipv6-1.0-v2.4.22.tar.gz |
从 ftp.kernel.org 下载并解压缩相应的 Linux 内核版本
# cd /usr/src # wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.22.tar.bz2 # tar jxvf linux-2.4.22.tar.bz2 # ln -s linux-2.4.22 linux # cd linux |
应用 MIPv6 补丁
# patch -p1 --dry-run < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch |
--dry-run 选项检查补丁是否能够正确应用。如果您收到任何失败的 hunks,则不应继续。如果一切正常,请执行
# patch -p1 < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch |
现在您的内核树已准备好进行配置。运行您最喜欢的 make *config。MIPv6 选项位于 "网络选项" 下。以下选项应存在于 ".config" 中
CONFIG_EXPERIMENTAL=y CONFIG_SYSCTL=y CONFIG_PROC_FS=y CONFIG_MODULES=y CONFIG_NET=y CONFIG_NETFILTER=y CONFIG_UNIX=y CONFIG_INET=y CONFIG_IPV6=m CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_IPV6_TUNNEL=m CONFIG_IPV6_MOBILITY=m CONFIG_IPV6_MOBILITY_MN=m CONFIG_IPV6_MOBILITY_HA=m |
由于 MIPL 仍在开发中,因此您可能需要启用
CONFIG_IPV6_MOBILITY_DEBUG=y |
使用调试消息,可以更容易地找出出现问题的原因。此外,报告错误时,调试消息非常有帮助。
为了确保您拥有所有正确的选项,您可以运行chkconf_kernel.sh,这是一个包含在 MIPL tarball 中的小型 shell 脚本。
接下来,您应该编译并安装您的内核。
提示:为了轻松地区分此内核与其他内核,您可以更改/usr/src/linux/Makefile中的 "EXTRAVERSION" 变量,例如 "-MIPv6-1"。
阅读 Linux 内核 HOWTO 以获取有关如何修补、编译和安装新内核的详细说明。
用户空间工具mipdiag,必须安装配置文件和 init 脚本,该模块才能正常工作
# cd /usr/local/src/mipv6-1.0-v2.4.22 # ./configure # make && make install |
红帽
所有 init 脚本都位于/etc/init.d/中,它们被符号链接到正确的运行级别(/etc/rcX.d/)。您可以发出命令
# chkconfig --add mobile-ip6 |
以在启动时启用 MIPv6,或
# chkconfig --del mobile-ip6 |
从启动中删除 MIPv6。
Debian
如果您很幸运地运行 Debian,则可以发出命令
# update-rc.d -n mobile-ip6 start 75 3 4 5 . stop 05 1 2 6 . |
以设置所有必要的链接。
Slackware
Slackware 用户的所有启动/运行级别脚本都位于/etc/rc.d中。由于 'configure' 不检查 "/etc/rc.d",您可以添加 INIT_SLACK="/etc/rc.d",然后将 INIT_SLACK 添加到 'configure' 中的 INITDIRS(在 configure 中搜索 INITDIR)。由于您正在运行 Slackware,您可能已经知道了这一点。以下命令应该可以解决问题
# echo '/etc/rc.d/mobile-ip6 start' >> /etc/rc.d/rc.local |
如果您不破解 Makefile,则mobile-ip6脚本安装在 '/' (然后您可以将其移动到 /etc/rc.d/)。
现在您应该拥有一个可工作的 MIPL 修补内核,已安装的用户级别工具,并且已启用在启动时自动启动。如果出现任何问题,请仔细阅读以上各节。
我们在测试平台中使用的地址是站点本地地址。 你也可以使用全局地址,但请注意,链路本地地址将不起作用! 我们的测试平台由四个节点组成; 参见图"移动 IPv6 测试平台"。
HA - Home Agent (家乡代理): HA 位于家乡网络,地址为fec0:106:2700::2, 具有一个无线接口。
MN - Mobile Node (移动节点): 当 MN 在 "家乡网络"时,它具有地址fec0:106:2700::4。 当 MN 漫游到另一个网络时,它会生成一个新的 "转交" 地址。
R - Router (路由器): 这是从家乡网络到互联网的路由器。 它有一个无线接口,地址为fec0:106:2700::1和一个有线接口,地址为fec0:106:2300::2.
AR - Access Router (接入路由器): AR 和 R 之间的链路是我们的 "互联网" - 但在本测试用例中只是一根交叉电缆(可以是任何网络)。 AR 有两个接口; 到 R 的有线接口地址为fec0:106:2300::1, 无线接口地址为fec0:106:1100::1.
移动 IPv6 测试平台
在我们开始测试移动 IP 之前,我们需要一个功能完善的 IPv6 网络。 所有节点都应该能够互相 ping 通。 这是至关重要的一部分。 例如,如果 AR 无法 ping 通 HA,则不会有绑定更新。
我将简要介绍如何使用 IPv6 启动并运行我们的网络。 有关设置 IPv6 网络的更多信息,您可以阅读 Peter Bieringer 的优秀 Linux IPv6 HOWTO。
为了简单起见,我关闭了加密 - 注意,在处理无线网络时,您应该始终使用加密!
另请注意,不同的无线网络具有不同的 ESSID!
MN: 移动节点有一个无线接口。 转发应该关闭,但应该接受自动配置和 RA。
# 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 |
HA: 家乡代理有一个无线接口。 它应该启用转发,因为它使用正常的路由将从物理接口捕获的数据包传递到虚拟隧道接口。 注意:您必须添加默认路由,否则 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 |
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 |
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 |
您可以改用 sysctl,而不用修改 proc 变量。
注意:我们正在测试平台上设置静态路由。 现在您应该能够从每个主机 ping 通所有主机。
最后的配置是 MIPv6 设置,在network-mip6.conf中。 在 Debian/Slackware 中,该文件位于/etc/下。 (在 RedHat 中,该文件位于/etc/sysconfig/下。) 该文件应该是很容易理解的。
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 |
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 |
接下来,启动移动 IP
# /etc/init.d/mobile-ip6 start Starting Mobile IPv6: OK |
您可以通过执行以下操作来验证它是否已启动ifconfig在 HA 上。 如果隧道启动,ip6tnl1, 则 mobile-ip6 已启动
您还会看到已加载 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] ... |
当 MN 进入新网络时,它会进行链路本地地址配置,如果成功,则进入下一阶段。 我让 [RFC2462] (IPv6 无状态地址自动配置) 描述下一阶段
"自动配置的下一阶段涉及获取路由器通告或确定不存在路由器。 如果存在路由器,它们将发送路由器通告,指定主机应执行哪种类型的自动配置。 如果不存在路由器,则应调用有状态自动配置。"
"路由器定期发送路由器通告,但连续通告之间的延迟通常比执行自动配置的主机想要等待的时间更长。 为了快速获得通告,主机向所有路由器多播组发送一个或多个路由器请求。" --- 第 8 页
这就是我们使用 RADVD 的地方。
阅读 [RFC2462] 了解有关 IPv6 无状态地址自动配置的更多详细信息。
我们将在 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 地址(这是多余的),以及您的静态地址
为了使 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 |
按照上面所示执行每个配置; 尤其重要的是在家乡网络和访问的网络上使用不同的 ESSID。
当您在 MN 上启动 mobile-IPv6 时,您将看到多播路由器请求消息
# tcpdump -i eth0 -vv ip6 or proto ipv6 ... 13:32:54.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) 13:32:55.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) 13:32:57.681765 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \ (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255) ... |
通用移动检测使用邻居不可达性检测来检测默认路由器是否不再双向可达,在这种情况下,移动节点必须发现新的默认路由器(通常在新链路上)。
为了轻松了解发生了什么,您应该为以下每个命令创建一个 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 地址配置一个新的 IPv6 地址。 如果您键入 ifconfig eth0,您将看到新的 IPv6 地址
几乎在同一时间,MN 将执行到 HA 的绑定更新。 在您的 tcpdump 窗口中,您将看到多个发往 HA 的数据包。 要验证是否已从 MN 发送并确认绑定更新
您还可以使用以下命令验证绑定(在 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:31a expires: 936 sequence: 0 state: 1 delay: 3 max delay 32 callback time: 736 |
您还可以使用统计选项 (-s) 和 "绑定缓存" (-c) 选项在 HA 上验证它
# mipdiag -c Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type fec0:106:2700::4 fec0:106:1100:0:290:7dff:fef3:31a 971 2 |
从 MN,您可以尝试 ping AR 的 eth1 (fec0:106:1100::1)
# ping6 fec0:106:1100::1 PING fec0:106:1100::1(fec0:106:1100::1) from fec0:106:2700::4 : 56 data bytes 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,您可以看到数据包的传输方式
您现在可以看到统计信息已更新 (在 MN 上)
# mipdiag -s Mobile IPv6 Statistics NEncapsulations : 56 NDecapsulations : 25 ... |
MIPv6 做的一件有趣的事情是将默认路由更改为隧道。 新的默认路由变为
# route -A inet6 Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface ::/0 :: UD 64 0 0 ip6tnl1 .... |
如果它没有添加默认路由,您可以手动添加它
# ip route ::/0 via dev ip6tnl |
穿越多个访问的网络与穿越 一个 网络没有什么不同。 您必须记住的唯一一件事是您将为每个访问的网络生成一个新地址。
MN 穿越几个不同的 LAN。
MN 首先访问 'visitnet',正如我们上面所经历的那样。
然后 MN 从 'visitnet' 漫游到 'visitnet2'。
在 'visitnet2' 时,MN 会生成一个新的 IPv6 地址并向 HA 进行新的绑定更新。
然后 MN 返回家乡。 (参见下一节。)
位于 "visitnet2" 的 AR 的配置与另一个 AR(位于 "visitnet")完全相同,只是使用了地址fec0:106:1000::/64而不是fec0:106:1100::/64.
要使移动节点从 'visitnet' 漫游到 'visitnet2',请发出命令 (在 MN 上)
# iwconfig eth0 essid visitnet2 |
然后您将看到 MN 将自身配置到新网络
注意! 当进入新网络时,您可能需要在 MN 上重新启动 mobile-ipv6!
# /etc/init.d/mobile-ip6 restart Stopping Mobile IPv6: OK Starting Mobile IPv6: OK |
然后,MN 将执行到 HA 的新绑定更新。 请注意新的 "转交地址"
# 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:1000:0:290:7dff:fef3:31a expires: 973 sequence: 14 state: 1 delay: 3 max delay 32 callback time: 773 |
您还可以看到 HA 上的 "绑定缓存" 已更新
# mipdiag -c Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type fec0:106:2700::4 fec0:106:1000:0:290:7dff:fef3:31a 943 2 |
要使 MN 返回家乡,您只需发出命令
# iwconfig eth0 essid homenet |
MN 将知道它已返回家乡,因为 HA 正在发送设置了 HA-bit (AdvHomeAgentFlag) 的 radvd 消息,请参阅 第 4.2.4 节
您可以看到 MN "已返回家乡",因为 HA 上的绑定缓存信息已刷新(为空)
Mobile IPv6 Binding cache Home Address Care-of Address Lifetime Type |
问: 为什么我们必须创建/dev/mipv6_dev条目?
答: 主要原因是用户空间工具 mipdiag 可以通过设备文件使用 ioctl 调用对内核参数进行修改。 mknod 创建具有移动-ip6 模块可识别的参数的特殊设备文件。
问: 是否支持内核 2.6.x?
答: 这是 Henrik Petander 在 MIPL 邮件列表上的回答
以下是关于 2.6 内核系列的 MIPL 状态的简短概述:
我们与 USAGI 项目合作完成了 Mobile IPv6 的内核基础设施。该基础设施支持路由优化、隧道和策略路由。
我们目前正在开发用户空间守护进程,该守护进程处理 MIPv6 信令并控制内核部分的操作。用户空间部分也在顺利进行中。但是,协议逻辑仍然缺失,因此目前还没有任何东西供用户测试。我们应该在三月底之前准备好一个运行良好且经过测试的原型。
问:MIPL 是否支持 IPSec?
答:在 2.4.x 上不支持 IPSec。2.6 系列的 MIPL 从一开始就将支持 IPSec。您可以使用第三方 IPSec 实现。
问:如何控制用于 MN 和 CN 之间通信的路由类型(通过 HA 隧道或通过使用绑定更新/确认的直接通信)?
答:您可以通过以下方式控制:
/proc/sys/conf/net/ipv6/mobility/accept_return_routability
如果您不想使用返回路由能力和路由优化,请将其设置为 0,使用以下命令:
# echo 0 > /proc/sys/..../accept_return_routability
然后 MN 将仅通过家乡隧道与 CN 进行通信。
问:不同的无线网络可以有不同的 ESSID/WEP 密钥吗?
答:可以,但是您必须在新到达网络时更改此设置。来自 MIPL 的 MIPv6 无法自动执行此操作。
问:如果 MN 已通过多个访问 LAN,然后返回家乡;该接口仍然具有来自所有访问网络的自动生成的 IPv6 地址!有没有办法“刷新/删除”这些地址?
答:不,我不知道任何可以自动删除这些地址的方法,但是您可以手动删除它们
# ifconfig eth0 inet6 del <ipv6-地址>
问:主机 B 有两个接口,分配了两个不同的子网。当我从主机 A ping B 时,它没有响应!为什么?主机 A 知道主机 B(子网)在哪里!
答:主机 B 不知道主机 A 在哪里(B 不知道 A 的网络在哪里),因此您必须添加一个路由条目
# ip route add fec0:106:2700::/64 via fec0:106:2300::1
或者
# route -A inet6 add fec0:106:2700::/64 gw fec0:106:2300::1 dev eth0
问:如何在 IPv6 中设置默认网关?
答:您可以使用传统的“route”命令来执行此操作
# route -A inet6 add default gw <ipv6-主机>
或者使用较新的“ip”命令
# ip route ::/0 via <ipv6-主机>
问:为什么主机发送一个多播地址而不是一个任播地址,以请求路由器请求?
答:因为主机希望从每个路由器获得答案,而不仅仅是从任何路由器获得答案。目的是能够获得所有参数并选择“最佳”默认路由器。
问:为什么 MN 没有注意到它已经移动了?
答:它认为它之前的路由器仍然可以访问。这可能是由于路由器通告中的非常长的生命周期导致的。检查路由器中发送路由器通告的程序的配置。如果该程序支持路由器通告间隔,则您可以使用它来帮助 MN 检测移动,方法是将间隔的使用设置为on。有关详细信息,请参见 man radvd.conf。
Linux 的 Mobile IPv6 http://www.mipl.mediapoli.com/
Mobile IP 工作组 (IETF) http://www.ietf.org/html.charters/mobileip-charter.html
Mobile IPv6 草案 http://www.ietf.org/internet-drafts/draft-ietf-mobileip-ipv6-24.txt
IPv6 工作组 (IETF) http://www.ietf.org/html.charters/ipv6-charter.html
RFC2460 互联网协议,版本 6 (IPv6) 规范 http://www.ietf.org/rfc/rfc2460.txt
RFC2461 IP 版本 6 (IPv6) 的邻居发现 http://www.ietf.org/rfc/rfc2461.txt
RFC2462 IPv6 无状态地址自动配置 http://www.ietf.org/rfc/rfc2462.txt
Peter Bieringer 的 Linux IPv6 HOWTO (英文) http://ldp.linux.no/HOWTO/Linux+IPv6-HOWTO/
网络应用程序的 IPv6 支持的当前状态 http://www.deepspace6.net/docs/ipv6_status_page_apps.html
Linux 内核 HOWTO http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Kernel-HOWTO.html
版权所有 (c) 2003, 2004 Lars Strand。
根据 GNU 自由文档许可证,版本 1.2 或自由软件基金会发布的任何更高版本的条款,允许复制、分发和/或修改本文档;没有不变部分,没有封面文字,也没有封底文字。许可证的副本包含在标题为“GNU 自由文档许可证”的部分中。
本文档最初是在 Emacs 中使用 LaTeX 编写的。 HTML 版本使用 latex2html 创建。 后来它被转换为 DocBook XML。
本文档的最新版本可以在以下位置找到
本文档是安全通信互操作网络 (INSC 任务 6) 的一部分制作的
感谢 Andreas Hafslund (andreha [at] unik.no) 的初始支持。 还要感谢 UniK(大学研究生中心)http://www.unik.no 和 FFI(挪威国防研究所)http://www.ffi.mil.no 的硬件支持。
还要感谢我引用的其他 HOWTO 作者的作品
Peter Bieringer 的Linux IPv6 HOWTO(英文)
版权所有 (C) 2000,2001,2002 自由软件基金会,Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 每个人都被允许复制和分发本许可证文档的完整副本,但不允许更改它。
本许可证的目的是使手册、教科书或其他功能性和有用的文档在自由意义上“自由”:确保每个人都拥有有效自由来复制和重新分发它,无论是否对其进行修改,无论是商业还是非商业的。 其次,本许可证为作者和出版商保留了一种方法来获得其作品的荣誉,同时不被认为对他人所做的修改负责。
本许可证是一种“copyleft”,这意味着文档的衍生作品本身必须在相同意义上是自由的。它补充了 GNU 通用公共许可证,这是一个为自由软件设计的 copyleft 许可证。
我们设计本许可证是为了将其用于自由软件的手册,因为自由软件需要自由文档:一个自由程序应该附带提供与软件相同的自由的手册。但是本许可证不仅限于软件手册;它可以用于任何文本作品,无论主题或是否作为印刷书籍出版。我们主要推荐本许可证用于其目的是指导或参考的作品。
本许可证适用于任何手册或以任何媒介存在的其他作品,其中包含版权所有者发出的声明,声明可以根据本许可证的条款分发该作品。此类声明授予一项全球性的、免版税的许可证,无限期地使用该作品,但须符合本文所述的条件。“文档”(Document),下文是指任何此类手册或作品。公众的任何成员都是被许可人,并被称为“您”(you)。如果您以根据版权法需要许可的方式复制、修改或分发作品,则您接受该许可。
文档的“修改版本”(Modified Version)是指包含文档或其一部分的任何作品,无论是逐字复制,还是经过修改和/或翻译成另一种语言。
“辅助部分”(Secondary Section)是文档的指定附录或前言部分,专门处理文档的出版商或作者与文档的总体主题(或相关事项)之间的关系,并且不包含任何可以直接归入该总体主题的内容。(因此,如果文档部分是数学教科书,则辅助部分可能不会解释任何数学。)该关系可能是与主题或相关事项的历史联系,或关于它们的法律、商业、哲学、道德或政治立场的问题。
“不变部分”(Invariant Sections)是某些辅助部分,其标题已指定为不变部分的标题,在声明该文档根据本许可证发布的声明中。如果某个部分不符合上述辅助部分的定义,则不允许将其指定为不变部分。文档可能包含零个不变部分。如果文档没有标识任何不变部分,则不存在不变部分。
“封面文字”(Cover Texts)是在声明该文档根据本许可证发布的声明中列出的某些文本短语,作为封面文字或封底文字。封面文字最多可以有 5 个单词,封底文字最多可以有 25 个单词。
文档的“透明”(Transparent)副本是指一种机器可读的副本,以一种其规范可供公众使用的格式表示,该格式适合于使用通用文本编辑器或(对于由像素组成的图像)通用绘画程序或(对于绘图)一些广泛可用的绘图编辑器直接修改文档,并且适合于输入到文本格式化程序或自动翻译成适合输入到文本格式化程序的各种格式。以其他透明文件格式制作的副本,其标记或缺少标记的安排是为了阻止或劝阻读者后续修改,则不是透明的。如果将图像格式用于大量文本,则该图像格式不是透明的。不是“透明”的副本称为“不透明”(Opaque)。
透明副本的合适格式示例包括不带标记的纯 ASCII 码,Texinfo 输入格式,LaTeX 输入格式,使用公开可用的 DTD 的 SGML 或 XML,以及符合标准的简单 HTML、PostScript 或 PDF,这些格式都设计为便于人工修改。透明图像格式的示例包括 PNG、XCF 和 JPG。不透明格式包括仅能由专有文字处理器读取和编辑的专有格式,DTD 和/或处理工具未普遍可用的 SGML 或 XML,以及某些文字处理器出于输出目的而生成的机器生成 HTML、PostScript 或 PDF。
“标题页”是指,对于印刷书籍,标题页本身,以及紧随其后、足以清晰地包含本许可证要求出现在标题页上的材料的页面。对于没有标题页格式的作品,“标题页”是指作品标题最显著出现的位置附近的文本,位于正文开始之前。
“名为 XYZ 的章节”是指文档中一个命名的子单元,其标题恰好为 XYZ,或者包含 XYZ,并在其后用括号括起 XYZ 在另一种语言的翻译。(此处 XYZ 代表以下提到的特定章节名称,例如“致谢”、“献词”、“背书”或“历史”。) 当您修改文档时,“保留章节标题”意味着该章节根据此定义仍然是“名为 XYZ 的章节”。
文档可能在声明本许可证适用于该文档的声明旁边包含“免责声明”。 这些免责声明被视为通过引用包含在本许可证中,但仅限于免除担保:这些免责声明可能具有的任何其他含义均无效,并且对本许可证的含义没有影响。
您可以以任何媒介复制和分发文档,无论是商业用途还是非商业用途,前提是本许可证、版权声明以及声明本许可证适用于该文档的许可证声明在所有副本中都得到复制,并且您没有在本许可证的条款上增加任何其他条件。您不得使用技术措施来阻止或控制对您制作或分发的副本的阅读或进一步复制。但是,您可以接受补偿以换取副本。如果您分发足够多的副本,还必须遵守第 3 节中的条件。
您还可以按照上述相同的条件出借副本,并且您可以公开展示副本。
如果您发布超过 100 份的文档印刷副本(或通常具有印刷封面的媒体副本),并且文档的许可证声明要求提供封面文本,则必须将副本包裹在带有所有封面文本的封面上,这些文本必须清晰易读:正面封面的文本位于正面封面上,背面封面的文本位于背面封面上。两个封面还必须清晰且易读地将您标识为此类副本的出版商。正面封面必须以相同的突出程度和可见性呈现完整的标题及其所有单词。您可以在封面上添加其他材料。如果修改仅限于封面,只要它们保留文档的标题并满足这些条件,则在其他方面可以将其视为逐字复制。
如果任何一个封面的所需文本过于冗长而无法清晰地容纳,则应将列出的第一个文本(尽可能多地容纳)放在实际封面上,并将其余文本延续到相邻页面上。
如果您发布或分发超过 100 份的不透明副本,则必须在每个不透明副本中包含一份机器可读的透明副本,或者在每个不透明副本中或与之一起声明一个计算机网络位置,供公众通过公共标准网络协议访问以下载文档的完整透明副本,且不包含任何附加材料。如果您使用后一种选择,则必须采取合理谨慎的步骤,在您开始大量分发不透明副本时,确保该透明副本在声明的位置保持可访问,直到您向公众分发(直接或通过您的代理或零售商)该版本的最后一个不透明副本至少一年后。
建议(但不是必需的)您在重新分发大量副本之前与文档的作者联系,以便他们有机会向您提供文档的更新版本。
您可以根据上述第 2 节和第 3 节的条件复制和分发文档的修改版本,前提是您完全在本许可证下发布修改版本,并将修改版本视为文档,从而允许拥有副本的任何人分发和修改修改版本。此外,您必须在修改版本中执行以下操作:
在标题页(以及封面,如果有)上使用与文档标题以及以前版本标题不同的标题(如果以前有任何版本,则应在文档的历史记录部分中列出)。如果该版本的原始出版商允许,您可以使用与以前版本相同的标题。
在标题页上,列出作为作者的一个或多个人员或实体,他们对修改版本的修改负责,以及文档的至少五位主要作者(如果主要作者少于五位,则列出所有主要作者),除非他们免除您此要求。
在标题页上注明修改版本的出版商的名称,作为出版商。
保留文档的所有版权声明。
在其他版权声明旁边添加适当的版权声明,声明您的修改。
在版权声明之后立即包含一个许可证声明,允许公众根据本许可证的条款使用修改版本,格式如 附录 所示。
在该许可证声明中保留文档许可证声明中给出的不变章节和所需封面文本的完整列表。
包含本许可证的未修改副本。
保留名为“历史”的章节,保留其标题,并向其添加一项,至少说明修改版本的标题、年份、新作者和出版商,如标题页所示。如果文档中没有名为“历史”的章节,则创建一个说明文档的标题、年份、作者和出版商的章节,如其标题页所示,然后添加一个项目,描述修改版本,如前一句所述。
保留文档中提供的网络位置(如果有),用于公众访问文档的透明副本,同样保留文档中提供的用于访问其所基于的先前版本的网络位置。 这些可以放在“历史”部分中。您可以省略在文档本身发布前至少四年发布的作品的网络位置,或者如果它所指的版本原始出版商允许。
对于任何名为“致谢”或“献词”的章节,保留该章节的标题,并保留该章节中每个贡献者致谢和/或献词的所有实质和语气。
保留文档的所有不变章节,其文本和标题均未修改。章节编号或等效项不被视为章节标题的一部分。
删除任何名为“背书”的章节。 修改版本中不得包含此类章节。
请勿将任何现有章节重新命名为“背书”,或者在标题上与任何不变章节冲突。
保留任何免责声明。
如果修改版本包含新的前言章节或附录,这些章节符合辅助章节的条件并且不包含从文档复制的材料,您可以选择将其中一些或全部章节指定为不变的。 为此,请将它们的标题添加到修改版本的许可证声明中的不变章节列表中。 这些标题必须与任何其他章节标题不同。
您可以添加一个名为“背书”的章节,前提是其中仅包含各方对您的修改版本的背书——例如,同行评审声明或文本已被组织批准为标准的权威定义。
您可以在修改版本中封面文本列表的末尾添加一个最多五个单词的段落作为正面封面文本,以及一个最多 25 个单词的段落作为背面封面文本。 任何一个实体只能添加(或通过安排添加)一段正面封面文本和一段背面封面文本。 如果文档已经包含相同封面的封面文本,该文本先前由您或通过由您代表的同一实体安排添加,则您不得添加另一个文本;但是,您可以在获得添加旧文本的先前出版商的明确许可后替换旧文本。
文档的作者和出版商不通过本许可证允许使用他们的姓名进行宣传或断言或暗示对任何修改版本的认可。
您可以将文档与其他在本许可证下发布的文档合并,根据上述 第 4 节中关于修改版本的定义,前提是您在组合中包含所有原始文档的所有不变章节,未修改,并将它们全部列为组合作品的许可证声明中的不变章节,并且您保留所有免责声明。
组合作品只需要包含本许可证的一个副本,并且多个相同的不变章节可以用单个副本替换。 如果有多个同名但内容不同的不变章节,请通过在其末尾添加(在括号中)该章节的原始作者或出版商的姓名(如果已知)或唯一的编号,来使每个此类章节的标题唯一。 对组合作品的许可证声明中的不变章节列表中的章节标题进行相同的调整。
在组合中,您必须合并各个原始文档中名为“历史”的任何章节,形成一个名为“历史”的章节;同样合并任何名为“致谢”的章节,以及任何名为“献词”的章节。 您必须删除所有名为“背书”的章节。
您可以创建一个由文档和其他在本许可证下发布的文档组成的集合,并使用包含在集合中的单个副本替换各个文档中本许可证的各个副本,前提是您遵循本许可证中关于逐字复制每个文档的所有其他方面的规则。
您可以从此类集合中提取单个文档,并在本许可证下单独分发,前提是您将本许可证的副本插入到提取的文档中,并在逐字复制该文档的所有其他方面都遵循本许可证。
文档或其衍生作品与其他单独和独立的文档或作品在存储或分发介质的卷上或卷中汇编在一起,如果汇编产生的版权不用于限制汇编用户的合法权利,超出单个作品允许的范围,则称为“聚合”。 当文档包含在聚合中时,本许可证不适用于聚合中本身不是文档的衍生作品的其他作品。
如果第 3 节的封面文字要求适用于这些文档副本,那么如果该文档小于整个集合的一半,则该文档的封面文字可以放置在将该文档括在集合内的封面上,或者如果该文档是电子形式,则放置在封面的电子等效物上。否则,它们必须出现在将整个集合括起来的印刷封面上。
翻译被认为是一种修改,因此您可以根据第 4 节的条款分发文档的翻译版本。用翻译版本替换不变章节需要获得其版权持有者的特别许可,但是您可以包含一些或全部不变章节的翻译版本,以及这些不变章节的原始版本。您可以包含本许可证的翻译版本,以及文档中的所有许可证声明和任何免责声明,前提是您还包括本许可证的原始英文版本以及这些声明和免责声明的原始版本。如果本许可证或声明或免责声明的翻译版本与原始版本之间存在差异,则以原始版本为准。
如果文档中的章节标题为“致谢”、“献词”或“历史”,则保留其标题(第 1 节)的要求(第 4 节)通常需要更改实际标题。
除非本许可证明确规定,否则您不得复制、修改、再许可或分发该文档。任何其他复制、修改、再许可或分发该文档的尝试均无效,并将自动终止您在本许可证下的权利。但是,根据本许可证从您那里收到副本或权利的各方,只要这些各方保持完全遵守,其许可证将不会终止。
自由软件基金会可能会不时发布 GNU 自由文档许可证的新修订版本。此类新版本在精神上将与当前版本相似,但在细节上可能会有所不同,以解决新的问题或疑虑。请参阅 https://gnu.ac.cn/copyleft/。
许可证的每个版本都有一个唯一的版本号。如果文档指定本许可证的特定编号版本“或任何后续版本”适用于它,您可以选择遵循该指定版本或自由软件基金会已发布的任何后续版本(非草案)的条款和条件。如果文档未指定本许可证的版本号,您可以选择自由软件基金会曾经发布的任何版本(非草案)。
要在您编写的文档中使用本许可证,请在文档中包含一份本许可证的副本,并在标题页之后放置以下版权和许可证声明
版权所有 (c) 年份 您的姓名。 根据 GNU 自由文档许可证第 1.2 版或自由软件基金会发布的任何后续版本条款,允许复制、分发和/或修改本文档;没有不变章节,没有封面文字,也没有封底文字。 许可证的副本包含在标题为“GNU 自由文档许可证”的章节中。
如果您有不变章节、封面文字和封底文字,请将“with...Texts”行替换为以下内容
其中不变章节为 LIST THEIR TITLES,封面文字为 LIST,封底文字为 LIST。
如果您有不变章节而没有封面文字,或者三种情况的其他组合,请合并这两种替代方案以适应实际情况。
如果您的文档包含重要的程序代码示例,我们建议您在自由软件许可证(例如 GNU 通用公共许可证)下并行发布这些示例,以允许它们在自由软件中使用。