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 账号并创建网络:

  1. 访问 my.zerotier.com
  2. 注册账号(支持 Google、GitHub 等第三方登录)
  3. 登录后点击 Create A Network 创建网络
  4. 记录生成的 Network ID(16 位字符串,如 d5e04297a16fa690

提示:ZeroTier Central 免费版支持最多 25 个设备,无需信用卡,无试用期限制。


三、安装 ZeroTier

方法一:官方一键安装脚本(推荐)

ZeroTier 官方提供了便捷的安装脚本,支持大多数 Linux 发行版:

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

命令解释:

  • curl -s:静默模式下载脚本
  • | sudo bash:以管理员权限执行脚本

安装过程说明:

脚本会自动完成以下操作:

  1. 检测系统类型和版本
  2. 添加 ZeroTier 官方软件源
  3. 导入 GPG 签名密钥
  4. 安装 zerotier-one 软件包
  5. 启动 ZeroTier 服务

预期输出(部分):

1
2
3
4
5
6
7
8
9
*** ZeroTier One Quick Install for Unix-like Systems
*** Tested on: Debian, Ubuntu, CentOS, Fedora, RHEL, etc.
***
*** Installing ZeroTier One for your system...
...
*** Enabling and starting zerotier-one service...
*** Waiting for identity generation...

*** Success! You are ZeroTier address [ xxxxxxxxxx ].

最后一行的 xxxxxxxxxx 是你的 Node ID(10 位),请记录下来。

方法二:GPG 验证安装(更安全)

如果你对安全性有更高要求,可以使用 GPG 验证脚本签名:

1
2
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

命令解释:

  • 第一行:导入 ZeroTier 官方 GPG 公钥
  • 第二行:下载安装脚本并验证签名,验证通过后执行

方法三:手动添加软件源安装

如果自动脚本无法使用,可以手动添加软件源:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装依赖
sudo apt update
sudo apt install -y curl gnupg

# 添加 GPG 密钥
curl -fsSL https://download.zerotier.com/debian/zerotier-cli.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/zerotier.gpg

# 添加软件源(Ubuntu 24.04 noble)
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/zerotier.gpg] https://download.zerotier.com/debian/noble noble main" | sudo tee /etc/apt/sources.list.d/zerotier.list

# 安装 ZeroTier
sudo apt update
sudo apt install -y zerotier-one

注意:请将 noble 替换为你的 Ubuntu 版本代号(如 jammy 对应 22.04,focal 对应 20.04)。


四、验证安装与服务管理

1. 检查服务状态

安装完成后,验证 ZeroTier 服务是否正常运行:

1
sudo systemctl status zerotier-one

预期输出:

