原创

不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战

Tailscale 是什么

Tailscale 是一个基于 WireGuard 的组网工具。

它可以把分布在不同网络中的电脑、服务器、手机和 NAS 连接起来,让这些设备像在同一个局域网中一样通信。

例如:

家里的 Windows 电脑
│
│ Tailscale 加密网络
│
云服务器上的 Linux

Windows 可能连接的是家庭宽带,Linux 服务器可能部署在 AWS、阿里云、腾讯云或者其他机房。

它们不在同一个物理网络里,但安装 Tailscale 后,会各自获得一个虚拟 IP 地址。两台设备可以直接使用这个地址通信。

Tailscale 的方便之处在于,大多数情况下不需要:

  • 自己搭建 VPN 服务器;

  • 配置端口转发;

  • 购买固定公网 IP;

  • 手动生成和分发 WireGuard 密钥;

  • 修改家里的路由器配置。

只要两台设备可以正常访问互联网,就可以尝试建立连接。

Tailscale 是怎么连接设备的

Tailscale 安装到设备后,会创建一个虚拟网卡,并为设备分配一个专用地址,通常是下面这种格式:

100.x.x.x

当 Windows 访问 Linux 时,Tailscale 会优先尝试建立点对点连接。

也就是说,数据尽量直接在 Windows 和 Linux 之间传输,而不是全部经过一台中心 VPN 服务器。

如果两边的网络限制比较严格,无法直接连接,Tailscale 会自动使用中继服务器转发流量。经过中继时,通信内容仍然是加密的。

对普通用户来说,不需要手动判断应该直连还是中继,Tailscale 会自动处理。

这次要实现什么

假设现在有两台设备:

本地电脑

系统:Windows 11
位置:家里
设备名称:my-windows

远程服务器

系统:Ubuntu Linux
位置:云服务器
设备名称:ubuntu-server

我们的目标是:

  1. 在 Windows 和 Linux 上安装 Tailscale;

  2. 使用同一个账号登录;

  3. 让两台设备加入同一个虚拟网络;

  4. 在 Windows 上通过 Tailscale 地址连接 Linux;

  5. 测试成功后,关闭 Linux 对公网开放的 SSH 端口。

一、在 Linux 服务器上安装 Tailscale

下面以 Ubuntu 和 Debian 系统为例。

先通过云服务器控制台或者原来的 SSH 方式登录 Linux,然后执行:

curl -fsSL https://tailscale.com/install.sh | sh

安装完成后,启动 Tailscale:

sudo tailscale up

终端会显示一个登录地址:

To authenticate, visit:

https://login.tailscale.com/a/xxxxxxxx

复制这个地址,在浏览器中打开,然后选择一个账号登录。

可以使用 Google、Microsoft、GitHub、Apple 或其他支持的身份账号。

登录成功后,Linux 服务器就加入了 Tailscale 网络。

查看当前连接状态:

tailscale status

paste-image-1782463832900.png

查看服务器的 Tailscale IPv4 地址:

tailscale ip -4

假设返回:

100.86.20.15

这个地址就是 Linux 服务器在 Tailscale 网络中的地址。

它和服务器公网 IP 不一样,只能由同一个 Tailscale 网络中的授权设备访问。

二、确认 Linux 已经启用 SSH

如果服务器原本就能通过 SSH 登录,一般不需要额外安装。

可以执行下面的命令检查:

sudo systemctl status ssh

如果提示找不到服务,可以安装 OpenSSH Server:

sudo apt update
sudo apt install -y openssh-server

安装后启动 SSH:

sudo systemctl enable --now ssh

再次检查:

sudo systemctl status ssh

看到下面的状态,说明 SSH 正常运行:

Active: active (running)

三、只允许 Tailscale 网络访问 SSH

如果 Linux 开启了 UFW 防火墙,可以添加一条规则,只允许通过 Tailscale 虚拟网卡访问 22 端口:

sudo ufw allow in on tailscale0 to any port 22 proto tcp

查看规则:

sudo ufw status

这里的 tailscale0 是 Tailscale 创建的虚拟网卡。

这条规则和直接执行下面的命令不一样:

sudo ufw allow 22

直接开放 22 端口,可能会允许公网访问。限制到 tailscale0 后,只有通过 Tailscale 网络进入的连接才能访问 SSH。

