本人所在学校的IPv6因为各种原因(好吧其实是因为我不懂),默认情况下只能让路由器获得正常的IPv6访问,又或者是不用路由器直接接PC,PC可以正常使用IPv6。使用了路由器,下面的设备可以获取IPv6地址,可以通过IPv6 Ping通路由器,然而不能访问外网的IPv6地址。
尝试过各种方案,如已经被OpenWRT抛弃的6relayd,还有ndppd和北邮的napt66(insmod之后路由就重启了),均失败。最后只能在路由器上架设代理,PC通过代理才勉强解决。
今天偶然得知:ip6tables可以NAT IPv6,而且是相当久之前的功能了,怎么我之前就不知道呢 (;´д`)ゞ
好了进入正题。
首先我们需要在基于OpenWRT的路由器上安装两个kernel modules: kmod-ip6tables 和 kmod-ipt-nat6,如果提示内核版本不对,刷固件换内核吧。(自己编译固件就没这样的问题)
之后,运行
ip6tables -t nat -L
如果有输出就说明NAT表可用。
然后,在开机启动脚本上添加一行
#有人说这样比较不优雅,其实也可以直接改LAN的配置 ifconfig br-lan xxxx:xxxx:xxxx:xxxx::1/64
其中,IPv6地址是路由器WAN6自动获取到的地址的前4段。
之后是在 /etc/config/network 里删除 IPv6 ULA prefix。
然后打开 /etc/config/dhcp ,config dhcp ‘lan’ 里改成类似这样:
config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option ra 'server' option dhcpv6 'server' option ra_management '1' option ndp 'relay'
最重要的应该是 option ra ‘server’ 和 option dhcpv6 ‘server’ 两行。(改成server或者hybrid)
最后配置ip6tables。在 /etc/firewall.user 中加入
ip6tables -t nat -I POSTROUTING -s xxxx:xxxx:xxxx:xxxx::/64 -j MASQUERADE #其中的IP是LAN的前4段
然后重启路由器,应该就OK了。
相关参考:
1. OpenWRT配置IPv6的NAT(一般结合isatap使用):https://blog.blahgeek.com/2014/02/22/openwrt-ipv6-nat/
楼主的ipv6在这个方案下稳定吗?
在我的学校是稳定的。