最近做物联网中台、压测平台或大模型实验时,经常会遇到一个现实问题:本地电脑性能很强,但云服务器同等配置太贵。比如本地有一台高性能台式机,装上 Ubuntu 后完全可以承担编译、压测、后台服务、数据库、监控等工作。真正麻烦的是:人不在同一个局域网时,怎么稳定、安全地访问这台电脑。

这篇教程使用 Tailscale 把本地电脑变成一台“私有云服务器”。如果网络环境允许,Tailscale 会优先 UDP 打洞直连;如果直连失败,可以先走官方 DERP 中转;如果官方中转延迟太高,再用一台国内轻量云服务器做 Tailscale Peer Relay 中转。

本文所有 IP、主机名、用户名都是示例信息。请把它们替换成你自己的环境信息。

一、适用场景

适合:

  1. 本地电脑性能强,想当远程开发机、压测机、构建机或后台服务器使用。
  2. 家庭宽带、宿舍网、公司网没有公网 IPv4,或者路由器不方便做端口映射。
  3. 只需要自己或团队成员访问,不需要把服务直接暴露给公网。
  4. 希望 SSH、HTTP 后台、数据库、监控页面都通过私有网络访问。

不适合:

  1. 你要把网站开放给所有互联网用户访问。这种情况更适合公网云服务器、反向代理、Cloudflare Tunnel、Tailscale Funnel 等方案。
  2. 你不能在访问端安装 Tailscale 客户端。

二、整体架构

本教程准备三类机器:

角色 示例主机名 示例地址 作用
本地高性能电脑 home-server 100.64.10.10 真正运行服务的机器,比如 Ubuntu 台式机
访问端电脑 work-laptop 100.64.10.20 外出时使用的 Windows 笔记本
国内云服务器(非必须) relay-vps 公网 203.0.113.10,Tailscale 100.64.10.30 只负责中转,不承载业务

连接优先级可以理解成:

  1. UDP 打洞直连:速度最快,访问端和本地服务器直接通信。
  2. 自建 Peer Relay 中转:直连失败时,优先走你自己的国内云服务器中转。
  3. 官方 DERP 中转:前两者都不成功时,走 Tailscale 官方中转,国内访问可能延迟较高。

最终访问方式类似:

# 通过 Tailscale 主机名 SSH 登录本地服务器
ssh example-user@home-server

# 通过 Tailscale IP SSH 登录本地服务器
ssh example-user@100.64.10.10

# 访问本地服务器上监听 8080 端口的 Web 服务
curl http://home-server:8080

三、先简单理解 Tailscale

Tailscale 是一个基于 WireGuard 的组网工具。它会给每台登录同一个账号或组织的设备分配一个 100.x.x.x 段的私有地址,并把这些设备组成一个叫 tailnet 的私有网络。

你可以把它理解成:

  1. 不需要公网 IP,也不需要手动配置复杂 VPN。
  2. 每台设备都像在同一个内网里,可以用 Tailscale IP 或 MagicDNS 主机名互相访问。
  3. 数据端到端加密,中转节点只负责转发加密后的流量。
  4. 网络好时直连,网络差时自动中转。

四、准备工作

开始前准备:

  1. 一个 Tailscale 账号。
  2. 一台本地 Ubuntu 服务器,例如 home-server
  3. 一台访问端 Windows 或 macOS 电脑,例如 work-laptop
  4. 可选:一台国内云服务器,例如 relay-vps。如果直连效果已经很好,可以不配置这一步。
  5. 如果要使用 Peer Relay,建议所有参与设备的 Tailscale 版本为 1.86 或更高。

先在所有机器上检查 Tailscale 版本:

# 查看当前机器的 Tailscale 客户端版本
tailscale version

五、在 Windows 访问端安装 Tailscale

Windows 可以直接下载安装包,也可以使用 winget 安装。

# 使用 winget 安装 Tailscale Windows 客户端
winget install --id Tailscale.Tailscale -e

# 启动 Tailscale 登录流程,把当前 Windows 电脑加入 tailnet
tailscale up

# 查看当前 Windows 电脑是否已经加入 tailnet,以及能看到哪些设备
tailscale status

# 查看当前 Windows 电脑分配到的 Tailscale IPv4 地址
tailscale ip -4

如果 PowerShell 找不到 tailscale 命令,可以使用默认安装路径执行:

# 使用 Tailscale CLI 的默认安装路径查看当前连接状态
& "C:\Program Files\Tailscale\tailscale.exe" status

登录完成后,在 Tailscale 管理后台可以把这台电脑的设备名改成更容易识别的名字,例如 work-laptop

