OpenWRT配置IPv6的NAT

本人所在学校的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/


已有2条评论 发表评论

  1. FanFan‘s fan /

    楼主的ipv6在这个方案下稳定吗?

    1. 7forz / 本文作者

      在我的学校是稳定的。

回复给FanFan‘s fan 取消回复