1
2
3
4
5
● zerotier-one.service - ZeroTier One
Loaded: loaded (/lib/systemd/system/zerotier-one.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-12-09 10:00:00 CST; 1min ago
Main PID: 12345 (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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动服务
sudo systemctl start zerotier-one

# 停止服务
sudo systemctl stop zerotier-one

# 重启服务
sudo systemctl restart zerotier-one

# 设置开机自启
sudo systemctl enable zerotier-one

# 禁用开机自启
sudo systemctl disable zerotier-one

五、加入 ZeroTier 网络

1. 加入网络

使用之前记录的 Network ID 加入网络:

1
sudo zerotier-cli join <Network_ID>

示例:

1
sudo zerotier-cli join d5e04297a16fa690

预期输出:

1
200 join OK

2. 授权设备

加入网络后,设备默认处于未授权状态。需要在 ZeroTier Central 控制台授权:

  1. 登录 my.zerotier.com
  2. 点击进入你的网络
  3. Members 面板找到刚加入的设备(通过 Node ID 识别)
  4. 勾选 Auth? 复选框授权该设备
  5. 可选:在 (short name) 输入框为设备命名

3. 验证网络状态

授权后,查看网络连接状态:

1
sudo zerotier-cli listnetworks

预期输出:

1
2
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks d5e04297a16fa690 my_network 5e:xx:xx:xx:xx:xx OK PRIVATE ztxxxxxxxx 10.147.20.1/24

输出说明:

字段 说明
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
2
3
4
5
6
7
8
PING 10.147.20.2 (10.147.20.2) 56(84) bytes of data.
64 bytes from 10.147.20.2: icmp_seq=1 ttl=64 time=15.2 ms
64 bytes from 10.147.20.2: icmp_seq=2 ttl=64 time=12.8 ms
64 bytes from 10.147.20.2: icmp_seq=3 ttl=64 time=11.5 ms
64 bytes from 10.147.20.2: icmp_seq=4 ttl=64 time=10.9 ms

--- 10.147.20.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms

六、替换 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
2
# 假设你的 planet 文件在当前目录
sudo cp ./planet /var/lib/zerotier-one/planet

4. 设置正确权限

1
2
sudo chmod 600 /var/lib/zerotier-one/planet
sudo chown root:root /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
2
3
4
5
6
7
8
9
10
11
# 查看节点信息
sudo zerotier-cli info

# 加入网络
sudo zerotier-cli join <Network_ID>

# 离开网络
sudo zerotier-cli leave <Network_ID>

# 列出已加入的网络
sudo zerotier-cli listnetworks

节点与连接

1
2
3
4
5
# 列出已知的节点(peers)
sudo zerotier-cli listpeers

# 查看与特定节点的连接状态
sudo zerotier-cli peer <Node_ID>

服务管理

1
2
3
4
5
6
7
8
# 查看服务状态
sudo systemctl status zerotier-one

# 重启服务
sudo systemctl restart zerotier-one

# 查看服务日志
sudo journalctl -u zerotier-one -f

配置文件位置

文件/目录 说明
/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
2
3
4
5
# 查看详细错误日志
sudo journalctl -u zerotier-one --no-pager -n 50

# 检查端口占用(ZeroTier 默认使用 UDP 9993)
sudo ss -ulnp | grep 9993

常见原因:

  • 端口 9993 被占用
  • 配置文件损坏
  • 权限问题

2. 加入网络后状态显示 ACCESS_DENIED

原因:设备未在 ZeroTier Central 授权。

解决方案

  1. 登录 my.zerotier.com
  2. 进入对应网络的管理页面
  3. 在 Members 面板勾选设备的 Auth? 复选框

3. 设备之间无法 ping 通

检查步骤:

1
2
3
4
5
6
7
8
9
10
11
# 确认网络状态为 OK
sudo zerotier-cli listnetworks

# 检查虚拟网卡是否存在
ip addr show | grep zt

# 检查路由表
ip route | grep zt

# 检查防火墙规则
sudo iptables -L -n | grep -i zt

常见原因:

  • 设备未授权
  • 防火墙阻止了 ZeroTier 流量
  • 路由配置问题

解决方案(放行防火墙):

1
2
3
4
5
# UFW 防火墙
sudo ufw allow 9993/udp

# iptables
sudo iptables -A INPUT -p udp --dport 9993 -j ACCEPT

4. P2P 直连失败,延迟很高

检查节点连接类型:

1
sudo zerotier-cli listpeers

输出中 RELAY 表示通过中继连接,DIRECT 表示 P2P 直连。

常见原因:

  • NAT 类型严格(对称 NAT)
  • 防火墙阻止 UDP 打洞
  • 网络环境复杂

优化建议:

  1. 尝试在路由器开放 UDP 9993 端口
  2. 自建 Moon 中继服务器加速连接
  3. 检查是否有 VPN 或代理干扰

5. 替换 planet 后无法连接

检查步骤:

1
2
3
4
5
6
7
8
# 确认 planet 文件权限
ls -la /var/lib/zerotier-one/planet

# 确认服务已重启
sudo systemctl restart zerotier-one

# 查看日志
sudo journalctl -u zerotier-one -f

解决方案:

  • 确认 planet 文件格式正确
  • 确认私有根服务器可访问
  • 尝试恢复官方 planet:sudo cp /var/lib/zerotier-one/planet.bak /var/lib/zerotier-one/planet

九、卸载 ZeroTier

如需完全卸载 ZeroTier:

1
2
3
4
5
6
7
8
9
10
11
# 离开所有网络
sudo zerotier-cli leave <Network_ID>

# 停止服务
sudo systemctl stop zerotier-one

# 卸载软件包
sudo apt purge zerotier-one

# 删除配置和数据(可选,会删除身份密钥)
sudo rm -rf /var/lib/zerotier-one

警告:删除 /var/lib/zerotier-one 目录会丢失节点身份(Node ID),重新安装后将获得新的 Node ID。如需保留身份,请备份 identity.secret 文件。


总结

通过本教程,你已经完成了 ZeroTier 的完整配置:

  • 安装部署:使用官方脚本快速安装 ZeroTier
  • 网络接入:创建网络、加入网络并完成设备授权
  • 私有部署:替换 planet 文件连接自建根服务器
  • 运维管理:掌握常用命令和故障排查方法

ZeroTier 提供了简单易用的异地组网解决方案,配合 P2P 技术可以实现低延迟的设备互联。对于更复杂的需求,可以考虑自建 Moon 中继服务器或完整的私有化部署。

参考资源