参考文章:“ 在OpenWrt上配置原生IPv6 NAT ”服务器
个人环境和参考文章相似都为教育网,使用 Openwrt 版本同样(15.05-rc2 比较精简,不带 luci,D-Link DIR-605 中可怜的 4M flash 竟然能剩896K空间能够安装软件),对参考文章的步骤略作修改。网络
刷入 OpenWrt 15.05-rc2,使用原始配置,安装 IPv6 内核 nat 模块及路由追踪软件:测试
opkg update opkg install kmod-ipt-nat6 opkg install iputils-tracepath6
修改 /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'
更改 /etc/firewall.user ,添加一行,为内网访问外网 IPv6 时提供IP假装.net
ip6tables -t nat -A POSTROUTING -o $(uci -q get network.wan6.ifname) -j MASQUERADE
建立 /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/route6 :blog
#!/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 网关。