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混淆流量的现成方案。