解决RouterOS v7使用SLAAC进行ipv6自动配置时地址失效的问题

一直在使用Mikrotik的路由器,用了RB750Gr2, RB750Gr3和RB3011,自从电信开始下发ipv6地址之后,在RouterOS中用SLAAC方式,让内网终端在路由器获取电信ipv6 prefix的基础上,通过无状态地址自动配置生成自己的ipv6地址。

RouterOS版本为v6时正常,升级到v7后,发现windows, android和linux都出现问题,具体表现就是有时候各类终端能正常获取ipv6地址,有些时候又不能,只有本地fe80地址,从路由器ipv6前缀自动配置生成的ipv6地址会消失,导致ipv6网络失效

至今的v7版本也还有这个问题,只好多次回滚降级到v6。直到最近用了RB5009,这个硬件不支持v6,这个问题又开始困扰。

一直以为是防火墙策略、ipv6参数等问题导致,断断续续摸索了1个多月都没能解决。

最后在https://www.cisco.com/c/en/us/support/docs/ip/ip-version-6-ipv6/213272-troubleshoot-ipv6-dynamic-address-assign.html学习了SLAAC的基本过程,用Wireshark抓包发现(过滤:icmpv6.type == 133 or icmpv6.type == 134 or dhcpv6),正常情况下终端通过icmpv6 type133的Router Solicitation(RS)报文宣告自己,然后路由器响应icmpv6 type134的Router Advertisement(RA)报文宣告ipv6 prefix。出现问题的时候,终端发出了RS报文,但是路由器没有响应RA报文,导致不正常。

红框为正常情况,发出RS后响应RA;出问题就是只有RS,没有RA:
点击看大图

RS报文详情:
点击看大图

RA报文详情:
点击看大图


最后通过一些关键字在Mikrotik论坛找到答案https://forum.mikrotik.com/viewtopic.php?p=797048,原因是v7的IGMP snooping 和IPv6存在冲突,在开启IGMP snooping时ipv6的组播包可能被丢弃。

在RouterOS v7的Bridge中,将ipv6 nd对应接口所属的bridge的IGMP Snooping关闭,恢复都正常!!!


---------2022-02-25补充---------
1、论坛友人反馈,可以在开启IGMP Snooping时再开启Multicast Querier,或者在Bridge对应的Port中关闭L2 hardware offloading。

2、又根据官方介绍Multicast Querier只能处理不带vlan tag的报文。如果开启vlan,需要安装固件的扩展包multicast package。但是ROSv7没有这个扩展包,理论上已经集成到主固件里面了,那就还是有问题。

我是开启了vlan的,所以暂时没折腾,以上供参考。


使用HE Tunnel通过ipv6无法进行https访问

在家里的Mikrotik路由器上使用HE的6to4 Tunnel服务实现了ipv6的接入,但是使用中发现一些网站http可以访问,但是https就无法访问,直接网页就打不开,竟然还包括我自己的网站。。。今天有时间在客户端和服务端同时抓了包,发现客户端的Client Hello正常收发(下图绿色),但是服务端的Server Hello正常发出了但客户端竟然没有收到(下图红色)。。。

第一反应想到的是伟大的长城,但是细想这个是ipv6,应该不受这个限制。HE应该也不会过滤这些消息。突然想到的MTU,搜索了一下,竟然有相同问题(https://forums.he.net/index.php?topic=3545.0),原因就是MTU设置导致的。

找到原因就简单了,打开https://tunnelbroker.net/,在对应的Tunnel管理界面的“Example Configurations“界面看到Mikrotik给出的配置MTU是1280,我看了下我的路由器也确实是1280。又到Tunnel管理界面的“Advanced“界面看了下,原来默认是1480,需要自己改成1280,并且Update!

 

 

 

之后再到自己的路由器上断开重新连接,问题解决~~!