六、在本地 Ubuntu 服务器安装 Tailscale

以下命令在本地高性能电脑,也就是 home-server 上执行。

# 更新 Ubuntu 软件源,避免安装依赖时遇到旧索引
sudo apt update

# 安装 curl,确保可以下载 Tailscale 官方安装脚本
sudo apt install -y curl

# 使用 Tailscale 官方安装脚本安装客户端
curl -fsSL https://tailscale.com/install.sh | sh

# 设置 tailscaled 服务开机自启,并立即启动服务
sudo systemctl enable --now tailscaled

# 登录 Tailscale,把这台 Ubuntu 服务器加入 tailnet
sudo tailscale up

# 查看 tailscaled 服务是否正常运行
systemctl status tailscaled

# 查看这台 Ubuntu 服务器分配到的 Tailscale IPv4 地址
tailscale ip -4

# 查看当前 tailnet 中能看到的其他设备
tailscale status

建议在 Tailscale 管理后台把这台机器重命名为 home-server,后面就可以直接用主机名访问它。

注意这里需要配置主机名,后续教程才能用主机名去访问,否则你应该用IP地址去访问。

七、在 CentOS / RHEL 服务器安装 Tailscale

如果你的本地服务器或云服务器是 CentOS / RHEL,可以使用同一个官方安装脚本。

# 安装 curl,确保可以下载 Tailscale 官方安装脚本
sudo yum install -y curl

# 使用 Tailscale 官方安装脚本安装客户端
curl -fsSL https://tailscale.com/install.sh | sh

# 设置 tailscaled 服务开机自启,并立即启动服务
sudo systemctl enable --now tailscaled

# 登录 Tailscale,把当前 CentOS / RHEL 机器加入 tailnet
sudo tailscale up

# 查看 tailscaled 服务是否正常运行
systemctl status tailscaled

# 查看当前机器分配到的 Tailscale IPv4 地址
tailscale ip -4

八、基础访问验证

tailscale1

到这一步,如果一切顺利,两边网络都没有限制时,步骤已经完成,只需要验证一下是否通了。

work-laptop 上测试是否能访问 home-server

# 测试 work-laptop 到 home-server 的 Tailscale 网络连通性
tailscale ping home-server

# 查看 work-laptop 当前能看到的所有 Tailscale 设备
tailscale status

# 使用 SSH 登录 home-server,example-user 替换成你的 Ubuntu 用户名
ssh example-user@home-server

# 如果主机名解析不稳定,可以直接使用 Tailscale IP 登录
ssh example-user@100.64.10.10

如果本地服务器上运行了一个 Web 服务,比如监听 8080 端口,可以继续测试:

# 在 home-server 上查看 8080 端口是否有服务监听
sudo ss -lntp | grep ':8080'

# 在 home-server 本机测试服务是否正常响应
curl http://127.0.0.1:8080

然后在 work-laptop 上访问:

# 在访问端通过 Tailscale 主机名访问 home-server 的 8080 端口
curl http://home-server:8080

# 在访问端通过 Tailscale IP 访问 home-server 的 8080 端口
curl http://100.64.10.10:8080

如果你的应用只监听 127.0.0.1,其他机器访问不到。可以把应用监听地址改成 0.0.0.0,或者更严格地绑定到 home-server 的 Tailscale IP。

九、判断当前是直连、官方中转还是自建中转

在访问端执行:

# 测试 work-laptop 到 home-server 的连接路径和延迟
tailscale ping home-server

可能看到类似结果:

pong from home-server (100.64.10.10) via 198.51.100.20:41641 in 28ms
pong from home-server (100.64.10.10) via DERP(hkg) in 210ms
pong from home-server (100.64.10.10) via peer-relay(203.0.113.10:40000:vni:2) in 42ms

含义:

  1. via 198.51.100.20:41641:通常表示 UDP 打洞直连,体验最好。
  2. via DERP(...):表示走官方 DERP 中转,国内网络可能延迟较高。
  3. via peer-relay(...):表示走你配置的自建 Peer Relay 中转。

也可以用 tailscale status 过滤连接类型:

# 在 Linux 上查看当前是否存在 peer-relay 连接
tailscale status | grep peer-relay
# 在 Windows 上查看当前是否存在 peer-relay 连接
tailscale status | findstr peer-relay

十、UDP 打洞直连

默认情况下,Tailscale 会尽量让两台设备直连。直连成功时,速度通常接近两边网络中较慢的一端。

为了提高直连概率,可以检查这些点:

  1. 本地服务器、访问端、云服务器都能正常访问互联网。
  2. 防火墙没有完全禁止 UDP 出站。
  3. 路由器没有开启特别严格的企业级安全策略。
  4. 如果你能控制路由器,可以允许 UDP 出站和回包。

