现在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设置”! 就像这样:

我的其中一台路由器,“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')并修改。通常这一部分默认已经有了多个选项,保持其他选项不动,只需要修改radhcpv6ndpmaster四个选项(如果没有就自己补)。修改方式同上。

如下面的例子所示:

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 DNS记录”。

清空 IPv6 ULA前缀

ULA(Unique local address,唯一本地地址)是用于本地网络的IPv6地址。在以fc、fd等地址开头时,属于内网地址,相当于IPv4的192.168,无法通过公网访问。

OpenWRT默认的ULA地址前缀就是以fd开头的内网地址,因此建议将其清空。点击“网络”–>“接口”,找到最下方的“全局网络选项”,将“IPv6 ULA前缀”文本框清空,然后保存并应用设置。

清空“IPv6 ULA前缀”。

副作用

需要注意的是,启用IPv6中继也有副作用。

如果在OpenWRT运行全局代理、透明代理的应用,可能会导致连接路由器的设备无法访问代理网络。对于需要代理的站点,也只能访问它们的IPv6服务,不能访问IPv4服务。原因可能是这些应用默认会访问IPv6站点,但OpenWRT使用的DNS却无法解析。

这些都需要你做取舍。如果既需要透明代理又需要IPv6,可以考虑多配一台路由器,根据需要连接不同的热点。

拓展阅读

除了中继方式,你还可以使用NAT6来共享IPv6网络访问。

我在2018年写了一篇教程《在OpenWrt路由器上使用IPv6(采用NAT6方式)》,推荐你阅读。实测在锐捷校园网认证(有线网络)下,可以完美将校园网IPv6共享给局域网内的所有设备。

参考资料