本人网络环境:
设备:联通光猫 + 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了。
参考资料:
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