在 Linux 上可以检查 Tailscale 网络环境:

# 检查当前机器的 NAT、UDP、DERP 连通性等网络诊断信息
tailscale netcheck

如果直连已经稳定,tailscale ping home-server 延迟也能接受,就可以直接使用,不一定需要云服务器中转。

十一、官方 DERP 中转

当 UDP 打洞失败时,Tailscale 会自动使用官方 DERP 中转。它的优点是几乎不用配置,缺点是国内访问时可能绕路,延迟和带宽都不稳定。

判断方式:

# 查看 work-laptop 到 home-server 是否走官方 DERP 中转
tailscale ping home-server

如果输出中出现 DERP(...),说明当前不是直连。如果只是偶尔出现 DERP,随后变成直连或 peer-relay,通常是正常的。如果一直是 DERP 且延迟很高,可以继续配置自建 Peer Relay。

十二、自建 Peer Relay 中转

Peer Relay 的作用是:当直连失败时,让 tailnet 内的一台你自己的机器作为中转节点。这个中转节点只转发加密流量,不解密业务数据。

本教程用国内云服务器 relay-vps 做 Peer Relay。云服务器配置不需要很高,关键是网络质量要好,带宽要够用。

12.1 开放云服务器端口

在云厂商控制台的安全组里,给 relay-vps 放行:

协议 端口 作用
UDP 41641 Tailscale 默认 WireGuard 通信端口,有利于节点直连和连通性探测
UDP 40000 Peer Relay 转发端口,下面会配置

如果云服务器系统内还启用了 ufw,继续执行:

# 允许 Tailscale 默认 UDP 通信端口 41641 入站
sudo ufw allow 41641/udp

# 允许 Peer Relay 使用的 UDP 40000 端口入站
sudo ufw allow 40000/udp

# 查看 ufw 防火墙规则是否已生效
sudo ufw status

如果云服务器系统内使用的是 firewalld,执行:

# 永久放行 Tailscale 默认 UDP 通信端口 41641
sudo firewall-cmd --permanent --add-port=41641/udp

# 永久放行 Peer Relay 使用的 UDP 40000 端口
sudo firewall-cmd --permanent --add-port=40000/udp

# 重新加载 firewalld 规则,让新增端口立即生效
sudo firewall-cmd --reload

# 查看 firewalld 当前已放行的端口
sudo firewall-cmd --list-ports

12.2 在云服务器安装并登录 Tailscale

以下命令在 relay-vps 上执行。

# 更新 Ubuntu 软件源,避免安装依赖时遇到旧索引
sudo apt update

# 安装 curl,确保可以下载 Tailscale 官方安装脚本
sudo apt install -y curl

# 使用 Tailscale 官方安装脚本安装客户端
curl -fsSL https://tailscale.com/install.sh | sh

# 设置 tailscaled 服务开机自启,并立即启动服务
sudo systemctl enable --now tailscaled

# 登录 Tailscale,把云服务器加入 tailnet
sudo tailscale up

# 查看 tailscaled 服务是否正常运行
systemctl status tailscaled

# 查看云服务器分配到的 Tailscale IPv4 地址
tailscale ip -4

12.3 给中转服务器打标签并配置策略

tailscale2

为了先把方案跑通,这里采用宽松配置:业务访问继续允许 **,Peer Relay 允许任意设备使用 tag:relay 这台中转服务器。这样配置最简单,适合个人环境或内网实验。

如果是多人团队、生产环境,建议后续再把 srcdstip 收紧到具体用户、设备标签和端口。

先在 Tailscale 管理后台打开:

Access controls -> JSON editor

把策略调整成类似下面这样。如果你原来已经有 grants,不要直接覆盖整份配置,而是把对应片段合并进去。

{
  "tagOwners": {
    "tag:relay": ["autogroup:admin"]
  },
  "grants": [
    {
      "src": ["*"],
      "dst": ["tag:relay"],
      "ip": ["*"],
      "app": {
        "tailscale.com/cap/relay": []
      }
    },
    {
      "src": ["*"],
      "dst": ["*"],
      "ip": ["*"]
    }
  ]
}

字段解释:

  1. tagOwners:允许管理员给云服务器打 tag:relay 标签。
  2. 第一条 grants:允许所有设备使用 tag:relay 设备作为 Peer Relay 中转。
  3. 第二条 grants:保留默认的全量互通能力,也就是允许 tailnet 内设备互相访问所有端口。
  4. 这里的 * 表示不限制来源、目标或端口。先跑通时很方便,但团队环境建议后续再收紧权限。

