ZeroTier 虚拟组网指南:三步让异地设备 P2P 直连,不再需要公网 IP
【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne
公司内网要连家里的 NAS,两台机器都在 NAT 后面,都没有公网 IP——按传统做法,这事基本走到头。ZeroTier One 是一个开源的虚拟组网客户端,它用 P2P 直连技术把不同地点的设备叠到同一个虚拟以太网交换机上,接进来就能互相 ping 通,就像插在同一个局域网的交换机里。
它替你干了什么:NAT 自动打洞、zt0 虚拟网卡与端到端加密
它替你做了四件事,你只需要提供一个 16 位网络 ID:
- 身份:首次启动替你生成唯一的 10 位节点地址和 ECC-256 密钥对
- 连通:自动做 NAT 穿透,P2P 直连成功就走直连,直连不成才降级走中继
- 网卡:把网络呈现为系统里的本地 zt0 接口,现有软件不用改一行配置
- 加密:所有流量端到端加密,密钥只在你手里
整条链路用白话讲:节点启动时读取本地身份,向网络控制器报到;控制器把成员名单和访问控制规则下发给每个节点;节点之间再用 UDP 互相试探、建加密通道;之后以太网帧加密后经这条通道直发,虚拟网卡把它注入你的系统。核心逻辑在仓库的 node/ 目录。
🚀 三步跑起来:启动 zerotier-one 加入第一个网络的完整步骤
从零到有可用 zt0 接口,五条命令:
sudo apt install zerotier-one—— 装好服务包(其他系统装官方包),同时配好守护进程单元sudo systemctl start zerotier-one—— 启动守护进程;首次启动会生成节点身份,弱机器因抗 DDoS 工作量证明要等十几秒,属正常现象sudo zerotier-cli listnetworks—— 确认服务活着,列表为空很正常,你还没加入任何网络sudo zerotier-cli join 9xxxxxxx…—— 用 16 位网络 ID 加入,本地 zt0 接口随之拉起并自动拿到 IPip addr show zt0—— 看到分配的地址,再 ping 同网成员通,说明直连已建立
不经 systemd、手动拉起守护进程时用sudo zerotier-one -d,自定义端口和工作目录写成sudo zerotier-one -d -p12345 /custom/dir。最常用参数速查:
| 参数 | 作用 |
|---|---|
-d | fork 到后台,以守护进程方式运行 |
-p<port> | 改绑主服务端口,默认 9993,本地 JSON API 就开在这个端口 |
-U | 允许非特权用户运行,专为只跑网络控制器的场景 |
<工作目录> | 结尾参数,默认 Linux 上是 /var/lib/zerotier-one |
-i/-q | 以 zerotier-idtool / zerotier-cli 身份运行同一二进制 |
工作目录文件清单:identity.secret 备份与节点迁移指南
工作目录里的文件平时不用翻,只在四个时机才需要碰,细节可对照 doc/zerotier-one.8.md:
首次启动时生成
identity.secret—— 完整身份,含 10 位地址和私钥;丢了,这台机器的 ZeroTier 地址就换了,各网络的成员白名单都得重配identity.public—— 地址加公钥,给别人验证你用的;丢了无妨authtoken.secret—— 本地 JSON API 的访问令牌;丢了 API 调不动,重启会自动生成新的zerotier-one.port—— 记录当前端口;重启重建
日常运维会看
networks.d/—— 已加入网络的配置缓存;touch一个空的<网络ID>.conf就能预配置开机自动加入iddb.d/—— 60 天内见过的对端公钥缓存,可删,重建后重连会变慢
迁移节点才动
- 把
identity.secret拷到新机器即完成节点搬家;devicemap记住 ztN 接口号与网络的映射,保证重启后名字不飘
开了控制器才有
controller.db是 SQLite3 数据库,controller.db.backup每 5 分钟滚动备份;备份就拷后者,它才是可安全拷贝的那份
authtoken.secret 权限管理:ZeroTier 安全三原则
如果只记三件事:
- identity.secret 当密码对待—— 它含私钥,拿到的人能在任何网络里冒充你的设备。反例:图省事把它传到群聊或网盘同步。
- 工作目录放持久化存储并定期备份—— 别指向会被清理的临时目录。反例:拿 /tmp 当工作目录,重启后地址全丢、网络里出现"新设备"。
- API 和控制器不暴露—— JSON API 只监听 127.0.0.1,控制器单独实例部署。反例:生产控制器和普通节点混跑,9993 端口对公网开放。
其余细节(收紧 authtoken.secret 读权限、同一份 identity 别同时拷给多台机器)都归同一原则:泄露密钥的文件一旦外流,网络等于裸奔。
🔁 多实例与预配置网络:进阶玩法和踩坑提示
- 场景:同机多实例:做法:
-p换端口加独立工作目录;但单个实例本就能加入任意多个网络,一般用不上 - 场景:批量部署节点:做法:在 networks.d/ 预置空
<网络ID>.conf实现开机自动加入;成员很多时按业务分区拆网,别全塞进一个大网 - 场景:首次启动卡在"生成身份":做法:弱性能设备上抗 DDoS 证明要十秒以上,只会发生一次,别反复重启
- 场景:退出不用的网络:做法:
zerotier-cli leave <网络ID>,同时清掉 networks.d/ 里的对应缓存 - 场景:跑专用控制器:做法:
-U降权运行,独立 controller.db 定期备份 backup 文件,别和节点混部署
回到开头那个痛点:NAT 后面没公网 IP,以前只能打洞失败、转发端口二选一,现在多装一个守护进程就够了。下一步建议:挑一台最常要连的机器加入同一个网络,用zerotier-cli peers确认链路状态后再把它纳入日常使用。
【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考