IPv6 RA Override
在 Surge Mac v6 中,新增了 IPv6 RA Override 功能,用于接管其他设备的 IPv6 网络。该功能为 Surge 首创,因此互联网上几乎不存在该方案的技术资料,因此创建了该文档以解释功能细节,方便使用者排错。
核心原理
在 IPv6 网络中,RA 广播是网络的基石之一,一般情况下,路由器通过发送 RA 广播完成三件事:
提供 IPv6 地址前缀,让其他设备可以生成自己的公网 IPv6 地址(GUA 地址)。
宣告自己的 link-local 地址为默认路由。
配置客户端的 IPv6 DNS。
RA 消息的设计中,存在优先级的机制,因此可以通过高优先级的 RA 消息,覆盖中和低优先级的消息。这是 Surge IPv6 RA Override 的核心工作原理,一个不太一样的地方是,RA 消息通常是进行广播,而 Surge 的 RA 是单播,只影响需要被接管的设备。
同时,Surge 的 RA 不包含地址前缀信息,所以地址分配依然依赖原路由的 RA 广播,Surge 的高优先级广播只进行路由和 DNS 覆盖。因此原路由的 RA 广播一定不可关闭,否则无法完成 IPv6 地址分配,只需要保证优先级设置不为高即可。
IPv6 RA DNS
如果原路由的 RA 配置了 IPv6 DNS,且该地址为 link-local 地址,或路由器自身的 IPv6 地址。则会因为路由优先级问题导致 DNS 包无法被 Surge 劫持,fake IP 机制无法生效。
Surge 的 RA 包会广播自己的 v6 DNS 地址 fd00:6152::2
,但是不同操作系统对高优先级 RA DNS 的处理方式不同,有些系统是覆盖原有设置,有些只是单纯追加。因此 Surge 会提示建议修改原广播的 DNS 地址为空或任意公网地址,以避免无法覆盖时的情况。
不过,即使 DNS 覆盖失败,也只是 fake IP 机制失效,仍然可以接管请求,域名类规则也可以靠 SNI 嗅探完成。
稳定性
在 v4 DHCP 模式下,由于 Surge 是完全取代了原有的 DHCP 服务,所以可以确保接管一定成功,否则客户端根本无法连接网络。
但是在 v6 RA 覆盖模式下,由于覆盖行为与原有 RA 相互独立,所以如果存在网络波动,导致 Surge的 RA 覆盖消息丢包,则可能出现客户端设备未能被覆盖的情况,此时客户端设备的 IPv6 将会是直接连接。
但是这种情况即使发生,一般也只出现于刚接入网络的时候,一旦接入后,Surge 会定期不断发送 RA 覆盖消息,且周期远高于 RA 消息的有效期,所以很少会出现失效的情况。
兼容性问题
在我们的测试中,绝大多数设备对 Surge 的 RA 覆盖表现良好,在少数情况下可能会有兼容性问题:
Sony PS5
PS5 的 IPv6 协议栈不完善,无法正确处理高优先级 IPv6 RA 消息,因此无法接管。
Windows
部分 Windows 设备,可能在一段时间后,出现接管失效的问题,事件查看器中出现警告:TCPIP - Event 4205 - Autoconfigured route limit has been reached. No further autoconfigured routes will be added until the interface is reconnected.
。
发现只有部分设备在低概率下出现该问题,我们还在分析与测试出现该问题的真正原因,由于 Windows 闭源且未提供相关文档,因此比较困难,也可能就是 Windows 的 Bug。
以上问题,都可以通过手动修改设备的 IPv6 配置解决,即不再依赖 RA,直接配置 IPv6 地址、网关和 DNS。
IPv6 地址:保证与原自动分配的地址一致即可。但是如果你的 IPv6 前缀可能会变化,则变化后需要重新配置。
网关地址:可在 Surge 总览页面查看 Surge VM 的 IPv6 地址,填入该地址。
DNS:
fd00:6152::2
手动配置后即可保证稳定的完全接管。
Last updated