OpenWRT/LEDE 开启免 NAT 全局 IPv6

原文:https://i-meto.com/lede-ipv6/
  • 2017.10.19 更新 NAT6 方式

之前发过一篇《OpenWrt 内网转发 IPv6》的文章,转眼间一年过去了,OpenWrt 也产生了一个新的分支 LEDE,有同学用之前的方案失效来私信我,这里也公布一个新的方式。

relay6

旧的方案是采用 NAT6 来实现转发,但其实 LEDE 内置了 Relay(中继)协议,无需安装任何插件,可以参考 https://lede-project.org/docs/user-guide/basic-ipv6-configuration 做如下操作。

  1. 进入路由器终端:$ ssh [email protected]
  2. 编辑 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'
    
  3. 编辑 network 文件:$ vi /etc/config/network,将地址第一个字母 f修改为 d,不清楚这步的同学可以参考旧教程在 luci 界面下修改。
    config globals 'globals'
        option ula_prefix 'dd53:abcd:abcd::/48'
    
  4. 重启即可
  5. 在客户机上ping路由器的v6地址,ping通后可以使用
ping6 router-v6ip

NAT6

经过一段时间的测试,发现 relay 方式并不能兼容部分型号的路由,对于这部分的用户可以采用 NAT6 方式,具体方案如下。

  1. 进入软件(soft)配置界面安装 ip6tables 和 kmod-ipt-nat6 模块
  2. 打开网络(Network)菜单下的接口(Interfaces),把最下面的 IPv6 ULA-Prefix 改为 2fff::/64
  3. 点击 LAN 接口的 edit 按钮进入设置,在 IPv6 Settings 选项卡中勾上 Always announce default router.
  4. 进入启动项管理 ,把以下命令添加入启动配置(在 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

参考资料