竹影流浪

竹影流浪

P2P虚拟组网时遇见运营商UDP限速的解决方案

30
2026-01-25

背景

常规情况下使用Headscale/Tailscale组网, UDP打洞成功后直连速度应该会很快才对, 但是国内运营商处于各种原因(打击PCDN?)会对UDP进行限速。

解决方案

一般情况下, 使用类似udp2raw/Phantun的工具伪装一下udp流量或者使用服务器转发都可以解决, 解决方案如下:

WireGuard+udp2raw/Phantun

这种方式有个要求就是需要双方节点有固定公网ip, peer无法直连的情况下无法直接用WireGuard, 不过现在很多宽带都支持ipv6, 该方案值得尝试。

Headscale/Tailscale

虽然Tailscale底层基于WireGuard, 但是使用Tailscale时无法对底层进行拦截, 无法使用udp2raw这种工具, 因此如果使用Tailscale只能使用自建DERP的方案。 我就是使用该方案, 自建Headscale时开启DERP功能, 然后设置环境变量TS_DEBUG_ALWAYS_USE_DERP=true强制使用DERP

OpenWRT中:

vim /etc/init.d/tailscale

start_service函数中添加

procd_set_param env TS_DEBUG_ALWAYS_USE_DERP=true

类似这样:

start_service() {
    # ... 前面的代码 ...
    procd_open_instance
    procd_set_param command /usr/sbin/tailscaled
    
    # 添加下面这一行
    procd_set_param env TS_DEBUG_ALWAYS_USE_DERP=true
    
    # ... 后面可能还有其他参数,如 --port 等 ...
    procd_close_instance
}

其它任何组网底层为TCP或者支持UDP混淆的方案

目前还没有找到实现了UDP/TCP打洞, 打洞后支持udp2raw混淆流量的现成方案。

EasyTier可能是一种解决方案, 但是得先实现#1308#878