现在IPv6已经成为运营商的标配,默认光猫拨号就是IPv4、IPv6双栈接入,且每个用户都能有一个IPv6的公网地址。使用IPv6的优势有不少,能与互联网基础设施发展的大趋势接轨(目前IPv4地址资源已基本耗竭),还能访问不少仅有IPv6才能访问的资源(例如BT下载时,能连接IPv6的节点)。OpenWRT自然也能充分发挥IPv6的优势。
根据博主LoriLand的科普,IPv6最优的接入方式是PD(Prefix Delegation),这种方式允许用户划分多级子网。但是,我用的是中国电信光宽带,目前的套餐并没有提供PD接入,于是我只能选择IPv6中继方式,由光猫给子网设备分配IPv6地址。本文就介绍如何开启OpenWRT的IPv6中继功能,使与路由器连接的设备能获取来自光猫的地址。
然而,网络上的教程与我的OpenWRT界面大相径庭,乍看之下像是不支持一些功能特性。幸运的是,可以通过修改配置文件的方式来进行。
通常教程的一般步骤
我参考了一些教程,可以全程通过LuCI界面来配置,一般是这样:
- 打开“接口”–>“WAN6”,然后找到“DHCP服务器”。有些版本是在界面上方的标签里,“防火墙设置”右侧;另一些版本是在界面底部有单独一栏。
- 再点击“IPv6”标签,把“路由通告服务”、“DHCPv6服务”和“NDP代理”全部改成“中继模式”。
- 再打开“LAN”接口的设置,然后同样找到“DHCP服务器”(位于界面下方),点击“IPv6”标签,同样把上述3个选项改为“中继模式”。
然而,问题来了:我手上3台OpenWRT路由器,“WAN6”接口设置里根本就没有“DHCP设置”! 就像这样:
截至目前,我还尚不清楚原因,可能与OpenWRT的版本或编译过程有关。在编译时,我可能漏了一些选项,以致LuCI界面没有为WAN6接口显示DHCP设置项。
另一种方法:修改配置文件
有些设置项在LuCI没有显示,并不代表它不支持,只是可能被屏蔽了。此时,修改配置文件就是首选方案。修改文件不仅仅可以用SSH登录来修改(使用OpenSSH),也可以借助WinSCP等工具。
第一步,通过SSH登录路由器(假设路由器地址为192.168.20.1):
ssh root@192.168.20.1
第二步,用VIM编辑器打开配置文件/etc/config/dhcp
:
vim /etc/config/dhcp
第三步,找到wan
部分(config 'wan'
)并修改。在我的设备上,原本仅有interface和ignore两个选项(保持它们不动),那么就在原来基础上添加ra、dhcpv6、ndp和master四个选项。如下面的例子所示:
config dhcp 'wan'
option interface 'wan'
option ignore '1'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
option master '1'
各个选项的含义如下:
ra
:路由通告服务,改为relay即“中继模式”。dhcpv6
:DHCPv6服务,同样改为relay。ndp
:NDP代理,同样改为relay。master
:具体含义还要看看文档。根据late哥哥的博客,必须设置为1
才能保证IPv6的中继起作用。
第四步,找到lan
部分(config 'lan'
)并修改。通常这一部分默认已经有了多个选项,保持其他选项不动,只需要修改ra
、dhcpv6
、ndp
和master
四个选项(如果没有就自己补)。修改方式同上。
如下面的例子所示:
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'relay'
option ra_slaac '1'
list ra_flags 'managed-config'
list ra_flags 'other-config'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
当然,LuCI图形界面也有上述设置,所以可以在完成wan
部分的设置后,到“接口”–>“LAN”中设置。
完成设置后,保存文件。
第五步,使设置生效。运行以下命令提交设置:
uci commit dhcp
也可以在LuCI的任意一个设置页面中,点击底部的“保存/应用”按钮生效。
禁用“禁止解析 IPv6 DNS 记录”功能
完成IPv6中继的设置后,还需要留意一个很坑人的功能:“禁止解析IPv6 DNS记录”。它在旧版本(19.07或更早)默认启用,也许是因为在当时,解析IPv6 DNS会造成一些站点无法访问。
但是如今IPv6的DNS服务器已经足够成熟,就不必打开这个功能了,否则路由器将无法解析任何IPv6域名。
依次进入“网络”–>“DHCP/DNS”–>“高级设置”,取消勾选“禁止解析IPv6 DNS记录”,然后保存并应用设置即可。
清空 IPv6 ULA前缀
ULA(Unique local address,唯一本地地址)是用于本地网络的IPv6地址。在以fc、fd等地址开头时,属于内网地址,相当于IPv4的192.168,无法通过公网访问。
OpenWRT默认的ULA地址前缀就是以fd开头的内网地址,因此建议将其清空。点击“网络”–>“接口”,找到最下方的“全局网络选项”,将“IPv6 ULA前缀”文本框清空,然后保存并应用设置。
副作用
需要注意的是,启用IPv6中继也有副作用。
如果在OpenWRT运行全局代理、透明代理的应用,可能会导致连接路由器的设备无法访问代理网络。对于需要代理的站点,也只能访问它们的IPv6服务,不能访问IPv4服务。原因可能是这些应用默认会访问IPv6站点,但OpenWRT使用的DNS却无法解析。
这些都需要你做取舍。如果既需要透明代理又需要IPv6,可以考虑多配一台路由器,根据需要连接不同的热点。
拓展阅读
除了中继方式,你还可以使用NAT6来共享IPv6网络访问。
我在2018年写了一篇教程《在OpenWrt路由器上使用IPv6(采用NAT6方式)》,推荐你阅读。实测在锐捷校园网认证(有线网络)下,可以完美将校园网IPv6共享给局域网内的所有设备。