不过先不要急着关闭公网 SSH,等 Windows 连接测试成功后再处理。

四、在 Windows 上安装 Tailscale

进入 Tailscale 下载页面,下载 Windows 安装程序。

paste-image-1782463875493.png

运行安装程序后,Windows 任务栏右下角会出现 Tailscale 图标。

如果没有看到,可以点击任务栏中的向上箭头,在隐藏图标里查找。

paste-image-1782463902617.png

右键点击 Tailscale 图标,选择:

Log in

浏览器会打开登录页面。

这里需要使用刚才 Linux 登录时使用的同一个账号。

登录完成后,Windows 也会加入同一个 Tailscale 网络。

这时可以打开 Tailscale 管理后台,在设备列表中看到两台设备:

my-windows Windows
ubuntu-server Linux

每台设备都会有自己的 Tailscale IP。

paste-image-1782463946921.png

五、测试 Windows 和 Linux 是否连通

在 Windows 中打开 PowerShell。

先测试 Linux 服务器的 Tailscale IP:

ping 100.86.20.15

有些系统或防火墙可能会拦截普通 Ping,因此普通 Ping 失败不一定代表网络无法使用。

还可以使用 Tailscale 自带的测试命令:

tailscale ping 100.86.20.15

如果连接正常,会看到类似结果:

pong from ubuntu-server

也可以查看当前网络中的设备:

tailscale status

输出中应该能看到 Linux 服务器及其地址。

六、在 Windows 上通过 SSH 登录 Linux

假设 Linux 用户名是:

ubuntu

在 Windows PowerShell 中执行:

ssh ubuntu@100.86.20.15

第一次连接时,可能会出现提示:

Are you sure you want to continue connecting?

输入:

yes

然后输入 Linux 用户密码,或者使用已经配置好的 SSH 私钥。

登录成功后,会进入 Linux 终端:

ubuntu@ubuntu-server:~$

到这里,Windows 和 Linux 的基本组网就完成了。

即使两台设备使用不同运营商、位于不同城市,也可以通过 Tailscale 地址直接连接。

七、使用设备名称连接

每次输入 100.x.x.x 地址还是有点麻烦。

Tailscale 提供了 MagicDNS 功能,可以直接使用设备名称访问服务器。

假设 Linux 服务器的设备名称是:

ubuntu-server

那么可以在 Windows 中直接执行:

ssh ubuntu@ubuntu-server

也可以测试:

ping ubuntu-server

或者:

tailscale ping ubuntu-server

如果设备名称无法解析,可以登录 Tailscale 管理后台,检查 DNS 页面中的 MagicDNS 是否已经启用。

设备名称也可以在管理后台修改。相比记住一串 IP,给服务器设置一个容易识别的名称会方便很多,例如:

home-server
web-server
docker-server
nas

八、测试访问 Linux 上的 Web 服务

Tailscale 不只能用来连接 SSH,也可以访问 Linux 上运行的网站、面板和开发服务。

我们可以临时启动一个简单的 HTTP 服务进行测试。

在 Linux 中创建一个目录:

mkdir -p ~/tailscale-test
cd ~/tailscale-test

创建一个简单网页:

echo '

Hello from Linux Server

' > index.html

启动 Python HTTP 服务:

python3 -m http.server 8080

然后在 Windows 浏览器中访问:

http://100.86.20.15:8080

如果 MagicDNS 可用,也可以直接访问:

http://ubuntu-server:8080

看到 Hello from Linux Server,说明 Windows 已经可以访问 Linux 上运行的 Web 服务。

实际使用中,这种方式可以访问很多服务,例如:

  • Docker 管理面板;

  • 宝塔面板;

  • 数据库管理工具;

  • Jellyfin;

  • Home Assistant;

  • 自己开发的后台系统;

  • 只供内部使用的 API;

  • NAS 管理页面。

这些服务不一定需要开放到公网,只要通过 Tailscale 访问即可。

九、确认成功后关闭公网 SSH

当下面几项都测试正常后,可以考虑关闭云服务器安全组中的公网 22 端口:

  • Windows 和 Linux 都显示在线;

  • Windows 可以连接 Linux 的 Tailscale IP;

  • 使用 SSH 登录没有问题;

  • Linux 重启后 Tailscale 可以自动上线;

  • 云服务商提供网页终端或救援控制台。