策略保存后,本地服务器 home-server 不需要打标签,保持普通节点即可:

# 重新连接 Tailscale,让 home-server 拉取最新策略
sudo tailscale up

# 查看当前本地服务器是否在线
tailscale status

relay-vps 上执行:

# 重新加入 tailnet,并把当前云服务器标记为 tag:relay
sudo tailscale up --advertise-tags=tag:relay

# 设置 Peer Relay 使用 UDP 40000 端口
sudo tailscale set --relay-server-port=40000

# 查看 relay-vps 的 Tailscale 状态
tailscale status

如果 relay-vps 有固定公网 IP,也可以显式发布静态端点:

# 设置 Peer Relay 端口,并声明云服务器的公网静态端点
sudo tailscale set --relay-server-port=40000 --relay-server-static-endpoints="203.0.113.10:40000"

一般国内云服务器直接有公网 IP 时,只设置 --relay-server-port=40000 就够了。静态端点更适合有负载均衡、端口转发、多公网地址等情况。

12.4 刷新三台机器的 Tailscale 状态

修改策略后,如果连接状态没有立即变化,可以刷新各设备。

在 Windows 访问端 work-laptop 上执行:

# 断开当前 Tailscale 连接,准备重新拉取策略
tailscale down

# 重新连接 Tailscale,并拉取最新策略
tailscale up

# 查看最新设备状态和连接路径
tailscale status

在本地服务器 home-server 上执行:

# 断开当前 Tailscale 连接,准备重新拉取策略
sudo tailscale down

# 重新连接 Tailscale,并拉取最新策略
sudo tailscale up

# 查看最新设备状态和连接路径
tailscale status

在云服务器 relay-vps 上执行:

# 重启 tailscaled 服务,确保服务状态干净
sudo systemctl restart tailscaled

# 重新连接 Tailscale,并保持 tag:relay 标签
sudo tailscale up --advertise-tags=tag:relay

# 重新设置 Peer Relay 的 UDP 40000 端口
sudo tailscale set --relay-server-port=40000

# 查看 relay-vps 是否在线
tailscale status

十三、验证 Peer Relay 是否生效

在访问端 work-laptop 上执行:

# 测试访问端到本地服务器的连接路径
tailscale ping home-server

如果看到下面这种输出,就说明自建中转已经生效:

pong from home-server (100.64.10.10) via peer-relay(203.0.113.10:40000:vni:2) in 42ms

relay-vps 上也可以观察是否有 peer-relay 连接:

# 在 Linux 上筛选当前状态中的 peer-relay 连接
tailscale status | grep peer-relay

如果一开始显示 DERP,过几秒后变成 peer-relay,通常也是正常的。Tailscale 会先保证可达,然后再选择更合适的路径。

十四、把本地电脑当服务器使用

14.1 SSH 远程登录

从访问端登录:

# 通过 MagicDNS 主机名登录 home-server
ssh example-user@home-server

# 通过 Tailscale IP 登录 home-server
ssh example-user@100.64.10.10

建议配置 SSH 密钥,减少密码暴露风险。

在访问端生成密钥:

# 生成 ed25519 SSH 密钥,用于从访问端登录 home-server
ssh-keygen -t ed25519 -C "work-laptop-to-home-server"

把公钥复制到服务器:

# 把访问端公钥写入 home-server 的 authorized_keys,example-user 替换成你的服务器用户名
ssh-copy-id example-user@home-server

如果 Windows 没有 ssh-copy-id,可以手动复制公钥内容,或者使用 Git Bash / WSL 执行同样命令。

14.2 运行 Web 服务

假设你的服务监听 8080 端口。

home-server 上检查监听状态:

# 查看 8080 端口是否已经被应用监听
sudo ss -lntp | grep ':8080'

# 在服务器本机请求 8080 端口,验证应用本身是否正常
curl http://127.0.0.1:8080

在访问端访问:

# 通过 Tailscale 主机名访问 home-server 的 8080 端口
curl http://home-server:8080

浏览器访问:

http://home-server:8080

14.3 传输文件

把本地文件上传到 home-server

# 把当前目录下的 app.jar 上传到 home-server 的 /opt/apps 目录
scp .\app.jar example-user@home-server:/opt/apps/

home-server 下载日志:

# 把 home-server 上的应用日志下载到当前目录
scp example-user@home-server:/var/log/example-app/app.log .

如果需要同步整个目录,Linux / macOS / WSL 下可以用 rsync

# 把本地 dist 目录同步到 home-server 的 /opt/apps/example-app 目录
rsync -avz ./dist/ example-user@home-server:/opt/apps/example-app/

