电信把我拉回 ADSL 时代:群晖自建Tailscale中继节点,能否突破 QoS?
前几天测试的使用Tailscale 组网,武汉电信会限制 UDP 的上行流量,QoS 到 3Mbps 左右,导致进行 MAC 远程桌面非常卡顿、打字有延迟。
▲ Tailscale 组网后,直连的情况使用本地测速工具Homebox 进行测速,家里的电信宽带对 UDP 流量也有限速在 12Mbps,武汉的电信宽带限速在 3Mbps,非常拉跨。
▲ 但路由器使用 DDNS+ TCP 协议的端口转发,进行 Homebox 测速,上下行跑满了40Mbps 的带宽,证明没有限速。
那么问题来了,如果我使用家里的电信公网 IP 自建一个Tailscale的DERP节点,是 TCP 流量,然后强制走这个节点,那么是不是就不被限速了?
实验思路
拥有公网 IP 的路由器提供 DDNS+端口转发服务,群晖NAS使用docker安装derper容器,使用acme.sh脚本实现 ssl 自动部署证书。
acme.sh自动化证书
▲ acme.sh 是一个用来自动申请、续期 HTTPS 证书(Let’s Encrypt / ZeroSSL)的轻量级脚本工具。部署教程很多,不赘述了,群晖系统里没有标准 cron/crontab 命令(自动化任务),我们可以用 DSM 的“任务计划”代替 cron。
群晖安装derper容器
使用Compose的方式,新增一个项目,参考下面 yml文件:
services:
derper:
image: whoer/derper:latest
container_name: derper
restart: unless-stopped
network_mode: host
volumes:
- /volume1/docker/derper/certs:/etc/cert:ro
command:
- -a=:18443
- -http-port=-1
- -hostname=derper.xxxxx.com
- -certmode=manual
- -certdir=/etc/cert
▲ 路由器设置端口转发,把 18443 端口转发给群晖 NAS 的 18443 端口。
▲ 浏览器能访问你的域名+端口,出现 DERP 页面代表自建DERP 服务器成功,接下来去tailscale控制台设置下配置文件。
▲ 以上配置文件仅供参考,之后设置异地的路由器强制走中继即可。
强制走DERP测速
打开之前搭建的 Homebox 进行 TCP derper节点测速:
▲ 刚开始测速的时候,上行流量速度可以到 30M,一下子就降低到 20M
▲ 稳定下来,测速结果,上行还是被限制到了 3Mbps 以下。
这是为什么啊?已经是走了中继,是 TCP 流量了。
推测原因是:DERP 确实走 TCP/TLS,但它不是普通 HTTPS 业务,仍然有可识别特征,依旧被运营商 QoS 了,最开始测速上行能到满速就是证明,之后降低下来。
UDP都被限速吗?
那么问题来了,只要是 UDP 流量,运营商就会限速吗?
为了验证这一点,我把 DERP 节点搭建在一台香港的轻量云服务器上,其他条件不变进行测试。
▲ ping 值 100ms,证明走的是香港的服务器,上行下行都在 9Mbps 左右,上行突破了 3Mbps,证明没有被限速了。
Tailscale 加解密 DERP TCP 长连接 子网路由转发 NAT / 防火墙 LAN 到 NAS 转发,这些基本都吃 CPU,而且很多时候是单核瓶颈。我的老毛子路由器显示 CPU占用率 50-60%,没有跑满带宽应该是性能太弱鸡的原因。
总结
经过我的实验,发现运营商不是显示所有的 UDP 流量,而是对 P2P(点对点)直连的 UDP 流量进行限制,也就是针对宽带用户,对于连接服务器的 UDP 流量并不干预。
哎,宽带质量越来差劲了,UDP 流量上行 2、3Mbps 相当于回到了ADSL拨号时代。

对于有公网 IP 的用户来说有没有解法?有大佬提供了方法,全部流量伪装成 https,这就是另一个领域的话题了。
maofan
