Tailscale Peer Relay 配置指南:告别自建DERP
千呼万唤始出来 Tailscale的Peer Relay 终于正式发布了
用 Tailscale 的人大概都遇到过这种情况:两台设备明明都在线,但实际传输速度慢得离谱,延迟也高。打开 tailscale status 一看,连接类型显示 relay —— 流量绕到了 Tailscale 官方的 DERP 中继服务器上。
这在双方都处于NAT后面时尤其常见。WireGuard 的 NAT 穿透失败后,Tailscale 会回退到 DERP 中继,而公共 DERP 服务器带宽有限、延迟不可控,体验自然不好。
虽然之前有自建DERP的方案,但是那总归还需要动手搭建和配置规则,相当的麻烦,还要考虑被别人套用。
现在Tailscale 推出了 Peer Relay 功能,允许你指定 Tailnet 内的某个节点充当私有中继,绕过公共 DERP 的性能瓶颈。
什么是 Peer Relay?
Peer Relay 是 Tailscale 在 1.86 版本引入的功能,允许将 Tailnet 内的一个节点配置为中继服务器。当两台设备无法直连时,流量可以通过这个私有中继节点转发,而不是走公共 DERP。
简单来说,它和自建 DERP 的目标类似 —— 解决直连失败时的性能问题,但配置更简单、集成更原生。
Peer Relay vs DERP 对比
| 特性 | Peer Relay | 公共 DERP | 自建 DERP |
|---|---|---|---|
| 协议 | WireGuard(UDP) | HTTPS + WebSocket | HTTPS + WebSocket |
| 延迟 | 低(取决于中继节点位置) | 高(共享基础设施) | 低(自控) |
| 带宽 | 取决于中继节点带宽 | 有限(QoS 限制) | 取决于服务器 |
| 配置难度 | 低(一条命令) | 无需配置 | 中等(需部署服务) |
| 加密 | WireGuard 端到端加密 | WireGuard 端到端加密 | WireGuard 端到端加密 |
| 作用范围 | 仅限同一 Tailnet | 全球公共 | 需要额外配置 |
| 需要公网 IP | 否(但建议有) | 否 | 是 |
TIPPeer Relay 使用的是原生 WireGuard UDP 协议,而非 DERP 的 HTTPS/WebSocket 封装,这是它性能更好的主要原因之一。
连接优先级
Tailscale 在建立连接时会按以下优先级尝试:
Direct(直连) → Peer Relay(私有中继) → DERP(公共中继)- Direct:两台设备通过 NAT 穿透直接建立 WireGuard 隧道,延迟最低、速度最快
- Peer Relay:直连失败时,通过你指定的 Tailnet 内节点中继,流量不出你的网络
- DERP:前两者都失败时,回退到 Tailscale 官方 DERP 服务器
NOTEPeer Relay 不会替代 DERP。DERP 仍然用于连接协商和最终兜底。Peer Relay 是在直连失败后、回退 DERP 之前的一个优化层。
前置要求
在开始配置之前,确认以下条件:
| 要求 | 说明 |
|---|---|
| Tailscale 版本 | 客户端和中继节点均需 1.86+ |
| 操作系统 | 中继节点支持 Linux、macOS、Windows 等(不支持 iOS、Android、Apple TV) |
| 账户权限 | 需要 Owner、Admin 或 Network admin 权限来配置 ACL |
| 配额 | 免费版和付费版均可配置 2 个 Peer Relay 节点 |
WARNING用作 Peer Relay 的节点应该是网络稳定、带宽充足的设备,比如 VPS 或家中的固定服务器,不建议用笔记本或手机等移动设备。
配置步骤
Step 1:在中继节点启用 Relay
SSH 到你想要用作中继的节点,执行:
tailscale set --relay-server-port=40000这会在 UDP 端口 40000 上启动 Peer Relay 服务。端口号可以自行选择,确保防火墙允许该端口的 UDP 入站流量。
TIP如果你的中继节点在云服务商上(如 AWS、GCP),记得在安全组/防火墙规则中放行对应的 UDP 端口。
关闭 Relay 只需将端口设为空:
tailscale set --relay-server-port=""Step 2:配置 ACL Grants
启用 Relay 端口后,还需要在 Tailscale 的 ACL 策略中授权哪些节点可以使用这个中继。
打开 Tailscale Admin Console,在 ACL 文件中添加 grants 规则:
{ "grants": [ { "src": ["tag:office"], "dst": ["tag:relay"], "app": { "tailscale.com/cap/relay": [] } } ]}参数说明:
src:允许使用中继的设备(如tag:office标记的所有设备)dst:被授权作为中继的节点(如tag:relay标记的节点)tailscale.com/cap/relay:授予中继能力的 capability
IMPORTANT
src的范围应尽量收窄。避免使用通配符*,明确指定需要使用中继的设备标签或节点。
其他常见配置示例:
让某个节点同时作为自己的中继(适用于该节点也需要被中继的场景):
{ "grants": [ { "src": ["my-server"], "dst": ["my-server"], "app": { "tailscale.com/cap/relay": [] } } ]}按地区划分中继节点:
{ "grants": [ { "src": ["tag:asia-devices"], "dst": ["tag:asia-relay"], "app": { "tailscale.com/cap/relay": [] } }, { "src": ["tag:us-devices"], "dst": ["tag:us-relay"], "app": { "tailscale.com/cap/relay": [] } } ]}Step 3:验证连接
配置完成后,在客户端设备上检查连接状态:
tailscale status | grep peer-relay如果配置正确,你会看到连接类型变为 peer-relay,并显示中继节点的地址和端口:
peer-relay 100.x.x.x:40000之前显示 relay 的连接现在应该变成了 peer-relay,延迟和速度都会有明显改善。
进阶配置
静态端点
如果中继节点位于 NAT 后面(如云服务商的 Managed NAT Gateway),Tailscale 可能无法自动发现其公网地址。这时可以手动指定静态端点:
tailscale set --relay-server-port=40000 \ --relay-server-static-endpoints="203.0.113.10:40000"支持同时指定多个地址(IPv4 + IPv6):
tailscale set --relay-server-port=40000 \ --relay-server-static-endpoints="[2001:db8::1]:40000,203.0.113.10:40000"NOTE静态端点适用于有固定公网 IP 的 VPS 或使用了 NAT Gateway 的云环境。如果你的节点能被 Tailscale 自动发现,不需要配置这项。
Prometheus 监控指标
Peer Relay 节点会暴露 Prometheus 格式的监控指标,方便接入 Grafana 等监控系统:
| 指标 | 说明 |
|---|---|
forwarded_packets_total | 中继转发的总包数 |
forwarded_bytes_total | 中继转发的总字节数 |
relay_latency | 中继连接延迟 |
ACL 规则建议
- 按地理区域分组设备和中继节点(如上面的区域配置示例)
src范围尽量精确,只授权需要中继的设备- 定期检查 ACL 规则,移除不再需要的授权
防火墙配置
确保中继节点的防火墙放行了对应的 UDP 端口:
sudo ufw allow 40000/udpsudo iptables -A INPUT -p udp --dport 40000 -j ACCEPTsudo firewall-cmd --permanent --add-port=40000/udpsudo firewall-cmd --reloadWARNING只放行 UDP 端口即可,Peer Relay 不使用 TCP。同时建议限制来源 IP 为 Tailscale 的 CGNAT 地址段
100.64.0.0/10,增强安全性。
总结
Peer Relay 解决了 Tailscale 在严格 NAT 环境下的性能痛点。相比自建 DERP,它的配置更简单,且使用原生 WireGuard 协议,性能更优。
相关链接:
- Tailscale Peer Relay 官方文档:https://tailscale.com/kb/1532/peer-relay
- Tailscale ACL Grants 文档:https://tailscale.com/kb/1324/acl-grants