确认 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 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 套接字。
常见无法直连的原因与排查
若确认走中继且速度不理想,可按以下步骤排查直连失败原因:
- UDP 端口封锁:Tailscale 依赖 UDP 41641 端口进行打洞。检查本地防火墙、路由器或公司网络是否阻断了该端口的 UDP 流量。
- NAT 类型限制:对称型 NAT(Symmetric NAT)较难穿透。尝试重启路由器获取新公网 IP,或开启 UPnP 功能。
- 中继节点负载:公共 DERP 节点在高峰期可能拥堵。若有条件,可搭建私有 DERP 中继进行测试对比。
- 误判性能问题:传输大量小文件(如 WebDAV 同步)本身效率较低,不要仅凭文件传输速度判断网络路径,应以 ping 延迟为准。
验证建议
在确认路径后,建议使用 iperf3 或传输单个大文件进行带宽测试。直连带宽通常接近本地物理网络上限,而中继带宽受限于中继服务器配置及公网链路质量,通常会有明显差距。