news 2026/9/10 15:14:52

ZeroTierOne Windows 服务:从注册到入网的完整实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZeroTierOne Windows 服务:从注册到入网的完整实战指南

ZeroTierOne Windows 服务:从注册到入网的完整实战指南

【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne

ZeroTierOne 是一个把不同网络的机器组成同一个二层局域网的开源虚拟网络项目,它在 Windows 上以 ZeroTierOneService 后台服务的形式运行。装完服务却发现状态是"未启动"?先确认你有没有用管理员权限跑安装;join 网络失败?先查 TAP 虚拟网卡驱动有没有装上。整条链路其实就三层:服务向系统注册、虚拟网卡出现在系统里、节点真正 join 进网络。

三步把服务跑通

第一步,让服务注册进系统。用官方安装包时这一步是自动完成的,底层逻辑可以看仓库里的 ServiceInstaller.cpp;自己从源码构建的话,需要向 SCM(Windows 统一管理所有后台服务的总控台)手动注册。

第二步,让 TAP 虚拟网卡出现。Windows 网卡驱动在 windows/TapDriver6/ 目录,关键文件是 zttap300.inf。装完后在网络连接列表里应能看到 "ZeroTier One" 网卡,没有的话后面 join 一定失败。

第三步,join 网络。以管理员身份打开命令行:

sc query ZeroTierOneService zerotier-cli list zerotier-cli join <16位网络ID>

先查服务状态,再列节点信息,最后入网。list 没有任何返回说明服务没起来,报权限错说明你没以管理员身份执行,别跳这一步直接重试。

服务注册时系统里发生了什么

服务的核心参数全部集中在 ZeroTierOneService.h 顶部的一组宏里,六行值得看一遍:

#define ZT_SERVICE_NAME "ZeroTierOneService" #define ZT_SERVICE_DISPLAY_NAME "ZeroTier One" #define ZT_SERVICE_START_TYPE SERVICE_AUTO_START #define ZT_SERVICE_DEPENDENCIES "" #define ZT_SERVICE_ACCOUNT NULL // 以 LocalSystem 运行 #define ZT_SERVICE_PASSWORD NULL

第一行是命令行用的服务名,第二行是 services.msc 里显示的标题,第三行决定开机后自动拉起,依赖为空说明它不依赖其他服务,账户为 NULL 表示以系统 LocalSystem 身份跑,权限足够做网卡操作。

真正的注册动作在 InstallService 里:先用 GetModuleFileName 取当前 exe 的绝对路径,外加一对引号防路径带空格,再创建独立进程型服务并写入描述。核心调用链如下:

schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE); schService = CreateService(schSCManager, pszServiceName, pszDisplayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, dwStartType, /* ... */); // ... 省略,完整逻辑见下方文件

如果 OpenSCManager 返回 NULL,你会看到 "OpenSCManager failed" 这个报错,90% 的情况就是没给管理员权限,换权限重跑即可。

服务崩溃后它怎么自己爬起来

很多人以为服务装完就一劳永逸,实际上 ZeroTierOne 服务内嵌了一个自愈循环。在 ZeroTierOneService.cpp 的 threadMain 里有个 restart_node 标签:节点返回不可恢复错误时,写一条 Application 事件日志、睡 5 秒,然后回到标签处重建 OneService 实例。

有个特殊情况值得记住:身份冲突(IDENTITY_COLLISION,即两台机器用了同一身份)时,服务不会卡死,而是把旧的 identity.secret 改名存为 identity.secret.saved_after_collision,删掉旧身份重新生成。所以你如果某天发现节点 ID 变了,先去主目录找这个备份文件,里面存着原来的身份。

主目录默认是 C:\ProgramData\ZeroTier\One\,OnStart 支持用第一个参数覆盖它。这个口子对调试很有用,多个实例各开一个目录就能互不干扰。

驱动装不上或网卡消失的排查顺序

TAP 驱动有问题时,按这个顺序查,不用乱翻:

  1. 确认安装过程全程以管理员身份运行,驱动签名校验失败大多栽在这
  2. 设备管理器里找带黄色感叹号的网卡,有就手动指定 zttap300.inf 重新装
  3. 还不行就翻 Application 事件日志,服务侧的错误都通过 WriteEventLogEntry 写在这里

卸载方向同理:UninstallService 会先停服务、轮询等 STOP_PENDING 状态结束、再调用 DeleteService 删注册信息。如果报 "DeleteService failed (is service running?)",说明停止没走完,手动 sc stop 一次再卸载。

不想装服务时:前台调试跑法

如果你只是想把 ZeroTierOne 跑起来验证功能,有个更轻的路子:跳过服务注册,直接前台跑 exe。windows/README.md 里的例子可以直接抄:

MSBuild ZeroTierOne.sln /property:Configuration=Release /property:Platform=x64 .\zerotier-one_x64.exe -p9994 -C C:\zt_home\

再起一个窗口,让 CLI 指向同一端口和同一主目录:

zerotier-cli.bat -p9994 -D"C:\zt_home" join <网络ID>

注意 -p 和 -D 两个参数必须与前台进程完全一致,端口或目录错一个,CLI 就会去敲一个不存在的实例,表现为"无响应"。

进阶:控制器配置和网络策略的文档入口

服务跑通只是入口。想继续深入控制器(controller,负责网络成员和权限仲裁的服务端)、网络策略和 CLI 全量参数,仓库里的 doc/zerotier-one.8.md 是最完整的参考;遇到具体兼容性问题,建议直接去项目的 Issue 区搜一下,Windows 驱动类问题那里沉淀得最多。

【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 15:14:51

中医舌象AI诊断系统:多模型协同Web应用实战

简介&#xff1a;这是一套面向计算机、电子信息及中医药信息化方向学习者的中医舌象智能分析Web应用完整开发方案&#xff0c;聚焦舌色、苔色、薄厚、腻否四维分类诊断&#xff0c;适用于课程设计、期末大作业与毕业设计参考。资源包含85个文件&#xff0c;以22个Python后端核心…

作者头像 李华
网站建设 2026/9/10 15:14:30

AI编程新范式:从截图到多模态输入的实践指南

最近这两个月&#xff0c;我写代码养成了一个新习惯&#xff1a;遇到报错先截图&#xff0c;而不是复制粘贴那几百行密密麻麻的日志。起因是有一次调一个前端布局问题&#xff0c;那段报错信息又长又绕&#xff0c;我复制粘贴给AI代码助手&#xff0c;它回我一句“请提供更多上…

作者头像 李华
网站建设 2026/9/10 15:13:05

WeChatMsg微信聊天记录导出指南:从克隆仓库到CSV导出只需5分钟

WeChatMsg微信聊天记录导出指南&#xff1a;从克隆仓库到CSV导出只需5分钟 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/9/10 15:12:10

Linux文件系统核心机制与主流类型深度解析

1. Linux文件系统概述在Linux系统中&#xff0c;文件系统是操作系统用来组织、存储和管理文件数据的基础架构。与Windows系统不同&#xff0c;Linux采用单一目录树结构&#xff0c;所有设备、分区和网络资源都挂载在这个统一的目录树下。这种设计理念源于Unix哲学&#xff0c;使…

作者头像 李华