网络环境
终端将 IPv4 网关指向 172.16.0.2 或 172.16.0.3 后,流量进入 Surge 转发路径。
问题现象
打开直播后,整个局域网出现周期性高延迟,包括未经过 Surge 的设备,网卡没有错误,链路带宽也未耗尽。问题表现为高延迟和丢包,而不是吞吐量不足。
问题原因
Surge 是四层代理。每个源地址、源端口、目标地址和目标端口组合不同的 UDP 流,都会作为独立连接管理。直播客户端在短时间内创建数百条 STUN 流,显著增加协议识别、规则匹配、日志和连接状态管理开销。
这些流量随后进入主路由的连接跟踪、NAT 和转发队列。第一跳延迟同步升高,说明主路由处理路径也受到压力。由于没有取得主路由内部队列和连接跟踪指标,也没有抓取 Mac 物理网卡出站流量,Surge 与主路由各自承担的开销比例尚未量化。
解决方案
保留游戏机 STUN
always-real-ip 只控制 DNS 返回真实 IP,不会绕过 [Rule]。游戏机相关条目可以继续保留,用于避免额外的 Fake-IP 转换影响 NAT 类型:
always-real-ip = *.srv.nintendo.net, *.stun.playstation.net, xbox.*.microsoft.com, *.xboxlive.com游戏机依赖 STUN 完成 NAT 类型探测、联机匹配和语音通信。将游戏机放入固定网段 172.16.5.0/24,先按来源网段放行 STUN,再拒绝其他 STUN。
# 通过游戏机IP段放行
AND,((SRC-IP,172.16.5.0/24),(PROTOCOL,STUN)),DIRECT
# 通过STUN域名放行
AND,((PROTOCOL,STUN),(DOMAIN-SUFFIX,srv.nintendo.net)),DIRECT
AND,((PROTOCOL,STUN),(DOMAIN-SUFFIX,stun.playstation.net)),DIRECT
AND,((PROTOCOL,STUN),(DOMAIN-WILDCARD,xbox.*.microsoft.com)),DIRECT
AND,((PROTOCOL,STUN),(DOMAIN-SUFFIX,xboxlive.com)),DIRECT按协议阻断 STUN
Surge 支持识别 STUN 协议,不需要依赖域名或端口:
PROTOCOL,STUN,REJECT-DROP该规则应位于 [Rule] 顶部,在保留游戏机STUN之后,在游戏、直连、代理和 FINAL 规则之前。
REJECT-DROP 会静默丢弃数据包,避免客户端收到错误后立即重试。对于已经形成请求风暴的 STUN 流量,它比返回 ICMP 错误的 REJECT 更合适。