二级路由器时而无法获取IPV6的问题排查
本人网络环境:
设备:联通光猫 + TP-LINK WDR5620路由器
光猫设置:联通光猫自带路由器功能,由光猫负责拨号,光猫获得了/60的IPV6前缀。
TP-LINK路由器设置:TP-LINK的路由器关闭了DHCP,光猫LAN连接TP-LINK的LAN,这样TP-LINK就变成了一个带无线功能的交换机。
问题现象
连接TP-LINK有时可以获得IPV6,有时无法获得,有时获得了用着用着就没了。连接光猫则一直有IPV6
重要提示
下文除非明确提到TP-LINK,否则“路由器”指的是光猫的路由器,因为TP-LINK已经变成了一个“交换机”。
解决思路
分别连接光猫和TP-LINK的WIFI,用wireshark抓包看包的类型。我这里是SLAAC模式,也就是路由器发送RA ( Router Advertisement )报文,该报文包含了公网的ipv6前缀,只要收到这个报文,就可以获取IPV6地址。
而RA报文有两种发送机制:
- 路由器定时发送
- 路由器收到RS(Router Solicitation)报文后马上发送
经过抓包我发现,连接TP-LINK路由器时,我的电脑确实也发送了RS,但是迟迟没有收到光猫发来的RA报文,而连接光猫时,我的电脑发送了RS后马上就收到了路由器的RA,这说明问题就出现在TP-LINK的交换机模式上,他无法很好地转发IPV6组播地址包,导致:
- 本机发给光猫的RS报文(有时)没有抵达光猫
- 或者,光猫回应的RA报文(有时)没有抵达我的电脑
了解到这里,我灵机一动,既然连接光猫会触发一次RA通告,那么当我用手机连接了TP-LINK,没有获得RA报文,然后用电脑连接一下光猫,触发一次RA报文通告,是不是可以让手机也收到RA报文,从而获得IPV6?经过测试,确实可以。
解决方案
这个方案实在谈不上优雅,但是也算是一个方案吧。假如你电脑连接了TP-LINK,但是没有IPV6,那么你拿手机连一下光猫的WIFI,触发一次RA通告,电脑就也有IPV6了。
更新
上述方法只是偶然解决了问题,后来又不行了,经过@焦太羊 的猜想,大胆怀疑:
- TP-LINK的交换机不认识IPv6的组播mac,并且他发现这个mac只收数据,不发数据,可能内部有风控策略给你直接拦下了RA/RS数据包
- 光猫本身固件bug,有概率无法触发RA通告。因为:经过抓包发现,即使直接连接光猫的WiFi,在本机发出了RS之后,过了4分钟才收到了RA通告,并且这个光猫不会定期发送RA,只会被动发送RA。
最新解决方案:固件问题,无解。
参考资料:
ICMPv6每个Type的作用:https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml
RA和RS报文所在的RFC:https://datatracker.ietf.org/doc/html/rfc2461
ICMPv6的RFC(很不全,不如第一个链接):https://datatracker.ietf.org/doc/html/rfc4443#page-13
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步