- 2017.10.19 更新 NAT6 方式
之前发过一篇《OpenWrt 内网转发 IPv6》的文章,转眼间一年过去了,OpenWrt 也产生了一个新的分支 LEDE,有同学用之前的方案失效来私信我,这里也公布一个新的方式。
relay6
旧的方案是采用 NAT6 来实现转发,但其实 LEDE 内置了 Relay(中继)协议,无需安装任何插件,可以参考 https://lede-project.org/docs/user-guide/basic-ipv6-configuration 做如下操作。
- 进入路由器终端:
$ ssh [email protected]
- 编辑 dhcp 配置文件:
$ vi /etc/config/dhcp
,改动如下config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option ra 'relay' option ndp 'relay' option dhcpv6 'relay' option ra_management '1' config dhcp 'wan' option interface 'wan' option ignore '1' config dhcp 'wan6' option interface 'wan' option ra 'relay' option ndp 'relay' option dhcpv6 'relay' option master '1'
编辑 network 文件:$ vi /etc/config/network
,将地址第一个字母f
修改为d
,不清楚这步的同学可以参考旧教程在 luci 界面下修改。config globals 'globals' option ula_prefix 'dd53:abcd:abcd::/48'
- 重启即可
- 在客户机上ping路由器的v6地址,ping通后可以使用
ping6 router-v6ip
NAT6
经过一段时间的测试,发现 relay 方式并不能兼容部分型号的路由,对于这部分的用户可以采用 NAT6 方式,具体方案如下。
- 进入软件(soft)配置界面安装
ip6tables
和kmod-ipt-nat6
模块 - 打开网络(Network)菜单下的接口(Interfaces),把最下面的
IPv6 ULA-Prefix
改为2fff::/64
- 点击 LAN 接口的 edit 按钮进入设置,在
IPv6 Settings
选项卡中勾上Always announce default router
. - 进入启动项管理 ,把以下命令添加入启动配置(在 exit 0 前),实现开机启动,最后重启即可。
interface_public="wan6"
[ "$INTERFACE" = "$interface_public" ] || exit 0
res=`ip -6 route | grep "default from"`
gateway=`echo $res | awk '{print $5}'`
interface=`echo $res | awk '{print $7}'`
if [ "$ACTION" = ifup ]; then
ip -6 r add default via $gateway dev $interface
if !(ip6tables-save -t nat | grep -q "v6NAT"); then
ip6tables -t nat -A POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
fi
else
ip6tables -t nat -D POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
ip -6 r del default via $gateway dev $interface
fi
其中第一行的 wan6
需要根据实际修改成有显示公网 IPv6 的接口地址
方案测试通过机型,不保证 OpenWrt 可用
Model | Version |
---|---|
NETGEAR WNDR4300 | LEDE 17.01.4 |
psg1218(K2) | LEDE 17.01.3 |
Newifi mini Y1 | LEDE 17.01.3 |