欢迎光临
我们一直在努力

(四)实战ZeroTier:三步搭建虚拟局域网,实现外网SSH直连内网服务器

1. 为什么你需要一个“虚拟局域网”?

想象一下这个场景:你实验室的服务器就放在办公室的角落里,平时在办公室,用内网IP 192.168.1.100 就能轻松连上,跑代码、传数据都飞快。但一旦你回到家,或者出差在外,想连回这台服务器,就发现完全没辙了。你可能会想到让管理员在路由器上做端口映射,把服务器的22号端口(SSH端口)暴露到公网,但这通常需要复杂的配置,还可能带来安全风险。更别提很多公司或学校的网络管理员根本不会为你开放这个权限。

这就是传统网络架构的局限:内网设备被路由器或防火墙保护起来,形成了一个安全的“孤岛”,但同时也隔绝了来自外部的合法访问。你需要一种方法,能让你在任何有互联网的地方,都像坐在办公室里一样,直接使用 ssh user@192.168.1.100 这样的命令来连接你的服务器。

内网穿透就是为了解决这个问题而生的技术。它就像给你的内网服务器和你的外网电脑之间,搭建了一条专属的、加密的“网络隧道”。通过这条隧道,外网设备就能“穿透”层层网络阻隔,直接访问到内网资源。而 ZeroTier 就是实现这种“虚拟局域网”的绝佳工具之一。它不是一个简单的端口转发工具,它的目标是让你分布在全球各地的设备,都感觉像是在同一个物理交换机下,拥有同一个网段的IP地址,可以直接互相通信。

我试过不少内网穿透方案,比如需要自己搭建中继服务器的frp,或者配置复杂的VPN。对于只是想安全、稳定地远程访问几台设备的个人用户或小团队来说,这些方案要么太“重”,要么维护成本高。ZeroTier吸引我的地方在于它的“傻瓜式”操作和强大的P2P直连能力。你不需要购买公网IP,不需要租用云服务器做中转(当然,自建根服务器可以优化体验),只需要注册一个账号,在需要互访的设备上安装一个轻量级的客户端,它们就能自动组成一个虚拟网络。实测下来,只要网络条件允许,设备间就能建立点对点直连,延迟极低,速度取决于你本地的上传带宽,非常“稳”。

2. ZeroTier是如何工作的?一个简单的比喻

在深入动手之前,我们先花点时间,用一个小故事来理解ZeroTier的原理,这能帮你更好地理解后续的配置和可能遇到的问题。

你可以把互联网想象成一个巨大的、错综复杂的邮政系统。每个家庭或公司(内网)都有一个唯一的街道地址(公网IP),但这个地址只对应到大楼的门卫(路由器)。大楼里的每个房间(内网设备)都有内部房号(私有IP,如192.168.1.x),外部寄来的信件上如果只写了房号,门卫是不知道往哪里送的,因为房号只在楼内有效。

传统端口映射就像是你在门卫那里登记:“所有寄给‘A先生’(外部端口号)的信,都请转交到101房间(内网IP:端口)。” 这个方法简单直接,但问题是你需要说服门卫(拥有路由器管理权限),而且你把房间号公开给了整个邮政系统,安全性存疑。

