使用 Tailscale 解决本地无法 SSH 连接 VPS 教程

使用 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

在开始之前,请确认:

  1. 你本地电脑可以正常打开网页并登录 Tailscale 账号。
  2. 你能通过 VNC 进入 VPS 终端。
  3. 不要先删掉现有 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、应用端口,这套方案对原有业务基本是无侵入的。

更稳妥的做法是:

  1. 先保持原有公网配置不动。
  2. 先验证 Tailscale SSH 可以稳定登录。
  3. 确认业务正常后,再决定是否收紧公网 SSH 入口。

使用这套方案时要记住的一点

如果你以后使用的是 Tailscale 内网地址登录 VPS,那么:

  • 本地电脑的 Tailscale 需要在线。
  • VPS 的 Tailscale 也需要在线。

也就是说,你连接的是:

你的电脑 -> Tailscale 私有网络 -> VPS

而不是:

你的电脑 -> 公网 SSH -> VPS

推荐的后续优化

在确认 Tailscale 连接稳定后,可以继续做这些安全优化:

  1. 禁用 root 密码登录。
  2. 改为普通用户 + SSH Key 登录。
  3. 只保留 Tailscale 访问 SSH,不再对公网开放 SSH 端口。

结论

这次问题的本质不是 VPS 挂掉,也不是 SSH 没启动,而是公网路径不稳定(可能是移动的问题,因为我用其他网络成功连接了),导致本地设备很难稳定完成 SSH 握手。通过给本地电脑和 VPS 同时安装 Tailscale,我们成功绕开了这条异常公网链路,最终用内网地址稳定登录了 VPS。

在下是刚刚接触vps3天的新手小白,如果有更好的方法,欢迎各位佬支招!

43 个赞

感谢分享教程 :folded_hands:

3 个赞

谢谢大佬

4 个赞

感谢教程!

2 个赞

这操作太强了[1]! 感谢分享教程! :smiling_face_with_three_hearts:


  1. 简直像是打开了我的脑袋 ↩︎

2 个赞

感谢分享 :hand_with_index_finger_and_thumb_crossed:

1 个赞

感谢分享,点赞收藏回复一条龙

3 个赞

不错不错

1 个赞

感谢分享教程

2 个赞

感谢佬教程~

1 个赞

谢谢分享

4 个赞

感谢佬分享

3 个赞

版里之前推荐过自助easytier,Tailscale算是商业方案

6 个赞

受益匪浅,有时间了就参照你的文章自己动手试试

2 个赞

有easytier的教程贴吗

1 个赞

可以直接使用machine name哈

2 个赞

谢谢佬!,我终于可以稳定连上了

1 个赞

下午racknerd一直超时,跟着教程解决了,感谢佬友

1 个赞