文章前置说明:本文之前存在错误,目前已将错误内容删除并重新编辑
问题背景
在2021年,我曾经发过一篇关于二级OpenWRT分发IPV6的文章OpenWRT配置IPV6中继,但是这篇文章存在一个问题,即设置中继模式后,二级路由似乎无法下发自己的ULA前缀和IPv6 DNS,所以需要原生的IPv6-PD下发。
使用OpenWRT的默认配置,当主路由重新拨号获取到新的IPV6-PD时(如/60),二级路由虽获取到IPV6-PD(如/62),但是LAN口并不会下发新的IPV6-PD地址,而是仅下发内网的ULA前缀。二级路由下的设备可能会出现以下问题:
- 仅获取到内网IPV6地址,无法正常访问IPV6网站
- 获取到的公网IPV6地址已过期,导致访问支持IPV6的网站时需要等待IPV6连接超时才会Fallback到IPV4上,影响上网
排查过程
先说结论,目前的OpenWRT对IPV6的支持已经非常完善了,无需任何配置,默认配置即可完美支持IPV6(当然如果你的上级路由没有PD可以下发或需要NAT6的时候仍然需要一些配置,但是并不在本文的讨论范围内,本文讨论的是运营商正确下发了/60的PD,但是二级路由无法正确更新PD的问题)
至于我之前为什么遇到这个诡异的问题,我在排查了非常多的问题以后,突然想到我光猫下还连了另外一个路由在PoPPE拨号,经过对比,发现另外一个路由的IPv6没有问题。故我确认是我配置或内网存在问题,而并非OpenWRT的问题(下图为我的网络拓扑图,蓝色是正常的,紫色的是不正常的)
经过各种排查,甚至直接把正常的那边的配置直接导过来,都仍然无效。我开始将注意力转移到是不是接了错误的设备。最终把路由-2下的小米路由器拔掉以后,发现IPv6正常下发,所有功能正常。遂开始排查小米路由的问题,发现只要开启小米路由器的IPv6功能,不管是NAT6模式、Passthrough模式还是Native模式,均会导致二级路由-2的IPv6和IPv6-PD获取不正常。
经过多次测试,发现以下情况下100%触发问题:1.一级路由同时配置ULA前缀以及支持公网IPv6-PD下发(既同时下发两个IPv6-PD) 2.小米路由器开启IPv6支持,解决办法是把小米路由器的IPv6功能关闭。
对之前发布教程的勘误
我在之前的教程中直接将租期修改至5分钟,我翻阅了各种关于IPv6租期的文章,发现当租期到期时,可能导致IPv6中断(旧的连接被保留、新的连接无法发起)。
经过实测(长Ping某个IPv6地址),发现在IPv6租期到期后,Ping出现丢包,直到新的IPv6下发
后记
还是强调一遍,目前OpenWRT(主线23.05.2,并未测试各种Fork改版如ImmortalWrt、Lean’s LEDE)的IPv6支持已经非常完善了,默认配置对IPv6的支持已经非常不错,我测试了以下情况:
- 手动重启主路由的WAN接口模拟被运营商强制重播:二级路由的IPv6-PD自动更新为主路由获取到的新IPv6地址
- 直接重启主路由:二级路由的IPv6-PD不会自动更新为主路由获取到的新的IPv6地址,手动重启二级路由的WAN接口即可正确获取到新的IPv6-PD
我内网的情况比较极端,因为二级路由是软路由且跑在Proxmox虚拟机中,所以主路由重启时二级路由的WAN口不会自动DOWN。如果是通过一根网线直接从二级路由的WAN接口连接到一级路由的LAN接口上,我相信上面情况2中,IPv6-PD也会被自动更新
以上都是是我自己摸索出来的,可能非常不专业,文章写的也乱七八糟的,如果文章中存在错误或有更好的解决方案欢迎各位大佬通过邮箱联系我指出!先感谢各位大佬的指导啦~