云计算百科
云计算领域专业知识百科平台

不用公网 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

我们的目标是:

  • 在 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

    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 后,基本流程只剩下:

  • 在 Linux 上安装并登录;

  • 在 Windows 上安装并登录;

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

  • 最终只需要一条命令:

    ssh ubuntu@ubuntu-server

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

    原文链接:不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战 | Harries Blog™

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!