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
我们的目标是:
-
在 Windows 和 Linux 上安装 Tailscale;
-
使用同一个账号登录;
-
让两台设备加入同一个虚拟网络;
-
在 Windows 上通过 Tailscale 地址连接 Linux;
-
测试成功后,关闭 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
查看服务器的 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 安装程序。
运行安装程序后,Windows 任务栏右下角会出现 Tailscale 图标。
如果没有看到,可以点击任务栏中的向上箭头,在隐藏图标里查找。
右键点击 Tailscale 图标,选择:
Log in
浏览器会打开登录页面。
这里需要使用刚才 Linux 登录时使用的同一个账号。
登录完成后,Windows 也会加入同一个 Tailscale 网络。
这时可以打开 Tailscale 管理后台,在设备列表中看到两台设备:
my-windows Windows
ubuntu-server Linux
每台设备都会有自己的 Tailscale IP。
五、测试 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 后,基本流程只剩下:
-
在 Linux 上安装并登录;
-
在 Windows 上安装并登录;
-
使用 Tailscale IP 或设备名称连接。
最终只需要一条命令:
ssh ubuntu@ubuntu-server
对于个人服务器、家庭实验室和小团队来说,这种方式足够简单,也比长期把 SSH、数据库和管理面板暴露在公网更稳妥。