十五、安全建议

  1. 不要把业务端口直接开放到公网,优先只通过 Tailscale 访问。
  2. Peer Relay 云服务器只需要开放 UDP 40000 和必要的 Tailscale 通信端口,不需要开放你的业务端口。
  3. 个人环境可以先用 * 跑通 Tailscale Access Controls;多人团队或生产环境建议再用设备标签、用户组、端口做精确授权。
  4. SSH 建议使用密钥登录,并关闭密码登录。
  5. 云服务器做好系统更新,避免中转节点本身变成风险点。

Ubuntu 更新系统:

# 更新 Ubuntu 软件源索引
sudo apt update

# 升级 Ubuntu 已安装的软件包
sudo apt upgrade

CentOS / RHEL 更新系统:

# 升级 CentOS / RHEL 已安装的软件包
sudo yum update

修改 SSH 配置前先备份:

# 备份 sshd_config,避免修改错误后无法恢复
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑 SSH 服务端配置文件
sudo nano /etc/ssh/sshd_config

# 重启 SSH 服务,让配置生效
sudo systemctl restart ssh

如果系统使用 sshd 服务名:

# 在使用 sshd 服务名的系统上重启 SSH 服务
sudo systemctl restart sshd

十六、常见问题排查

16.1 tailscale ping 一直走 DERP

可能原因:

  1. 两端网络都比较严格,UDP 打洞失败。
  2. Peer Relay 策略没有生效。
  3. 云服务器安全组没有放行 UDP 40000
  4. 云服务器系统防火墙没有放行 UDP 40000
  5. Tailscale 版本过低。

排查命令:

# 查看当前机器的 Tailscale 版本
tailscale version

# 查看 NAT、UDP、DERP 等网络诊断结果
tailscale netcheck

# 查看当前设备连接状态
tailscale status

# 测试到 home-server 的连接路径
tailscale ping home-server

16.2 能 SSH,但 Web 服务访问不了

可能原因:

  1. 应用只监听 127.0.0.1
  2. 应用端口不是 8080
  3. Linux 防火墙阻止了 Tailscale 网卡访问。
  4. 如果你后续收紧过 Tailscale Access Controls,可能没有放行该端口。

排查命令:

# 在 home-server 上查看所有 TCP 监听端口
sudo ss -lntp

# 在 home-server 上本机访问应用端口
curl http://127.0.0.1:8080

# 在 home-server 上查看 Tailscale 网卡地址
tailscale ip -4

16.3 配置了 Peer Relay,但没有看到 peer-relay

可以按顺序检查:

  1. relay-vps 是否执行过 sudo tailscale set --relay-server-port=40000
  2. 云服务器安全组和系统防火墙是否都放行 UDP 40000
  3. Access Controls 中是否有允许 dsttag:relaytailscale.com/cap/relay grant。
  4. relay-vps 是否真的打上了 tag:relay
  5. 三台机器是否都刷新过 Tailscale 状态。

相关命令:

# 在 relay-vps 上确认 Peer Relay 端口配置后查看状态
tailscale status

# 在 relay-vps 上重新设置 Peer Relay 端口
sudo tailscale set --relay-server-port=40000

# 在 home-server 上重新连接 Tailscale,拉取最新策略
sudo tailscale up

# 在 relay-vps 上重新应用 relay 标签
sudo tailscale up --advertise-tags=tag:relay

十七、关闭 Peer Relay

如果以后不想让云服务器继续做中转,可以在 relay-vps 上执行:

# 清空 Peer Relay 端口配置,关闭该设备的 Peer Relay 能力
sudo tailscale set --relay-server-port=""

然后从 Access Controls 中删除或注释掉对应的 tailscale.com/cap/relay grant。

十八、最终效果

完成后,你就可以把本地高性能电脑当成一台私有云服务器使用:

  1. 在公司、宿舍、咖啡店都可以 SSH 登录 home-server
  2. 可以访问 home-server 上运行的后台、压测平台、监控页面、数据库管理工具。
  3. 网络条件好时自动直连,速度最好。
  4. 直连失败时优先走国内 relay-vps,避免官方海外 DERP 延迟过高。
  5. 服务不直接暴露到公网,安全边界更清晰。

参考资料:

  1. Tailscale Linux 下载与安装:https://tailscale.com/download/linux
  2. Tailscale Windows 下载:https://tailscale.com/download/windows
  3. Tailscale Peer Relay 官方文档:https://tailscale.com/docs/features/peer-relay
  4. Tailscale grants 示例:https://tailscale.com/docs/reference/examples/grants

更多推荐