第一次听说ZeroTier是在去年搭建家庭实验室的时候。当时我需要远程访问放在老家的NAS,但苦于没有公网IP,试过各种方案都不理想。直到朋友推荐了这个神奇的工具,才发现原来组建虚拟局域网可以这么简单。
ZeroTier本质上是一个软件定义的网络(SDN)解决方案。它通过在设备间建立加密的点对点连接,把分布在全球各地的设备虚拟成同一个局域网里的成员。想象一下,就像给你的每台设备都装了个"任意门",无论它们物理上相隔多远,都能像在同一个房间那样直接通信。
我现在的日常使用场景包括:
最让我惊喜的是它的跨平台能力。上周刚帮朋友实现了Windows和Mac之间的文件共享,整个过程只用了不到10分钟。下面我就以Windows 11和Ubuntu 22.04为例,带你完整走一遍搭建流程。
首先打开ZeroTier官网(注意:需合规访问),点击右上角的"Sign Up"注册账号。建议使用常用邮箱,因为后续设备授权需要登录操作。注册完成后你会进入控制台页面,这里就是我们管理所有设备的"司令部"。
点击"Networks"标签下的"Create a Network"按钮,系统会自动生成一个16位的网络ID(比如我这次得到的是a09acf0233953bab)。这个ID相当于虚拟局域网的身份证号,所有要加入的设备都需要提供这个凭证。
重要设置项说明:
我一般会把IP池设置为192.168.192.0/24,这样既不会和常见家用路由器网段冲突,又方便记忆。设置完成后别急着关页面,我们还需要在这里授权设备。
点击刚创建的网络ID进入详情页,"Advanced"选项里有几个实用功能:
对于初次使用者,保持默认设置即可。唯一建议调整的是"Auto-Assign from Range"里的IP分配范围,避免使用默认的172.xx网段,因为很多云服务器会占用这个段。
在Windows设备上,直接下载官网提供的MSI安装包。安装过程没有任何技术难点,一路Next即可。安装完成后会在系统托盘看到行星状的蓝色图标,右键点击选择"Join Network"。
这里有个小技巧:以管理员身份运行客户端可以避免后续可能出现的权限问题。我在实际使用中发现,某些安全软件可能会拦截虚拟网卡驱动安装,遇到这种情况暂时关闭防护即可。
在弹出的对话框中输入之前创建的网络ID,点击Join。此时回到ZeroTier控制台网页,在"Members"标签下应该能看到一个新设备,前面有未勾选的复选框。
勾选这个复选框表示授权设备接入,你可以给设备起个辨识度高的名字(比如"Office-PC")。授权后稍等片刻,Windows客户端会显示"OK"状态,并分配到一个虚拟IP(如192.168.192.5)。
验证是否成功:
ipconfig查看是否有ZeroTier虚拟网卡在Ubuntu终端中执行以下命令:
bash复制curl -s https://install.zerotier.com | sudo bash
这个一键脚本会自动完成以下操作:
安装完成后建议立即启用服务自启动:
bash复制sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one
执行加入命令(替换为你自己的网络ID):
bash复制sudo zerotier-cli join a09acf0233953bab
成功会返回"200 join OK"。此时回到控制台网页授权该设备,你会注意到Linux设备的名称通常显示为节点ID的前6位。
常用诊断命令:
bash复制# 查看节点状态
sudo zerotier-cli status
# 列出所有节点
sudo zerotier-cli listpeers
# 查看已加入的网络
sudo zerotier-cli listnetworks
如果遇到连接问题,首先检查防火墙设置。Ubuntu默认的ufw需要放行ZeroTier流量:
bash复制sudo ufw allow 9993/udp
在Windows端尝试ping Ubuntu设备:
cmd复制ping 192.168.192.10
如果出现延迟高或丢包,可能是走了ZeroTier的根服务器中转。理想情况下设备间应该建立直连(P2P),可以通过以下命令查看连接类型:
bash复制sudo zerotier-cli listpeers
显示"LEAF"表示是普通节点,"PLANET"则是官方根服务器。
Windows共享文件夹给Ubuntu:
code复制smb://192.168.192.5/共享文件夹名称
Ubuntu共享给Windows:
bash复制sudo apt install samba
bash复制sudo nano /etc/samba/smb.conf
code复制[share]
path = /home/你的用户名/share
browseable = yes
read only = no
guest ok = yes
bash复制sudo service smbd restart
为了避免每次输入IP地址,可以在Windows的C:\Windows\System32\drivers\etc\hosts文件中添加映射:
code复制192.168.192.10 ubuntu-server
之后就可以直接用ssh username@ubuntu-server连接了。
对于频繁使用的SSH连接,建议配置密钥认证:
cmd复制ssh-keygen -t ed25519
cmd复制type %USERPROFILE%\.ssh\id_ed25519.pub | ssh ubuntu-server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
如果设备间延迟过高(>100ms),可以考虑自建Moon服务器。Moon相当于私有中继节点,能显著改善跨国或跨运营商连接的稳定性。搭建方法:
bash复制cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
json复制"stableEndpoints": ["1.2.3.4/9993"]
bash复制sudo zerotier-idtool genmoon moon.json
bash复制sudo zerotier-cli orbit 月球节点ID 月球节点ID
设备无法互相发现:
bash复制sudo systemctl restart zerotier-one
连接时断时续:
bash复制sudo zerotier-cli set a09acf0233953bab allowGlobal=true
Windows显示"ACCESS_DENIED":
虽然ZeroTier默认使用端到端加密,但仍有几个安全注意事项:
对于企业用户,可以考虑购买ZeroTier的商业许可证,获得更多高级功能如:
经过半年多的实际使用,ZeroTier已经成为我远程办公不可或缺的工具。它最吸引我的地方在于既保持了企业级网络的安全性,又提供了傻瓜式的操作体验。记得第一次成功从公司访问家里NAS时,那种突破物理限制的自由感让人印象深刻。现在连我60岁的老爸都学会了用这个工具远程访问家庭相册,技术真的让生活更美好了。