在 OpenWrt Chaos Calmer 中配置 IPv6 NAT

参考文章:“ 在OpenWrt上配置原生IPv6 NAT 服务器

个人环境和参考文章相似都为教育网,使用 Openwrt 版本同样(15.05-rc2 比较精简,不带 luci,D-Link DIR-605 中可怜的 4M flash 竟然能剩896K空间能够安装软件),对参考文章的步骤略作修改。网络

  1. 刷入 OpenWrt 15.05-rc2,使用原始配置,安装 IPv6 内核 nat 模块及路由追踪软件:测试

    opkg update
    opkg install kmod-ipt-nat6
    opkg install iputils-tracepath6
  2. 修改 /etc/init.d/dhcp , 在设置 lan 那节添加内容,odhcpd 为内网设备设置 IPv6 地址及路由等,以下:google

    config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv6 'server'
        option ra 'server'
        option ra_management '1'
        option ra_default '1'
  3. 更改 /etc/firewall.user ,添加一行,为内网访问外网 IPv6 时提供IP假装.net

    ip6tables -t nat -A POSTROUTING -o $(uci -q get network.wan6.ifname) -j MASQUERADE
  4. 建立 /etc/hotplug.d/iface/90-ipv6 ,设置外网 IPv6 路由,修改文件属性为755, 内容以下:rest

    #!/bin/sh
    
    [ "$ACTION" = ifup ] || exit 0
    
    [ "$INTERFACE" = wan6 ] && {              
      route -A inet6 add ::/0 gw $(tracepath6 -n tv.byr.cn | grep '^ 1: ' | awk 'NR==1 {print $2}') dev $(uci -q get network.wan6.ifname)
    }

    经过 tracepath6 -n tv.byr.cn 获取外网 IPv6 网关,可选择其它较快且能连通的 IPv6 服务器,注意不要用 ipv6.google.com 。code

重启路由器或者重启网络和防火墙(/etc/init.d/network restart; /etc/init.d/firewall restart),而后能够测试内网设备访问IPv6。server

 

补充:有时我这里多是外网得到 IPv6 地址太慢,致使 IPv6 路由添加失败。因而我建立了一个检测并添加 IPv6 路由的脚本 /etc/config/route6blog

#!/bin/sh

GATEWAY6=$(tracepath6 -n tv.byr.cn | grep '^ 1: ' | awk 'NR==1 {print $2}')                       
if [ -z "$(route -A inet6 | grep '::/0' | grep ${GATEWAY6})" ]; then                                                   
  route -A inet6 add ::/0 gw ${GATEWAY6} dev $(uci -q get network.wan6.ifname)
fi

而后在 /etc/crontab/root 中添加一行,cron每分钟检测一次 IPv6 路由:crontab

* * * * * /bin/sh /etc/config/route6

 

20160118 补充:tracepath6 在不一样的 IPv6 环境中获得的结果略有不一样,因此 grep '^ 1: ' 多是错误的,能够根据 tracepath6 -n tv.byr.cn 的实际结果,例如换成 grep '^ 1 ', 总之要搜索到正确的网关。

 

20160506补充:根据aixlx的建议,若是busybox版本较高(可能要>1.24),traceroute支持 IPv6,可做以下修改:

第1步省略安装 iputils-tracepath6

第4步改成:编辑 /etc/rc.local,设置外网 IPv6 路由, 内容以下:

sleep 15
route -A inet6 add ::/0 gw $(traceroute -m 1 -n tv.byr.cn | grep '^ 1 ' | awk '{print $2}') dev $(uci -q get network.wan6.ifname)
exit 0

经过 traceroute -m 1 -n tv.byr.cn 获取外网 IPv6 网关。

相关文章
相关标签/搜索