起因
正好最近事情比较少,折腾了一下家里的 IPv6 网络,因为一些特殊的原因,最后是用了 NAT66 的解决方案,一开始没有任何问题,但是我的 Windows 电脑用着用着 IPv6 就会没网,也不知道是什么原因
开始排查
一开始我打开我的 Windows 网络详情页,发现我的电脑有两个 IPv6 地址(不包括本地链路地址),这令我非常疑惑,因为我是在我的 Linux 路由器上开了一个 RADVD 来无状态下发内网 IPv6 的,按道理来说应该只有一个地址
fd43 这个就是我 Linux 路由器下发的 IPv6 地址了,fd76 就是神秘的、不知道来源的 IPv6 地址
总之,在经过了换路由器、抓包、插拔各种设备后,我发现这个地址居然是我的 Apple TV 下发下来的
知道了来源,但是,为什么呢?为什么 Apple TV 会有这种行为
在漫长的资料查阅后,我发现苹果的 HomeKit/Matter 是基于 Thread 的,而这种协议本身会让 Hub 设备充当桥接路由器,自然需要下发路由,Apple TV 本身也只下发了一个 /64 路由,并且路由优先级是中,我 Linux 路由器上配置的路由优先级是高
那么为什么我的 Windows 电脑用着用着 IPv6 就会没网?我查了很多关键词,发现关于 Windows IPv6 这方面的东西在网上几乎没有资料,我只能怀疑是 Windows 并不能正确处理获得的 IPv6 地址的路由和优先级
解决方法
在谷歌搜索 Apple TV IPv6 RA
等关键词,你就能看到很多人也面临这这个问题,例如
How an AppleTV may take down your (#IPv6) network
New Apple TV 4K acting as router and giving out IPv6 (ULA) addresses
How to block Apple TV from assigning IPv6 ULA?
我看到的解决方法一般都是通过 VLAN 等方法隔离 Apple TV,或是一些企业级的路由器/交换机自带 IPv6 RA Guard 功能
通过 VLAN 隔离的话,如果想完全不影响 Apple TV 的其他功能,需要一个带三层 VLAN 功能的交换机
企业级路由器/交换机的话,我连带三层 VLAN 功能的交换机都不舍得花钱买一个,肯定也是不会考虑的
因此我决定只给需要 IPv6 的设备分配静态 IPv6,其他设备就暂时先算了(反正 IPv6 Only 的网站/服务几乎不存在)
另外,在找解决办法的时候看到个很有意思的文章
Apple TVから流れてくる変なRAをRaspberry PI + FreeBSDで何とかする話
这不就是手搓三层 VLAN 交换机吗(草)
有意思
Maple 04-22