Skip to content

Tailscale Peer Relay 最终版操作手册

这是一份按顺序执行的最终版文档。

你的目标是:

  • vm-0-2-ubuntu 作为 peer relay
  • hfmacbook 在不能和公司设备直连时,优先通过这台国内云服务器中继

你的当前设备里,和这套方案最相关的是:

  • relay 服务器:vm-0-2-ubuntu
  • 家里设备:hfmacbook
  • 公司设备:local_user-mac-miniyour_user-pc2hf-air

本文默认使用:

  • tag:tag:relay-cn
  • relay 端口:UDP 40000

第 1 步:先在 Tailscale 后台定义 tag

这一步非常重要,要先做。

打开 Tailscale 管理后台:

  • Admin console
  • Access controls

在你现有的 tailnet policy 里,找到 tagOwners

如果还没有 tagOwners,就新增:

json
"tagOwners": {
  "tag:relay-cn": ["autogroup:admin"]
}

如果已经有 tagOwners,就只往里面加这一项:

json
"tag:relay-cn": ["autogroup:admin"]

然后保存。

这一条的意思是:

  • tag:relay-cn 这个 tag 现在被正式定义了
  • 你的管理员账号可以把这个 tag 分配给设备

如果你不先做这一步,后面在 Ubuntu 上设置 tag 很容易报错。


第 2 步:在 Tailscale 后台给 relay 加权限

还是在 Access controls 里,找到 grants

如果还没有 grants,就新增:

json
"grants": [
  {
    "src": ["autogroup:member"],
    "dst": ["tag:relay-cn"],
    "app": {
      "tailscale.com/cap/relay": []
    }
  }
]

如果已经有 grants,就只往数组里追加 relay 这一段:

json
{
  "src": ["autogroup:member"],
  "dst": ["tag:relay-cn"],
  "app": {
    "tailscale.com/cap/relay": []
  }
}

然后保存。

这一条的意思是:

  • 允许 tailnet 成员在需要时使用 tag:relay-cn 设备的 relay 能力

但这里有一个非常重要的坑:

tailscale.com/cap/relay 不等于普通网络层访问授权。

如果你的 tailnet 正在使用 grants,只加 relay 这一条,后面可能出现:

  • tailscale ping 正常
  • 但成员之间 ssh 100.x.x.x:22 突然超时

所以建议同步补一条普通网络层授权:

json
{
  "src": ["autogroup:member"],
  "dst": ["autogroup:member"],
  "ip": ["*"]
}

如果你只想保守地放行 SSH,也可以改成:

json
{
  "src": ["autogroup:member"],
  "dst": ["autogroup:member"],
  "ip": ["tcp:22"]
}

到这里,后台策略部分才算真正配完。


第 3 步:登录 Ubuntu 服务器,确认 Tailscale 正常

登录 vm-0-2-ubuntu,执行:

bash
tailscale version
tailscale status
tailscale ip -4

你要确认三件事:

  1. Tailscale 已安装
  2. 当前机器在线
  3. 版本不要太老,尽量是 1.86+

如果 tailscale status 里这台机器不在线,先把基础联网问题解决,再继续下面步骤。


第 4 步:在 Ubuntu 上开启 relay 监听端口

vm-0-2-ubuntu 上执行:

bash
sudo tailscale set --relay-server-port=40000

执行后,这台机器会开始承担 peer relay 的监听职责。

然后检查是否监听成功:

bash
sudo ss -lunp | rg 40000

如果看到了 UDP 40000,说明本机监听已经起来了。


第 5 步:放行云服务器的 UDP 40000

这一步要做两层检查:

5.1 云厂商安全组

在你的云平台控制台里,给这台 Ubuntu 服务器放行:

  • 协议:UDP
  • 端口:40000
  • 来源:先用 0.0.0.0/0

先以“能通”为主,后面如果想收窄来源再优化。

5.2 Ubuntu 本机防火墙

如果你启用了 ufw,执行:

bash
sudo ufw allow 40000/udp
sudo ufw reload
sudo ufw status

如果你没开 ufw,可以跳过这一步。


