3. Linux 移动 IPv6

目前有两个可用的 Linux 移动 IPv6 实现。英国兰卡斯特大学拥有最旧的(?)实现 ( http://www.cs-ipv6.lancs.ac.uk/MobileIP/)。 它支持的最新内核是 2.1.90,并且与 IETF mobile IPv6 draft-v5 兼容(当前修订版是 v24)。 代码和网站自 1998 年以来就未更新,因此被认为是过时的。

另一个最新的实现是赫尔辛基理工大学的 MIPL 项目。 它支持的最新内核是 2.4.22,并且他们有适用于即将推出的 2.6 内核的补丁(请参阅 FAQ)。 访问 http://www.mobile-ipv6.org/ 以获取论文、软件或浏览邮件存档。

3.1. 打补丁内核

MIPL MIPv6 实现需要内核补丁。 该实现修改了 IPv6 内核堆栈,因此需要重新编译内核。 安装过程有详细的文档记录,但我将简要地逐步介绍。

请注意! 需要两个不同的内核(一个用于 MN,一个用于 HA)的需求已经过时。 只需在同一内核中编译对 MN 和 HA 的支持即可。 不可能同时作为 MN 和 HA 运行; 选择哪种模式取决于加载了哪些模块。

  1. 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
        
  2. 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
         
  3. 应用 MIPv6 补丁

         # patch -p1 --dry-run < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch
        

    --dry-run 选项检查补丁是否可以正确应用。 如果您收到任何失败的 hunk,则不应继续。 如果一切顺利,请执行

     
          # patch -p1 < /usr/local/src/mipv6-1.0-v2.4.22/mipv6-1.0-v2.4.22.patch 
        
  4. 现在您的内核树已准备好进行配置。 运行您最喜欢的 make *config。 MIPv6 选项位于 “Networking Options” 下。 以下选项应存在于 “.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 脚本。

  5. 接下来,您应该编译并安装您的内核。

    提示:为了轻松区分此内核与其他内核,您可以更改 “EXTRAVERSION” 变量在/usr/src/linux/Makefile例如 “-MIPv6-1”

阅读 Linux 内核 HOWTO 以获取有关如何打补丁、编译和安装新内核的详细说明。

3.2. 用户空间工具

用户空间工具mipdiag,配置文件和 init 脚本必须安装才能使模块正常工作

      # cd /usr/local/src/mipv6-1.0-v2.4.22
      # ./configure
      # make && make install
    

3.3. MIPv6 设备节点

MIPv6 模块还需要一个新的设备节点条目。 发出命令

      # mknod /dev/mipv6_dev c 0xf9 0
    

3.4. 自动启动

  1. Red Hat

    所有 init 脚本都位于/etc/init.d/,它们被符号链接到正确的运行级别(/etc/rcX.d/)。 您可以发出命令

       # chkconfig --add mobile-ip6
            

    以在启动时启用 MIPv6,或

       # chkconfig --del mobile-ip6
            

    以从启动中删除 MIPv6。

  2. Debian

    如果您很幸运地运行 Debian,则可以发出命令

       # update-rc.d -n mobile-ip6 start 75 3 4 5 . stop 05 1 2 6 .
            

    以设置所有必要的链接。

  3. 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/)。