如何查看 Tailscale 当前连接是 P2P 直连还是中继传输

文章导读
确认 Tailscale 节点间是 P2P 直连还是通过 DERP 中继传输,直接关系到传输速度和延迟。最准确的判断方法是使用命令行工具查看连接路径特征,而非仅依赖状态列表。
📋 目录
  1. 核心判断命令与输出解析
  2. 辅助状态查询
  3. 不同操作系统注意事项
  4. 常见无法直连的原因与排查
  5. 验证建议
A A

确认 Tailscale 节点间是 P2P 直连还是通过 DERP 中继传输,直接关系到传输速度和延迟。最准确的判断方法是使用命令行工具查看连接路径特征,而非仅依赖状态列表。

先说结论:使用 tailscale ping 命令是判断连接路径的最可靠方式。若输出中包含 via derp 字样,则表示走中继;若无该字样且延迟较低,通常为直连。

  • 核心命令:运行 tailscale ping <目标主机名或 IP>
  • 关键特征:观察输出是否含有 via derp<区域号>
  • 辅助验证:若直连失败,检查 UDP 端口 41641 是否被防火墙拦截

核心判断命令与输出解析

在不同操作系统终端(Windows PowerShell/CMD、macOS Terminal、Linux Shell)中,均可使用以下命令检测路径。请确保 Tailscale 客户端已运行且登录。

tailscale ping <目标主机名>

1. 直连模式输出示例:

pong from node1 (100.64.0.1) in 2ms
pong from node1 (100.64.0.1) in 3ms

若输出中仅显示延迟(in Xms),未出现 via 关键字,且延迟数值接近局域网水平(通常<10ms),说明建立了 P2P 直连。

2. 中继模式输出示例:

pong from node2 (100.64.0.2) via derp1 (sin) in 120ms
pong from node2 (100.64.0.2) via derp1 (sin) in 118ms

若输出中包含 via derp<ID> 或区域代码(如 sin、nrt、fra 等),且延迟明显高于直连(通常>50ms),说明流量正在通过 DERP 中继服务器转发。

如何查看 Tailscale 当前连接是 P2P 直连还是中继传输

辅助状态查询

tailscale status 命令主要用于查看设备在线状态和分配的 IP 地址,它通常不直接显示连接路径类型,但可辅助确认设备可达性。

tailscale status

输出示例:

100.64.0.1  node1      user1  linux   -
100.64.0.2  node2      user1  windows -

若需进一步诊断网络环境是否支持直连,可使用 tailscale netcheck 查看 UDP 连通性及 NAT 类型。

tailscale netcheck

重点关注输出中的 UDP 是否为 true,以及 PortMapping 是否可用。若 UDP 被标记为 false 或受限,直连成功率会大幅下降。

不同操作系统注意事项

  • Windows:建议在 PowerShell 或命令提示符中运行,若提示“不是内部命令”,请检查 Tailscale 服务是否启动或尝试添加系统环境变量。
  • Linux/macOS:普通用户可能权限不足,建议在命令前加 sudo,例如 sudo tailscale ping
  • Docker 环境:若在容器内运行,需确保容器网络模式为 host 或已正确映射 Tailscale 套接字。

常见无法直连的原因与排查

若确认走中继且速度不理想,可按以下步骤排查直连失败原因:

  1. UDP 端口封锁:Tailscale 依赖 UDP 41641 端口进行打洞。检查本地防火墙、路由器或公司网络是否阻断了该端口的 UDP 流量。
  2. NAT 类型限制:对称型 NAT(Symmetric NAT)较难穿透。尝试重启路由器获取新公网 IP,或开启 UPnP 功能。
  3. 中继节点负载:公共 DERP 节点在高峰期可能拥堵。若有条件,可搭建私有 DERP 中继进行测试对比。
  4. 误判性能问题:传输大量小文件(如 WebDAV 同步)本身效率较低,不要仅凭文件传输速度判断网络路径,应以 ping 延迟为准。

验证建议

在确认路径后,建议使用 iperf3 或传输单个大文件进行带宽测试。直连带宽通常接近本地物理网络上限,而中继带宽受限于中继服务器配置及公网链路质量,通常会有明显差距。