跳到主要内容

Tailscale 私网与 OpenSSH

Tailscale 在这里做什么

Tailscale让设备加入一个基于 WireGuard 的私有网络(tailnet),并为节点分配稳定的私网地址。它解决的是“客户端怎样安全到达 VPS”,并不会自动让目标机器出现一个可用服务:访问 SSH 仍要求 VPS 上的 sshd监听 22 端口。

WSL2 的 ssh 客户端
-> Windows 主机的 Tailscale 连通性
-> VPS 的 100.x Tailscale 地址
-> Ubuntu sshd
-> authorized_keys 公钥认证

在这种架构下,Windows 是 tailnet 节点,WSL2 通过 Windows 网络栈使用其 VPN 连通性。只要 WSL2 已能到达 VPS 的 Tailscale 地址,就没有必要再在 WSL2 内安装第二个 Tailscale 节点。不同 WSL 网络模式和 VPN 可能表现不同,因此最终以实测路由和 SSH 为准。

它不是 Tailscale SSH

名字很接近,但行为不同:

方案网络SSH 服务与认证
OpenSSH over TailscaleTailscale 提供私网路径Ubuntu sshd处理 SSH,仍用用户公钥
Tailscale SSHTailscale 提供网络并接管 tailnet 进入的 22 端口Tailscale 管理认证与授权策略

本系列采用第一种,所以不要运行:

tailscale set --ssh

在 VPS 安装并加入 tailnet

先检查是否已安装:

[REMOTE: VPS]
command -v tailscale || true
systemctl status tailscaled --no-pager || true

官方 Linux 快速安装方式是:

[REMOTE: VPS]
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

更严格的环境可以阅读脚本或按发行版手动配置官方仓库。tailscale up可能输出浏览器授权 URL;只展示 URL,由操作者登录授权,不把 auth key 写进脚本。

验证节点状态

[REMOTE: VPS]
tailscale status
tailscale ip -4
systemctl is-enabled tailscaled
systemctl is-active tailscaled

管理控制台显示节点已加入,只证明注册完成;它不能替代从实际客户端发起的端到端测试。

从 WSL2 验证

[LOCAL: WSL2]
ping -c 3 "$TAILSCALE_IPV4"

ssh \
-i "$HOME/.ssh/id_ed25519" \
-o IdentitiesOnly=yes \
-o PreferredAuthentications=publickey \
-o PasswordAuthentication=no \
"$VPS_USER@$TAILSCALE_IPV4"

ping可帮助判断基本网络路径,但 SSH 成功才满足远程管理验收。在成功会话中可以查看:

[REMOTE: session reached through Tailscale]
printf '%s\n' "$SSH_CONNECTION"

它通常显示客户端 Tailscale IP、客户端临时端口、VPS Tailscale IP 和 22,能证明连接确实走了预期路径。

常见失败

  • Windows 节点在线,WSL2 仍超时:检查 WSL 网络模式、Windows VPN/防火墙和到 100.x 的路由;不要立刻关闭公网 22。
  • 能 ping,SSH 超时:检查 VPS 的 sshd、UFW 接口规则和端口监听。
  • SSH 提示新主机密钥:从已知可信路径比对 VPS 主机公钥指纹。
  • 控制台显示在线但连接失败:在线状态不是应用层验证;必须从 WSL2 实际连接。

只有 OpenSSH-over-Tailscale 的新会话稳定成功,才进入公网 SSH 收口阶段。