第 6 步:给 Ubuntu 服务器打上 relay tag

这一步有两种做法,我建议你优先用后台网页。

做法 A:后台网页打 tag,推荐

打开:

  • Admin console
  • Machines

找到 vm-0-2-ubuntu,点右侧菜单,编辑 tags,填入:

text
tag:relay-cn

保存。

这个方式最直观,也最不容易被 CLI 身份切换搞混。

做法 B:在 Ubuntu 上用命令打 tag

如果你更想用命令行,可以执行:

bash
sudo tailscale up --advertise-tags=tag:relay-cn --force-reauth

注意这里我推荐用 tailscale up,不是单纯的 tailscale set

如果你在这里报错,最常见原因就是:

  1. 第 1 步的 tagOwners 还没先定义
  2. 你当前 tailnet 账号不是管理员
  3. 这台机器当前认证状态需要重新授权

如果网页能打上 tag,而 CLI 不行,那通常说明不是 relay 本身问题,而是 CLI 认证路径的问题。


第 7 步:确认这台 Ubuntu 已经带上 tag

打完 tag 之后,再检查一次:

  • 在 Tailscale 后台 Machines 页面看 vm-0-2-ubuntu
  • 确认它已经显示 tag:relay-cn

这一点很重要。没有这个 tag,前面的 grants 不会生效。


第 8 步:在 hfmacbook 上验证是否真的走 peer relay

先在 hfmacbook 上执行:

bash
tailscale ping hf-air
tailscale ping local_user-mac-mini
tailscale ping your_user-pc2
tailscale status

你重点看两类结果:

情况 A:显示 direct

这不是坏事。

说明现在 hfmacbook 和对端本来就能直连,所以 peer relay 不一定会介入。

情况 B:显示 peer-relay

这说明你的方案生效了,流量已经优先走你自己的 Ubuntu relay。

情况 C:还是显示 DERP 或普通 relay

这通常说明下面某一项还没完全到位:

  1. tag:relay-cn 没真正打上
  2. grants 没保存成功
  3. UDP 40000 外网没放通
  4. Ubuntu 没真正监听 40000

第 9 步:如果没有生效,按这个顺序排查

不要乱跳,按顺序看:

  1. 后台 Access controls 里是否已经有:
    • tagOwners 里的 tag:relay-cn
    • grants 里的 tailscale.com/cap/relay
    • 普通网络层放行规则,例如 ip: ["*"]ip: ["tcp:22"]
  2. 后台 Machinesvm-0-2-ubuntu 是否真的带了 tag:relay-cn
  3. Ubuntu 上 sudo ss -lunp | rg 40000 是否能看到监听
  4. 云厂商安全组是否放行 UDP 40000
  5. Ubuntu 本机防火墙是否放行 UDP 40000
  6. hfmacbook 到其它设备当前是不是其实已经 direct

很多时候不是“配坏了”,而是“本来就直连,所以 relay 没出场”。


第 10 步:你现在最应该实际执行的命令

如果你想按最短路径做,按下面顺序走:

后台先改 policy

把这两段合并进你现有 policy:

json
"tagOwners": {
  "tag:relay-cn": ["autogroup:admin"]
}
json
{
  "src": ["autogroup:member"],
  "dst": ["tag:relay-cn"],
  "app": {
    "tailscale.com/cap/relay": []
  }
}

Ubuntu 上执行

bash
tailscale version
sudo tailscale set --relay-server-port=40000
sudo ss -lunp | rg 40000
sudo ufw allow 40000/udp
sudo ufw reload

然后去后台给机器打 tag

vm-0-2-ubuntu 打:

text
tag:relay-cn

最后在 hfmacbook 上验证

bash
tailscale ping hf-air
tailscale ping local_user-mac-mini
tailscale status

一句话总结

你真正要做的只有 4 件事:

  1. 后台先定义 tag:relay-cn
  2. 后台加 relay grant
  3. Ubuntu 开 UDP 40000
  4. vm-0-2-ubuntu 打上 tag:relay-cn

做完后,再看 hfmacbook 到公司设备是否出现 peer-relay