云服务器安全组中经常会有类似规则:

协议:TCP
端口:22
来源:0.0.0.0/0

其中 0.0.0.0/0 表示允许所有公网 IP 尝试访问服务器的 22 端口。

确认 Tailscale 连接没有问题后,可以删除这条规则,或者至少把来源限制到自己的固定 IP。

关闭公网端口后,仍然可以通过 Tailscale 登录:

ssh ubuntu@ubuntu-server

这样可以减少服务器被扫描和暴力破解的情况。

需要注意的是,在关闭公网 SSH 之前,一定要保留备用登录方式。万一 Tailscale 配置出错,还可以通过云厂商提供的网页终端进入服务器修复。

十、查看当前是直连还是中继

在 Windows PowerShell 中执行:

tailscale ping ubuntu-server

结果中可能会显示连接类型。

如果看到类似:

via 192.168.x.x:41641

通常表示两台设备已经建立直接连接。

如果看到:

via DERP

说明当前连接经过了 Tailscale 中继服务器。

经过中继也可以正常使用,只是速度和延迟可能不如直连。

一般的 SSH、服务器管理和后台访问,即使走中继也不会有太大影响。如果需要传输大量文件,中继速度可能会比较明显。

十一、服务器重启后无法连接怎么办

Tailscale 在正常安装后会作为系统服务运行。

可以在 Linux 中检查:

sudo systemctl status tailscaled

如果服务没有启动,可以执行:

sudo systemctl enable --now tailscaled

然后查看状态:

tailscale status

如果设备认证已经过期,可能需要重新登录:

sudo tailscale up --force-reauth

对于长期运行的服务器,还可以在 Tailscale 管理后台中查看设备密钥的有效期。

是否关闭设备密钥过期,需要根据实际安全需求决定。家用服务器可以考虑,重要的生产服务器则要更加谨慎。

十二、能连接 Tailscale,但 SSH 失败怎么办

先在 Linux 中检查 SSH 服务:

sudo systemctl status ssh

检查 22 端口是否正在监听:

sudo ss -lntp | grep ':22'

再检查 UFW:

sudo ufw status

如果没有允许 Tailscale 网卡访问 SSH,可以添加:

sudo ufw allow in on tailscale0 to any port 22 proto tcp

还可以在 Windows 中测试 22 端口:

Test-NetConnection 100.86.20.15 -Port 22

如果看到:

TcpTestSucceeded : True

说明 Windows 可以连接到 Linux 的 22 端口。

如果端口可以连接,但 SSH 登录失败,就要检查 Linux 用户名、密码、密钥以及 /etc/ssh/sshd_config 配置。

十三、Tailscale 适合哪些场景

Windows 连接 Linux 服务器只是 Tailscale 最基础的用法。

它还适合下面这些场景:

远程访问家庭 NAS

即使家里没有公网 IP,也可以从外面访问 NAS。

管理多台云服务器

把不同云平台上的服务器放进同一个私有网络,不需要让管理端口全部暴露在公网。

访问 Docker 服务

Portainer、数据库、监控面板等服务可以只对 Tailscale 网络开放。

连接家庭和办公室设备

家里的电脑、办公室服务器和出差时使用的笔记本,可以加入同一个网络。

访问内网设备

通过子网路由功能,还可以访问无法安装 Tailscale 的打印机、摄像头和其他局域网设备。

总结

Tailscale 最吸引人的地方不是功能有多复杂,而是它把原本很麻烦的组网过程简化了。

以前想从 Windows 安全访问一台远程 Linux 服务器,可能要考虑:

  • 公网 IP;

  • 动态域名;

  • 路由器端口映射;

  • VPN 服务器;

  • 防火墙规则;

  • WireGuard 密钥配置。

使用 Tailscale 后,基本流程只剩下:

  1. 在 Linux 上安装并登录;

  2. 在 Windows 上安装并登录;

  3. 使用 Tailscale IP 或设备名称连接。

最终只需要一条命令:

ssh ubuntu@ubuntu-server

对于个人服务器、家庭实验室和小团队来说,这种方式足够简单,也比长期把 SSH、数据库和管理面板暴露在公网更稳妥。

正文到此结束
Loading...