不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战
Tailscale 是什么Tailscale 是一个基于 WireGuard 的组网工具。它可以把分布在不同网络中的电脑、服务器、手机和 NAS 连接起来让这些设备像在同一个局域网中一样通信。例如家里的 Windows 电脑 │ │ Tailscale 加密网络 │ 云服务器上的 LinuxWindows 可能连接的是家庭宽带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安装完成后启动 Tailscalesudo 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 Serversudo apt update sudo apt install -y openssh-server安装后启动 SSHsudo 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 IPping 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 ubuntu100.86.20.15第一次连接时可能会出现提示Are you sure you want to continue connecting?输入yes然后输入 Linux 用户密码或者使用已经配置好的 SSH 私钥。登录成功后会进入 Linux 终端ubuntuubuntu-server:~$到这里Windows 和 Linux 的基本组网就完成了。即使两台设备使用不同运营商、位于不同城市也可以通过 Tailscale 地址直接连接。七、使用设备名称连接每次输入100.x.x.x地址还是有点麻烦。Tailscale 提供了 MagicDNS 功能可以直接使用设备名称访问服务器。假设 Linux 服务器的设备名称是ubuntu-server那么可以在 Windows 中直接执行ssh ubuntuubuntu-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 管理面板宝塔面板数据库管理工具JellyfinHome Assistant自己开发的后台系统只供内部使用的 APINAS 管理页面。这些服务不一定需要开放到公网只要通过 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 ubuntuubuntu-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再检查 UFWsudo 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 ubuntuubuntu-server对于个人服务器、家庭实验室和小团队来说这种方式足够简单也比长期把 SSH、数据库和管理面板暴露在公网更稳妥。原文链接不用公网 IP把 Windows 和 Linux 服务器放进同一个局域网Tailscale 组网实战 | Harries Blog™