而ZeroTier的做法更巧妙。它相当于成立了一个全球性的“私人邮局俱乐部”。你、你的服务器、你的笔记本都加入了这个俱乐部。俱乐部给每个成员分配了一个独一无二的、全球有效的“俱乐部内部地址”(比如 10.147.20.5)。当你想给服务器(俱乐部地址 10.147.20.10)寄信时,你并不需要知道它实际在哪栋楼里。你只需要把信交给ZeroTier俱乐部,俱乐部有一套智能系统:

  • 尝试“打洞”:俱乐部会同时通知你和服务器:“你们俩尝试直接给对方寄信,寄到对方大楼的门卫那里,并注明是俱乐部内部通信。” 由于通信是双向发起的,门卫可能会允许这种“回信”进入。这就是 P2P直连,效率最高,延迟最低。
  • 中继转发:如果“打洞”失败(比如双方的门卫都很严格,即对称型NAT),俱乐部就会在你们之间充当“邮差”,帮你们转发信件。这就是 中继模式,速度取决于ZeroTier官方或你自建的根服务器(Planet)的位置和带宽。
  • 所以,ZeroTier的核心就是创建一个覆盖在真实互联网之上的 软件定义网络(SDN)。每台设备安装的ZeroTier客户端,都会虚拟出一块网卡,并获得这个虚拟网络内的IP。所有设备间的通信都经过加密,安全性很高。对于用户来说,你完全不用关心底层网络有多复杂,你只需要记住一个事实:所有加入了同一个ZeroTier网络的设备,无论它们物理上在哪里,都可以直接用虚拟IP相互访问,就像在同一个房间的局域网里一样。

    3. 第一步:创建你的专属虚拟网络

    好了,比喻听完了,我们开始动手。第一步,我们需要在ZeroTier的“总部”注册并创建一个虚拟网络。别担心,这一步完全在网页上完成,而且是免费的(对于个人和小规模使用,免费版提供的100个设备完全够用)。

    首先,打开你的浏览器,访问 ZeroTier 官网。找到注册入口,用一个常用的邮箱进行注册。这个过程和注册任何一个普通网站账号没有区别,验证邮件,设置密码,然后登录。

    登录成功后,你会进入 ZeroTier Central,这是你的网络管理中心。页面上会有一个非常醒目的 “Create A Network” 按钮。毫不犹豫地点下去。

    点击之后,系统会自动为你生成一个网络。你会立刻看到一个由16位十六进制字符组成的 Network ID,例如 a0b1c2d3e4f5g6h7。这个ID至关重要,请务必复制保存好,它就像是你的虚拟网络的“邀请码”,所有你想加入这个网络的设备,都需要用到它。

    接下来,我们需要对这个新创建的网络进行一些基本设置,让它更符合我们的使用习惯。找到你的网络,点击进入其管理页面。在这里,我建议你做两件事:

  • 给网络起个名字:在 Name 字段里,输入一个你能记住的名字,比如 “My-Lab-Servers” 或者 “Home-Office-Network”。这纯粹是为了方便你自己管理。
  • 配置IP地址池:这是关键一步。ZeroTier需要知道给你的设备分配什么网段的IP。默认情况下,它会使用一个随机的私有IP段,比如 10.147.20.0/24。我建议你保留默认的,或者自定义一个你喜欢的私有网段,例如 192.168.192.0/24。确保这个网段不要和你现实中任何一个物理网络的网段冲突(比如你家的WiFi是 192.168.1.0/24,那就别用这个)。设置好后,ZeroTier就会从这个池子里自动给新加入的设备分配IP。
  • 至此,你的虚拟网络“总部”就搭建好了。你可以把这个管理页面想象成你虚拟网络的“控制面板”,在这里你可以看到所有加入的设备,管理它们的权限,甚至设置更高级的路由规则。不过对于基本的SSH访问,我们现在只需要这个Network ID。

    4. 第二步:让内网服务器“入网”

    现在,我们要把主角——你那台放在内网的服务器——加入到这个虚拟网络里。无论你的服务器是Ubuntu、CentOS还是Debian,过程都大同小异。我这里以最常见的Ubuntu系统为例,通过SSH连接到你的服务器进行操作。

    4.1 安装ZeroTier客户端

    在服务器的终端里,执行下面这条命令。这是一条官方提供的一键安装脚本,它会自动检测你的系统版本并安装合适的软件包。

    curl -s https://install.zerotier.com | sudo bash

    命令执行后,你会看到一串滚动的输出。安装成功的最明显标志是最后会出现类似 *** Success! You are ZeroTier address [一串10位的字母数字] 的信息。这串地址就是你这台服务器在ZeroTier世界里的唯一身份证号(Node ID),不过我们暂时用不到它,记不记都行。

    4.2 加入我们创建的网络

    安装好客户端后,ZeroTier服务会自动启动。现在,我们用 zerotier-cli 这个命令行工具让它加入我们刚才创建的网络。命令格式如下:

    sudo zerotier-cli join <你的Network ID>

    把 <你的Network ID> 替换成你之前复制保存的那串16位代码。例如:

    sudo zerotier-cli join a0b1c2d3e4f5g6h7

    如果一切顺利,你会看到终端返回 200 join OK。这表示你的服务器已经发出了加入网络的申请。

    4.3 回到网页端进行授权

    此时,如果你刷新ZeroTier Central里你的网络管理页面,在设备列表里,你会看到一个“未授权”的新设备,它可能显示为一串ID,或者是你服务器的主机名。这一步非常重要:ZeroTier默认新设备加入需要管理员手动授权。

    找到这个新设备,在它前面有一个复选框,勾选上。勾选的动作就是授权该设备加入网络。授权后几秒钟内,ZeroTier就会为这台服务器分配一个虚拟IP地址,显示在 Managed IPs 列下面,比如 10.147.20.5。这个IP地址,就是你以后从外网SSH连接这台服务器时所要使用的地址!

    4.4 (可选但推荐)设置开机自启动

    我们希望服务器重启后,ZeroTier服务能自动运行并重新加入网络。大多数Linux系统使用systemd,启用自启动非常方便:

    sudo systemctl enable zerotier-one.service

    你可以用 sudo systemctl status zerotier-one.service 来检查服务是否正在正常运行。至此,服务器端的配置就全部完成了。你可以通过 sudo zerotier-cli listnetworks 命令来查看加入的网络状态,确认它已经获得了一个IP地址。

    5. 第三步:配置外网设备并完成SSH连接

    服务器已经就位,现在轮到你的外网设备了。无论你是在家用的Windows电脑、MacBook,还是出差用的笔记本电脑,甚至是一部手机,只要安装ZeroTier客户端并加入同一个网络,它就能和服务器互通。

    5.1 在外网设备上安装并加入网络

    • Windows/Mac:直接去ZeroTier官网下载对应的图形化安装包,像安装普通软件一样安装它。安装完成后,你可以在系统托盘(Windows)或菜单栏(Mac)找到ZeroTier的图标。点击图标,选择 “Join Network”,然后输入你那16位的Network ID。
    • Linux桌面:安装过程和服务器类似,使用同样的curl安装脚本。安装后,同样使用 sudo zerotier-cli join <Network ID> 命令加入。
    • 手机(Android/iOS):在应用商店搜索ZeroTier并安装。打开App,点击右上角的 “+” 号,输入Network ID即可加入。

    5.2 授权外网设备

    和服务器一样,新加入的外网设备也需要在ZeroTier Central网页上被授权。刷新你的网络管理页面,你应该能看到第二个“未授权”的设备。勾选授权,它也会立刻获得一个虚拟IP,比如 10.147.20.10。

    现在,神奇的事情发生了。你的外网设备(IP 10.147.20.10)和内网服务器(IP 10.147.20.5)在逻辑上已经处于同一个局域网了。

    5.3 进行SSH连接测试

    打开你外网设备上的终端(Windows可以用PowerShell或WSL,Mac/Linux直接用系统终端)。尝试用服务器在ZeroTier网络中获得的虚拟IP进行ping测试:

    ping 10.147.20.5

    如果能看到回复,恭喜你,虚拟网络通道已经打通了!接下来,使用SSH命令进行连接:

    ssh 你的用户名@10.147.20.5

    输入服务器密码,你应该就能像在办公室内网一样,成功登录到服务器了。第一次连接时可能依然会提示主机密钥认证,确认即可。

    注意:为了安全起见,强烈建议你禁用服务器的密码登录,改用SSH密钥对认证。同时,确保服务器的防火墙(如ufw)放行了ZeroTier虚拟网卡(通常是zt开头的接口)的流量,或者至少放行SSH端口(22)。

    6. 进阶与优化:提升连接稳定性和速度

    按照上面的三步走,基本功能已经实现。但如果你在实际使用中感觉速度不理想,或者连接时有不稳定,那么可以了解一下进阶优化方案。这主要是为了解决一个核心问题:ZeroTier的官方根服务器(Planet)在海外,国内设备连接时,如果P2P“打洞”失败,就会走海外的中继,导致延迟增高。

    6.1 理解Moon服务器的作用

    ZeroTier的网络中有三种节点:

    • Planet(行星):官方根服务器,负责协调和身份认证,所有设备都要知道它。
    • Moon(卫星):用户自建的辅助根服务器。设备在连接时,会优先尝试与Moon建立连接,用于改善在复杂NAT环境下的打洞成功率,并作为备用的中继节点。Moon服务器需要你有公网IP的VPS。
    • Leaf(叶子):我们普通的客户端设备,比如你的电脑和服务器。

    搭建Moon服务器就像是你在国内设立了一个“联络站”。当你的设备(都在国内)之间尝试直连时,可以通过这个国内的“联络站”进行协调,往往比绕道海外的“总部”协调效率更高,打洞成功率也更高。

    6.2 如何自建Moon服务器

    你需要一台具有公网IP的国内云服务器(比如腾讯云、阿里云的轻量应用服务器,最低配置即可)。在这台服务器上:

  • 同样安装ZeroTier:curl -s https://install.zerotier.com | sudo bash
  • 生成Moon配置文件:cd /var/lib/zerotier-one && sudo zerotier-idtool initmoon identity.public > moon.json
  • 编辑moon.json,在 “stableEndpoints” 部分填入你云服务器的公网IP和端口(默认9993)。
  • 生成签名后的.moon文件:sudo zerotier-idtool genmoon moon.json
  • 将生成的.moon文件移动到 moons.d 文件夹:sudo mv *.moon moons.d/
  • 重启ZeroTier服务:sudo systemctl restart zerotier-one
  • 6.3 让其他设备连接Moon

    在你的客户端设备(服务器和你的电脑)上,执行:

    sudo zerotier-cli orbit <Moon节点的ID> <Moon节点的ID>

    Moon节点的ID可以在云服务器上通过 sudo zerotier-cli info 查看。加入后,使用 sudo zerotier-cli listpeers 命令,你可以看到多了一个类型为 MOON 的节点,说明连接成功。

    搭建Moon是提升国内网络环境下ZeroTier体验最有效的方法之一。我自己的使用经验是,在搭建了Moon之后,设备间P2P直连的成功率接近100%,延迟从偶尔的几百毫秒降低到与物理距离相符的几十毫秒内,传输大文件时速度也有了质的提升。

    7. 安全考量与最佳实践

    将内网服务暴露出来,安全永远是第一位的。ZeroTier本身提供了不错的安全基础(端到端加密),但我们自己也要养成良好的习惯。

    7.1 网络访问控制
    在ZeroTier Central的网络设置里,有一个 “Private” 开关。当网络是私有(Private)状态时,新设备加入必须由管理员手动授权(我们之前做的勾选操作)。请务必保持这个设置为开启状态,这是防止未经授权设备接入的第一道防线。千万不要图省事把它改成“Public”。

    7.2 设备命名与分组
    随着设备增多,在管理页面里给每台设备设置一个清晰的名称(比如 “Office-Server-Ubuntu”, “My-MacBook-Pro”)。你还可以通过设置 “Rules”(规则)来定义更精细的访问控制。例如,你可以写一条简单的防火墙规则,只允许你的笔记本电脑IP访问服务器的SSH端口,其他端口和其他设备的访问一律拒绝。ZeroTier的规则语法非常强大,类似于iptables。

    7.3 服务器端加固

    • 使用SSH密钥登录:彻底关闭密码登录,这是防止暴力破解的最有效手段。
    • 限制SSH监听接口:可以配置SSH服务只监听ZeroTier的虚拟网卡(如 ListenAddress 10.147.20.5),这样即使服务器物理网卡被扫描,也找不到SSH服务。
    • 使用非标准端口:将SSH端口从22改为一个高位端口,可以减少自动化脚本的扫描骚扰。
    • 启用防火墙:使用 ufw 或 firewalld,明确只放行必要的端口(如你的ZeroTier虚拟IP段)。

    7.4 关于自建根服务器(Planet)
    对于追求极致可控和性能的用户,可以完全自建ZeroTier的根服务器(Planet)和网络控制器(Controller)。这意味着你完全脱离ZeroTier官方的服务,所有数据都在你自己的服务器上流转。这提供了最高的私密性和可控性,尤其适合对数据敏感的企业环境。但搭建和维护成本也相应更高,需要你有一台稳定的服务器并自行处理更新和故障。对于大多数个人和小团队用户来说,使用官方服务+自建Moon服务器已经能在性能、安全和易用性之间取得很好的平衡。

    踩过几次坑之后,我发现内网穿透工具的选择很大程度上取决于你的具体场景。如果你只是临时需要暴露一个本地Web服务给同事看,ngrok这类工具可能更快捷。但如果你需要的是建立一个长期、稳定、安全的远程办公或团队协作环境,让多台设备像在同一个局域网内一样无缝互访,那么基于虚拟局域网方案的ZeroTier无疑是更优雅、更强大的选择。它的配置过程看似简单,但背后是成熟的P2P技术和加密通信在支撑,真正做到了“复杂的技术,简单的操作”。

    赞(0)
    未经允许不得转载:171主机测评 » (四)实战ZeroTier:三步搭建虚拟局域网,实现外网SSH直连内网服务器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址