Tailscale 直连失败通常是因为 UDP 打洞受阻或 NAT 类型限制,优先检查本地防火墙和 UDP 连通性,必要时再考虑自定义中继。
先说结论:大部分中继问题源于网络环境阻止了点对点 UDP 通信,先排查本地网络限制,再确认 NAT 类型。
- 先定位:使用 netcheck 命令查看当前连接路径和延迟
- 先做:放行 UDP 流量并检查防火墙规则,确保底层协议端口可达
- 再验证:在管理后台确认设备间连接状态显示为 Direct
命令速用版
tailscale netcheck
tailscale status `--json`原理与端口说明
Tailscale 优先尝试设备间建立点对点连接,这需要 UDP 协议能够穿透 NAT。当网络环境严格(如对称型 NAT)或防火墙拦截 UDP 时,流量会自动切换到 DERP 中继服务器。中继虽然能保证连通,但延迟和带宽受中继节点位置及负载影响,通常不如直连。
注意端口差异:UDP 41641 端口主要用于 DERP 中继通信,而点对点直连通常使用动态高端口(ephemeral ports)。配置防火墙时需区分场景。
分步处理
1. 检查当前连接状态
在终端运行 tailscale status,查看设备间连接方式。如果显示 via relay 或类似中继标识,说明直连未成功。
2. 运行网络诊断
执行 tailscale netcheck,观察输出中的 UDP 连通性测试结果。如果 UDP 被标记为 blocked 或延迟极高,说明本地网络存在限制。
3. 调整防火墙规则(含具体命令)
确保本地防火墙和安全组放行 UDP 流量。建议暂时关闭防火墙测试(测试后请立即恢复并配置精确规则),若直连恢复,再按需配置规则。
Linux (UFW):
sudo ufw allow 41641/udp
sudo ufw allow out on tailscale0Linux (Firewalld):
sudo firewall-cmd `--permanent` `--add-port`=41641/udp
sudo firewall-cmd `--reload`Windows (PowerShell 管理员):
New-NetFirewallRule -DisplayName "Tailscale UDP" -Direction Outbound -Protocol UDP -Action Allow4. 检查 NAT 类型
如果处于多层 NAT 或运营商级 NAT 后,直连难度会增加。尝试将设备置于更开放的网络环境,或启用 IPv6(如果两端都支持),IPv6 通常更容易建立直连。
中继速度优化方案
如果直连无法恢复,优化中继速度是次要目标:
1. 确认中继节点位置
运行 tailscale netcheck,查看 Region 字段。确保连接的是物理距离最近的中继节点。Tailscale 通常会自动选择最优节点,但网络路由波动可能导致连接较远节点。
2. 自建 DERP 中继(进阶)
对于对延迟敏感的场景,可部署私有 DERP 服务器。通过配置 derp-map.json 指定自定义中继地址,避免公共中继拥堵。此方案需具备公网服务器及域名配置能力。
怎么验证是否生效
再次运行 tailscale status,确认连接标识不再包含中继信息。登录 Tailscale 管理控制台,在 Machines 列表中查看设备间的连接详情,直连成功通常会显示 Direct 字样且延迟较低。也可以通过 ping 或 iperf3 测试实际传输延迟和带宽变化。
常见坑
1. 对称型 NAT:部分企业网络或移动热点使用对称型 NAT,几乎无法打洞,只能接受中继或搭建专用中继服务器。
2. 防火墙误杀:某些安全软件会拦截未知的 UDP 流量,需将 Tailscale 进程加入白名单。
3. MTU 问题:如果直连后网络不稳定或丢包,尝试降低接口 MTU 值,例如设置为 1280 或 1300 测试。
4. IPv6 优先级调整:有时 IPv6 连通但质量差,导致协议优先选择 IPv6 路径但体验不佳。可通过修改系统配置调整优先级:
- Linux: 编辑
/etc/gai.conf,取消注释precedence ::ffff:0:0/96 100以优先 IPv4。 - Windows: 使用 PowerShell 运行
Set-NetIPv6Protocol -PrefixPolicies @()调整策略,或在网卡属性中暂时取消勾选 IPv6 协议测试。 - Tailscale 侧: 若 IPv6 导致问题,可在
tailscale up命令中结合`--accept-routes`=false减少路由干扰,或直接在操作系统层面禁用 Tailscale 网卡的 IPv6 功能。