用 VPS 给 Tailscale 网络加一个稳定中继节点

Tailscale 直连不稳定?本文介绍如何用 VPS 自建 DERP 中继节点,降低延迟并提升连接稳定性。

用 VPS 给 Tailscale 网络加一个稳定中继节点

Tailscale 在某些网络环境下直连不稳定,默认走官方 DERP 服务器延迟又高。如果你有一台公网 VPS 已经在 tailnet 里,可以把它配置成 Peer Relay 节点,让其他设备借道它中转——延迟比 DERP 低得多,吞吐量接近直连。

本文记录实际操作过程,包括遇到的几个坑。

背景:Tailscale 的两种中继机制

DERP(Designated Encrypted Relay for Packets)是 Tailscale 的兜底中继,走 HTTPS/WebSocket,全球分布,但延迟受制于地理位置和官方服务器负载。

Peer Relay 是 v1.86 引入的新机制,用 tailnet 内的普通节点做中继,走原生 WireGuard UDP,延迟更低,吞吐量更高。连接优先级是:

也就是说,配好 Peer Relay 之后,Tailscale 会在直连失败时优先走它,而不是绕到 DERP。

前提条件

  • VPS 已加入 tailnet(tailscale up 过)
  • Tailscale 版本 >= 1.86(tailscale version 确认)
  • 云厂商安全组能放行 UDP 端口

本文使用的 VPS 是阿里云,在 NAT 后面(eth0 是内网 IP,公网 IP 通过安全组映射)。

第一步:允许当前用户免 sudo 操作 tailscale

tailscale set 默认需要 root,先设置一次免 sudo:

后续所有 tailscale set 命令都不需要 sudo 了。

第二步:开启 Peer Relay 并广播静态端点

--relay-server-port 指定监听的 UDP 端口,--relay-server-static-endpoints 告诉其他节点去哪里连接这台中继。

:如果后续执行了 tailscale up(比如打标签),这两项配置会被重置,需要重新执行上面两条命令。

验证配置是否生效:

输出应包含:

验证 tailscaled 是否在监听:

第三步:开放安全组端口

在云厂商控制台,给 VPS 的安全组添加入站规则:

协议 端口 来源
UDP 40000 0.0.0.0/0

VPS 本地防火墙(iptables/ufw)通常不需要额外配置,tailscaled 会自己处理。

从本机验证端口是否可达:

第四步:配置 ACL 授权

Peer Relay 需要在 tailnet 的访问控制策略里明确授权。进入 Tailscale 管理后台 → Access Controls,在 JSON 编辑器里做两处修改:

1. 添加 tagOwners(取消注释并填入):

2. 在 grants 里新增一条

保存即生效。

第五步:给 VPS 打标签

tailscale set 没有 --advertise-tags 参数,必须用 tailscale up

打完标签后,节点归属会从用户账号变为 tag,在 tailscale status 里显示为 <your-vps>.xxx.ts.net 而非 user@,这是正常现象。

注意tailscale up 会重置 relay 配置(见第二步的坑),打完标签后需要重新执行:

验证效果

在另一台设备上 ping VPS 节点:

正常输出:

可以看到连接路径的协商过程:第一跳先通过 DERP,接着切换到 Peer Relay(延迟从 1.89s 降到 269ms),最终升级为直连。

总结

整个配置归纳为几个关键点:

  1. tailscale set --operator=$USER 免 sudo
  2. 设置 relay port 和 static endpoints
  3. 安全组放行 UDP 端口
  4. ACL 里添加 tagOwners 和 relay grants
  5. tailscale up --advertise-tags=tag:relay-server 打标签
  6. 打标签后重新设置 relay 配置(因为 tailscale up 会重置)

配置完成后 Tailscale 会自动在合适时机走 Peer Relay,不需要任何客户端改动。