公众号旧文
用 TailScale 测速和公网 IP 的结果不一样
我开了一台日本 AWS 的 EC2,那自然要测一下速度。
下面是用 Tailscale 的 IP 去做的测速:
iperf3 -c <IP> -p <PORT> -t 3 -P 1

其中很明显,4 和 5,还有 20,都是日本的机器
4 的带宽有 5000M
结果却只能测出来 493M
我还以为是商家偷偷的调成了 500M
于是拿 4 和 5 去对着测:

结果也是500M左右
4 和 5 是同一家的机器,5 的带宽是 2500M
我明明记得,之前是测出来过 2500M 的
于是改用公网 IP 再测:

果然测出来了,还是熟悉的 2500M
于是再用日本的 AWS 机器去测各服务器公网 IP 的结果:

去掉了 3,因为那是北京阿里云ECS,带宽上限就是3M
去掉了 103,因为那是纯 IPv6 的机器,没有公网 IPv4
剩下还有几个失败的,比如 15 和 102 是 NAT 机器
而 17 / 18 / 19 没有在安全组里放行端口
最后的 9,商家没有安全组,研究了一下,发现是 ufw 没放行 50001

但其实,我想说的是,亚马逊的 EC2 真的强!
20 就是之前运营商的 QoS 是单向的还是双向的?文中提到的 JP Plus
带宽上限就是 500M
意味着 EC2 能把同城各个机器的带宽都跑满
连通性显然最佳
下面回到文章标题,为什么 TailScale 测速和公网 IP 的结果不一样?
使用 Tailscale 时,客户端和服务器会优先建立点对点连接。
如果能够成功打洞,数据会直接在两台设备之间传输;如果无法建立直连,则会通过 DERP 中继服务器转发。
因此,Tailscale 实际走的是另一条网络路径,延迟、带宽和稳定性都可能与公网完全不同。
其次,Tailscale 还增加了一层加密。
所有经过 Tailscale 的流量都会使用 WireGuard 进行端到端加密。
这意味着数据在发送和接收时需要进行加密、解密处理,会占用一定的 CPU 资源。
对于高带宽场景(例如 2.5Gbps、5Gbps),CPU 性能可能成为瓶颈,因此测速结果可能低于公网直连。
另外,测速目标也会影响结果。
如果使用公网 IP 测速,测试的是服务器公网出口的性能;而使用 Tailscale 测速,测试的是整个 Tailscale 网络,包括 NAT 穿透、WireGuard 加密以及可能存在的 DERP 中继。
因此,两者衡量的对象并不完全相同。
还有一个容易被忽略的因素,就是运营商策略。
有些运营商会针对公网线路进行限速或拥塞控制,而 Tailscale 建立的连接可能恰好绕开了部分拥堵路径,因此反而可能比公网更快;也有可能因为走了 DERP 中继,导致速度明显下降。