Ubuntu 安装配置 ZeroTier 组建虚拟局域网完整教程
ZeroTier 是一款开源的软件定义网络(SDN)工具,可以在不同网络环境下的设备之间创建安全的虚拟局域网。它采用 P2P 技术,无需公网 IP 即可实现设备互联,非常适合远程办公、异地组网、内网穿透等场景。
教程概述
本教程将带你完成在 Ubuntu 系统上安装和配置 ZeroTier 的完整过程。内容包括:
- 基础介绍:ZeroTier 工作原理和适用场景
- 安装配置:官方脚本安装与服务管理
- 网络管理:创建网络、加入网络、设备授权
- 私有部署:替换 planet 文件连接私有根服务器
- 常用命令:日常管理命令速查
- 故障排查:常见问题与解决方案
一、ZeroTier 简介
1. 什么是 ZeroTier
ZeroTier 是一个智能以太网交换机,可以将分布在世界各地的设备组成一个虚拟局域网(VLAN)。其主要特点:
| 特性 | 说明 |
|---|---|
| P2P 直连 | 设备之间尽可能建立直接连接,降低延迟 |
| 端到端加密 | 所有流量使用 256 位加密 |
| 跨平台支持 | 支持 Windows、macOS、Linux、iOS、Android 等 |
| 免费额度 | 免费版支持最多 25 个设备 |
| 开源 | 核心代码开源,支持私有部署 |
2. 核心概念
- Network ID:16 位十六进制字符串,用于标识一个虚拟网络
- Node ID:10 位十六进制字符串,每个 ZeroTier 客户端的唯一标识
- Planet:ZeroTier 官方根服务器,用于节点发现和初始连接
- Moon:用户自建的中继服务器,可加速特定区域的连接
- Managed IP:ZeroTier 网络分配给设备的虚拟 IP 地址
3. 适用场景
- 远程访问家庭或办公室内网设备
- 多地服务器组建内网集群
- 游戏联机(模拟局域网)
- 远程办公访问公司内部资源
- IoT 设备安全互联
二、环境准备
1. 系统要求
- 操作系统:Ubuntu 18.04 / 20.04 / 22.04 / 24.04 LTS
- 权限:需要 root 或 sudo 权限
- 网络:能够访问互联网(安装时需要)
2. 注册 ZeroTier 账号
在安装客户端之前,建议先注册 ZeroTier Central 账号并创建网络:
- 访问 my.zerotier.com
- 注册账号(支持 Google、GitHub 等第三方登录)
- 登录后点击
Create A Network创建网络 - 记录生成的 Network ID(16 位字符串,如
d5e04297a16fa690)
提示:ZeroTier Central 免费版支持最多 25 个设备,无需信用卡,无试用期限制。
三、安装 ZeroTier
方法一:官方一键安装脚本(推荐)
ZeroTier 官方提供了便捷的安装脚本,支持大多数 Linux 发行版:
1 | curl -s https://install.zerotier.com | sudo bash |
命令解释:
curl -s:静默模式下载脚本| sudo bash:以管理员权限执行脚本
安装过程说明:
脚本会自动完成以下操作:
- 检测系统类型和版本
- 添加 ZeroTier 官方软件源
- 导入 GPG 签名密钥
- 安装
zerotier-one软件包 - 启动 ZeroTier 服务
预期输出(部分):
1 | *** ZeroTier One Quick Install for Unix-like Systems |
最后一行的 xxxxxxxxxx 是你的 Node ID(10 位),请记录下来。
方法二:GPG 验证安装(更安全)
如果你对安全性有更高要求,可以使用 GPG 验证脚本签名:
1 | curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && \ |
命令解释:
- 第一行:导入 ZeroTier 官方 GPG 公钥
- 第二行:下载安装脚本并验证签名,验证通过后执行
方法三:手动添加软件源安装
如果自动脚本无法使用,可以手动添加软件源:
1 | # 安装依赖 |
注意:请将
noble替换为你的 Ubuntu 版本代号(如jammy对应 22.04,focal对应 20.04)。
四、验证安装与服务管理
1. 检查服务状态
安装完成后,验证 ZeroTier 服务是否正常运行:
1 | sudo systemctl status zerotier-one |
预期输出:
1 | ● zerotier-one.service - ZeroTier One |
看到 active (running) 表示服务正常运行。
2. 查看节点信息
1 | sudo zerotier-cli info |
预期输出:
1 | 200 info xxxxxxxxxx 1.14.0 ONLINE |
输出说明:
200:状态码,表示成功xxxxxxxxxx:你的 Node ID(10 位)1.14.0:ZeroTier 版本号ONLINE:节点在线状态
3. 服务管理命令
1 | # 启动服务 |
五、加入 ZeroTier 网络
1. 加入网络
使用之前记录的 Network ID 加入网络:
1 | sudo zerotier-cli join <Network_ID> |
示例:
1 | sudo zerotier-cli join d5e04297a16fa690 |
预期输出:
1 | 200 join OK |
2. 授权设备
加入网络后,设备默认处于未授权状态。需要在 ZeroTier Central 控制台授权:
- 登录 my.zerotier.com
- 点击进入你的网络
- 在
Members面板找到刚加入的设备(通过 Node ID 识别) - 勾选
Auth?复选框授权该设备 - 可选:在
(short name)输入框为设备命名
3. 验证网络状态
授权后,查看网络连接状态:
1 | sudo zerotier-cli listnetworks |
预期输出:
1 | 200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips> |
输出说明:
| 字段 | 说明 |
|---|---|
d5e04297a16fa690 |
Network ID |
my_network |
网络名称 |
OK |
连接状态(OK 表示已授权并连接) |
PRIVATE |
网络类型(私有网络需要授权) |
ztxxxxxxxx |
虚拟网卡接口名 |
10.147.20.1/24 |
分配的虚拟 IP 地址 |
4. 测试连接
获取网络中其他设备的 Managed IP,使用 ping 测试连通性:
1 | ping -c 4 10.147.20.2 |
预期输出:
1 | PING 10.147.20.2 (10.147.20.2) 56(84) bytes of data. |
六、替换 Planet 文件(私有部署)
如果你使用自建的 ZeroTier 根服务器(Planet),需要替换默认的 planet 文件。
1. 停止 ZeroTier 服务
1 | sudo systemctl stop zerotier-one |
2. 备份原有 planet 文件
1 | sudo cp /var/lib/zerotier-one/planet /var/lib/zerotier-one/planet.bak |
3. 替换 planet 文件
将你的自定义 planet 文件复制到 ZeroTier 配置目录:
1 | # 假设你的 planet 文件在当前目录 |
4. 设置正确权限
1 | sudo chmod 600 /var/lib/zerotier-one/planet |
权限说明:
600:仅 root 用户可读写root:root:文件所有者和组都设为 root
5. 重启 ZeroTier 服务
1 | sudo systemctl restart zerotier-one |
6. 验证 planet 生效
1 | sudo zerotier-cli info |
确认状态为 ONLINE 后,加入你的私有网络:
1 | sudo zerotier-cli join <私有网络ID> |
七、常用命令速查
网络管理
1 | # 查看节点信息 |
节点与连接
1 | # 列出已知的节点(peers) |
服务管理
1 | # 查看服务状态 |
配置文件位置
| 文件/目录 | 说明 |
|---|---|
/var/lib/zerotier-one/ |
ZeroTier 数据目录 |
/var/lib/zerotier-one/identity.public |
节点公钥 |
/var/lib/zerotier-one/identity.secret |
节点私钥(重要,请备份) |
/var/lib/zerotier-one/planet |
根服务器配置 |
/var/lib/zerotier-one/networks.d/ |
已加入网络的配置 |
八、故障排查
1. 服务无法启动
检查步骤:
1 | # 查看详细错误日志 |
常见原因:
- 端口 9993 被占用
- 配置文件损坏
- 权限问题
2. 加入网络后状态显示 ACCESS_DENIED
原因:设备未在 ZeroTier Central 授权。
解决方案:
- 登录 my.zerotier.com
- 进入对应网络的管理页面
- 在 Members 面板勾选设备的
Auth?复选框
3. 设备之间无法 ping 通
检查步骤:
1 | # 确认网络状态为 OK |
常见原因:
- 设备未授权
- 防火墙阻止了 ZeroTier 流量
- 路由配置问题
解决方案(放行防火墙):
1 | # UFW 防火墙 |
4. P2P 直连失败,延迟很高
检查节点连接类型:
1 | sudo zerotier-cli listpeers |
输出中 RELAY 表示通过中继连接,DIRECT 表示 P2P 直连。
常见原因:
- NAT 类型严格(对称 NAT)
- 防火墙阻止 UDP 打洞
- 网络环境复杂
优化建议:
- 尝试在路由器开放 UDP 9993 端口
- 自建 Moon 中继服务器加速连接
- 检查是否有 VPN 或代理干扰
5. 替换 planet 后无法连接
检查步骤:
1 | # 确认 planet 文件权限 |
解决方案:
- 确认 planet 文件格式正确
- 确认私有根服务器可访问
- 尝试恢复官方 planet:
sudo cp /var/lib/zerotier-one/planet.bak /var/lib/zerotier-one/planet
九、卸载 ZeroTier
如需完全卸载 ZeroTier:
1 | # 离开所有网络 |
警告:删除
/var/lib/zerotier-one目录会丢失节点身份(Node ID),重新安装后将获得新的 Node ID。如需保留身份,请备份identity.secret文件。
总结
通过本教程,你已经完成了 ZeroTier 的完整配置:
- 安装部署:使用官方脚本快速安装 ZeroTier
- 网络接入:创建网络、加入网络并完成设备授权
- 私有部署:替换 planet 文件连接自建根服务器
- 运维管理:掌握常用命令和故障排查方法
ZeroTier 提供了简单易用的异地组网解决方案,配合 P2P 技术可以实现低延迟的设备互联。对于更复杂的需求,可以考虑自建 Moon 中继服务器或完整的私有化部署。