OpenWRT/LEDE 开启免 NAT 全局 IPv6

作者 Known Rabbit 日期 2017-12-03
OpenWRT/LEDE 开启免 NAT 全局 IPv6

为了一个IPv6已经不知道折腾了几宿。今天终于完全搞定了,IPv6本来就不应该有什么NAT6或者radvd转发之类的奇技淫巧,但是作为基础设施,稳定是第一要素。因为软件实现的bug导致网络不稳定,真的是为了新技术得不偿失。

不过还是得说,IPv6这种东西最好还是赶紧学学。毕竟上面翻了牌子。而且摆脱 NAT 的纠缠将为以后的入侵渗透提供很多便利,更不用提以后是物联网的天下,看门狗的世界成为现实也不一定呢 😊

契机当然是国x院的通知,突破是LEDE分支odhcpd对bug的修复[1]。当然还有某些玩家的黑科技修复方法[2]。现在已经达到开机连接完全可用的状态了,也不用开机重启network或者重启odhcpd了。下面说说方法。

下载LEDE

官网地址:https://lede-project.org/toh/views/toh_fwdownload

这个链接里面有LEDE支持的所有设备。为什么是LEDE?不光光是这个分支有可用的IPv6,更因为LEDE支持一个非常好用的QoS策略脚本,sqm-scripts。亲测迅雷满速时王者荣耀延迟基本不变,关于这个组件的设置详见官方wiki

如果是首次刷机的话就用lede-xxxx-factory.bin,升级或从OpenWRT转过来就直刷 lede-xxxx-sysupgrade.bin 即可。如何刷机因人而异。

配置IPv6

大概IPv6已经是标配了吧,一般初始设置里面就会有wan6这个interface。ssh或者telnet进路由器的shell。修改 /etc/config/dhcp ,将以下三个 dhcp 分区的内容修改如下[2]

config dhcp 'wan'
option interface 'wan'
option ignore '1'
option dhcpv6 'disabled'
option ndp 'relay'
option ra 'relay'
option master '1'

config dhcp 'wan6'
option dhcpv6 'relay'
option ra 'relay'
option ndp 'relay'
option master '1'

config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'relay'
option ra 'relay'
option ndp 'relay'

其中的几个要点:

  • IPv6的几个相关设置都要从 wan6 分区复制一份到 wan 中。
  • lan 分区最好放在 wan 后面。因为代码里有一段寻找 relay 模式 master 的,这里我不太保准 瞎猜的
  • 不能像参考资料[2]中一样将 wan6 的 dhcpv6 设置为 disabled 。因为这样路由器没有v6地址也无法转发。

其中 lan 分区内的 start 和 limit 是IPv4地址池的最小地址和最大分配个数,这个可以按需更改。修改完成后执行 /etc/init.d/network restart 即可重启所有相关服务。

网络测试

在我这里,重启网络后大概半分钟获得v4地址,四五十秒获得v6地址。v4地址一般是恒定的,v6地址总在变,网络实名制任重道远啊(笑)。v6的路由我还是没太明白,不过在路由器上输入 ip neigh show proxy 返回列表里出现路由器后设备的IP,就表示转发已经成功了。这个过程需要一分钟左右的时间。前两次设置的时候,我还参考了[3]手动添加了一下路由才ping通六维。但照上面设置完后就完全OK了。

$ ping6 www.google.com
PING6(56=40+8+8 bytes) 2001:***:aa5d --> 2404:6800:4008:801::2004
16 bytes from 2404:6800:4008:801::2004, icmp_seq=0 hlim=46 time=449.066 ms
16 bytes from 2404:6800:4008:801::2004, icmp_seq=1 hlim=46 time=75.849 ms
16 bytes from 2404:6800:4008:801::2004, icmp_seq=2 hlim=46 time=74.618 ms
16 bytes from 2404:6800:4008:801::2004, icmp_seq=3 hlim=46 time=74.261 ms
16 bytes from 2404:6800:4008:801::2004, icmp_seq=4 hlim=46 time=74.437 ms
16 bytes from 2404:6800:4008:801::2004, icmp_seq=5 hlim=46 time=75.887 ms
^C
--- www.google.com ping6 statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 74.261/137.353/449.066/139.404 ms

网络非常好嘛~😆

嘿嘿嘿,再上个 he.net 发的 v6 认证。

IPv6 Certification Badge for ttimasdf


  1. NDP relay not working because NDP proxy entries are not added · Issue #92 · openwrt/odhcpd

  2. relay mode does not work · Issue #37 · openwrt/odhcpd

  3. NDP relay not working because NDP proxy entries are not added · Issue #92 · openwrt/odhcpd