> For the complete documentation index, see [llms.txt](https://kb.nssurge.com/surge-knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.nssurge.com/surge-knowledge-base/zh/technotes/ipv6-ra.md).

# IPv6 RA Override

在 Surge Mac v6 中，新增了 IPv6 RA Override 功能，用于接管其他设备的 IPv6 网络。该功能为 Surge 首创，因此互联网上几乎不存在该方案的技术资料，因此创建了该文档以解释功能细节，方便使用者排错。

### 核心原理

在 IPv6 网络中，RA 广播是网络的基石之一，一般情况下，路由器通过发送 RA 广播完成三件事：

1. 提供 IPv6 地址前缀，让其他设备可以生成自己的公网 IPv6 地址（GUA 地址）。
2. 宣告自己的 link-local 地址为默认路由。
3. 配置客户端的 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`

手动配置后即可保证稳定的完全接管。
