在 Tailscale 的网络架构中,端到端直连始终是首选路径。然而,当 NAT 穿透失败时,中继服务成为保障连通信的关键回退机制。Peer Relays GA 的发布标志着 Tailscale 正式提供一种介于直连与全局 DERP 中继之间的可控中继方案,其选择算法与工程实现与传统的 DERP 存在显著差异。本文将从技术原理出发,解析中继选择的决策流程,并给出生产部署的落地参数。
连接路径的优先级策略
Tailscale 客户端在建立对等连接时遵循明确的层级决策逻辑。对于任意 A 到 B 的连接请求,系统首先尝试直接点对点通信。这一阶段会并行探测多条路径:IPv4 与 IPv6 双栈、多个网络接口、NAT-PMP 与 PCP 端口映射协议。客户端会对这些候选路径进行竞速测试,选取延迟最低、吞吐量最佳的路径 [1]。
当直接穿透失败或预期不可能成功时,系统进入中继回退阶段。此时的决策核心在于:在可用的中继选项中选择最优候选。Peer Relays GA 引入的关键变更是,同一 tailnet 内的 Peer Relay 优先级高于 DERP。这意味着如果存在可达的 Peer Relay,客户端会优先使用它而非跨越公网的 DERP 服务器 [1]。
值得注意的是,Peer Relays 并不尝试修复 NAT 穿透本身,而是绕过穿透失败的场景。当双方均处于 CGNAT、对称型 NAT 或严格企业防火墙后时,每个客户端会主动向中继节点建立出站 UDP 会话。中继节点仅负责在两个已建立的 UDP 会话之间转发加密的 WireGuard 数据包,不主动发起任何出站连接 [1]。
中继节点的可用性判定
一个节点成为候选中继需要满足三个前置条件。首先,该节点必须配置 UDP 中继端口,通过 tailscale set --relay-server-port=<port> 命令指定,且该端口从其他节点可达。这可能需要端口映射或节点直接暴露在公网。其次,双方客户端均能通过 UDP 访问该中继节点。最后,ACL 策略必须显式允许该节点为指定对等方提供中继服务 [1]。
在实际部署中,Peer Relay 节点通常选取具备稳定公网 IP 的服务器或边缘设备。家庭网络场景下,运行 Tailscale 的树莓派或 mini PC 可配置为中继节点,为其他家庭设备提供回退路径。企业场景中,可选择数据中心内的低延迟服务器作为中继,以满足数据库同步等高吞吐需求 [1]。
选择算法与路径质量评估
公开文档未披露完整的评分公式,但核心决策因子可从行为描述中推断。过滤阶段首先排除不可达的中继:只有双方均能通过 UDP 到达的节点才会进入候选集。随后,ACL 策略进一步限制可用集合,确保中继使用符合组织的安全策略 [1]。
在通过过滤的候选中,系统采用与直连路径相同的质量评估机制。客户端会对多个中继选项进行探测,类似于探测多个 DERP 区域的方式。评估维度包括观测延迟、丢包率、吞吐量等指标。直接 P2P 连接具有最高优先级,只要可用必然胜出。在不可达的情况下,tailnet 本地 Peer Relay 优于 DERP,这一优先级顺序保证了中继流量的本地化 [1]。
从工程视角看,Peer Relay 与 DERP 的核心差异在于传输层协议与网络拓扑。Peer Relay 使用 UDP 作为传输层,延迟更低、吞吐量更高,适合大型文件传输或数据库同步等场景。DERP 则基于 TCP/TLS,强调的是「永远可用」而非极致性能,尤其适合仅允许 443 端口出站的严格网络环境 [1]。
生产环境配置参数
部署 Peer Relay 时,有几个关键参数需要关注。中继端口配置建议使用非标准高位端口(如 50000-60000 范围),以区别于常规 WireGuard 端口 51820,减少被误阻断的风险。节点数量方面,单区域建议部署 2-3 个中继节点以实现冗余,多区域部署时每个活跃区域至少配置一个。
ACL 策略示例如下:若希望节点 relay-host 为 client-a 和 client-b 提供中继,需在 ACL 中显式声明 "relay": ["relay-host"] 并在节点标签中设置相应权限。监控层面,建议采集 UDP 中继端口的入站连接数、转发数据包计数、端到端延迟等指标,以便评估中继服务质量。
小结
Peer Relays GA 的核心价值在于为 tailnet 提供了一种可控、高性能的中继回退方案。其选择算法遵循「直连优先、同 tailnet 中继次之、全局 DERP 兜底」的优先级策略。与 DERP 相比,Peer Relay 基于 UDP 实现更低延迟,但依赖节点间的双向可达性。生产部署时,应结合网络拓扑合理规划中继节点位置,并通过 ACL 与监控确保服务的可观测性与安全性。