使用 Tailscale 解决本地无法 SSH 连接 VPS 教程
本文记录一次真实排障过程:VPS 在公司电脑可以用SSH正常连接,但在本地设备上通过 SSH 经常超时(压根连不上),我怀疑是运营商不同的问题。捣鼓了各种方法,换端口(22换到443),没有用。最终通过 Tailscale 给本地电脑和 VPS 建了一条稳定的私有网络通道,成功实现 SSH 连接。
适用场景
如果你遇到下面这些情况,这篇教程基本就适用:
- VPS 在线,
ping能通。 - 本地
ssh root@公网IP或ssh -p 443 root@公网IP一直超时,挂vpn也不行。 - 公司网络能连,家庭宽带、手机热点或移动网连不上。
- 你有 VPS 的
VNC或控制台权限,可以登录服务器终端。
这次问题的典型现象
本地已经能测到 443 端口,但 SSH 连接依然超时,说明问题不一定在 VPS 配置本身,也可能在公网回程链路上。
为了进一步确认,我们在 VPS 上抓包,看到本地的 SYN 到了,VPS 也返回了 SYN,ACK,但客户端迟迟没有完成后续握手。这说明 VPS 侧基本正常,问题更像是公网链路或本地网络环境导致的丢包。
为什么改用 Tailscale
Tailscale 的核心思路是:
- 给本地电脑和 VPS 拉进同一个私有网络。
- 每台设备获得一个
100.x.x.x的内网地址。 - 以后直接用这个内网地址 SSH,不再依赖那条有问题的公网路径。
优点是:
- 对现有 VPS 业务影响很小。
- 不需要先修好公网 SSH 才能继续工作。
- 安全性通常比直接暴露公网 SSH 更好。
安装前说明
这篇教程对应的环境是:
- 本地系统:Windows
- 远程系统:Ubuntu 24.04
- 远程管理方式:VNC
在开始之前,请确认:
- 你本地电脑可以正常打开网页并登录 Tailscale 账号。
- 你能通过 VNC 进入 VPS 终端。
- 不要先删掉现有 SSH 配置,先把 Tailscale 连通。
第 1 步:在 Windows 上安装 Tailscale
先在本地 Windows 安装 Tailscale 客户端https://tailscale.com/download/windows。如果安装时出现下面的提示,说明系统依赖服务 iphlpsvc 被禁用了。
这时用管理员 PowerShell 执行:
Set-Service -Name iphlpsvc -StartupType Automatic
Start-Service -Name iphlpsvc
Get-Service -Name iphlpsvc
执行成功后,应该看到 Status 为 Running。
然后重新打开 Tailscale,登录你的账号。登录成功后,Windows 端会加入你的 tailnet。
第 2 步:在 VPS 上安装 Tailscale
登录 VPS 的 VNC 终端,执行下面两条命令:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
说明:
- 第一条命令用于安装 Tailscale。
- 第二条命令用于启动 Tailscale,并开启 Tailscale SSH 支持。
执行后,终端通常会返回一个登录链接。你只需要在本地浏览器中打开这个链接并授权即可。
第 3 步:获取 VPS 的 Tailscale 内网 IP
在 VPS 上执行:
tailscale ip -4
tailscale status
如果一切正常,你会看到:
- VPS 获得了一个
100.x.x.x地址。 - Windows 和 Linux 两台设备都在同一个 tailnet 中。
这次实际拿到的 VPS 地址是 100.x.x.x。
第 4 步:从本地通过 Tailscale SSH 连接 VPS
此时不要再用公网 IP:
ssh [email protected]
改成直接连接 Tailscale 地址:
ssh [email protected]
也就是用下图这个新ip,https://login.tailscale.com/admin/machines
连接成功后,你会直接进入 VPS Shell,说明问题已经被绕开了。
第 5 步:在管理后台确认两台设备都在线
你还可以登录 Tailscale 管理后台确认状态。如果看到 Windows 和 VPS 都是 Connected,说明这条私有链路已经建立成功。
常用命令汇总
Windows
检查 Tailscale 是否在线:
tailscale status
使用内网地址 SSH:
ssh [email protected]
Ubuntu VPS
查看 Tailscale 状态:
tailscale status
查看 Tailscale IPv4 地址:
tailscale ip -4
确保服务开机自启:
sudo systemctl enable tailscaled
sudo systemctl start tailscaled
开机自启建议
Windows
如果你以后要长期通过 Tailscale 登录 VPS,建议把 Windows 客户端设置为开机自动运行,并启用 Run unattended。这样重启电脑后也不用每次手动重新登录。
Ubuntu VPS
Ubuntu 侧通常在安装后就会以服务方式运行,但仍建议执行一次:
sudo systemctl enable tailscaled
这套方案会不会影响 VPS 上原有项目
通常不会。
原因很简单:
- Tailscale 只是给服务器增加了一条额外的私有网络路径。
- 它不会直接修改你原来的 Web 服务、数据库服务或项目进程。
- 只要你不主动去改现有防火墙、Nginx、Docker、应用端口,这套方案对原有业务基本是无侵入的。
更稳妥的做法是:
- 先保持原有公网配置不动。
- 先验证 Tailscale SSH 可以稳定登录。
- 确认业务正常后,再决定是否收紧公网 SSH 入口。
使用这套方案时要记住的一点
如果你以后使用的是 Tailscale 内网地址登录 VPS,那么:
- 本地电脑的 Tailscale 需要在线。
- VPS 的 Tailscale 也需要在线。
也就是说,你连接的是:
你的电脑 -> Tailscale 私有网络 -> VPS
而不是:
你的电脑 -> 公网 SSH -> VPS
推荐的后续优化
在确认 Tailscale 连接稳定后,可以继续做这些安全优化:
- 禁用 root 密码登录。
- 改为普通用户 + SSH Key 登录。
- 只保留 Tailscale 访问 SSH,不再对公网开放 SSH 端口。
结论
这次问题的本质不是 VPS 挂掉,也不是 SSH 没启动,而是公网路径不稳定(可能是移动的问题,因为我用其他网络成功连接了),导致本地设备很难稳定完成 SSH 握手。通过给本地电脑和 VPS 同时安装 Tailscale,我们成功绕开了这条异常公网链路,最终用内网地址稳定登录了 VPS。
在下是刚刚接触vps3天的新手小白,如果有更好的方法,欢迎各位佬支招!

