news 2026/9/13 18:29:05

ZeroTier One 版本发布说明深度解读:从 1.2 到 1.16 的关键演进与配置实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZeroTier One 版本发布说明深度解读:从 1.2 到 1.16 的关键演进与配置实战

ZeroTier One 版本发布说明深度解读:从 1.2 到 1.16 的关键演进与配置实战

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

本篇技术指南以仓库根目录的 RELEASE-NOTES.md 为骨架,逐版本梳理 ZeroTier One 从 1.2 到 1.16 的核心更新,并结合node/service/include/等目录下的真实源码,讲清每个特性在代码中的落点——例如ZT_MAX_NETWORK_SPECIALISTS容量上限、enableMetricsencryptedHelloEnabled两个local.conf开关、多线程包 I/O 与 multipath 的实现位置。读完本文,你将能够对照源码理解各版本更新背后的设计意图,并直接上手配置 1.16 系列引入的新选项。

版本总览:ZeroTier One 的发布节奏

从 RELEASE-NOTES.md 可以看出,ZeroTier One 的 1.x 主线大致分为三个阶段:

  • 1.2.x(2017 年):奠定现代架构,引入规则引擎、联邦根(federated roots)、multipath 前身的多路径选择。
  • 1.4.x – 1.6.x(2019 – 2021 年):引入 multipath 正式支持、DNS 推送、AES-GMAC-SIV 加密模式、Apple Silicon 支持,并完成从 GPL3 到 BSL 1.1 的许可证变更。
  • 1.8.x – 1.16.x(2021 年至今):SSO/OIDC 完善、低带宽模式、Prometheus 指标、多线程包 I/O、HELLO 包加密、网络特定中继,以及 1.16.0 的 MPL 许可证重构。

官方在 1.10.2 的说明中明确提到“大部分开发精力已投入 2.0 版本”(Most of our dev effort is going into version 2),因此 1.x 的更新更多是稳定性修复与 2.0 特性回移(back-port)。

1.16.2:容量上限翻倍与安装修复

发布于 2026-05-20 的 1.16.2 是当前最新版本,核心变化如下:

ZT_MAX_NETWORK_SPECIALISTS从 256 提升到 512

当网络中配置了过多的“特殊节点”(active bridges、multicast replicators、always-contact 地址等)时,旧上限 256 会导致配置溢出。该版本将其翻倍至 512,并同步提升了网络配置字典(network config dictionary)的容量。

源码落点非常清晰:宏定义位于 include/ZeroTierOne.h 的#define ZT_MAX_NETWORK_SPECIALISTS 512,而在 node/NetworkConfig.cpp 与 node/NetworkConfig.hpp 中,activeBridges()multicastReplicators()alwaysContactAddresses()三个访问器都以该宏为数组边界,specialists[ZT_MAX_NETWORK_SPECIALISTS]直接决定每份网络配置的内存布局。提升宏值即可让大型网络的 specialists 配置全部生效,避免被静默截断。

其他修复

  • Windows ARM x64 安装:修复zttap300.inf的换行符问题。该驱动安装描述文件位于 windows/TapDriver6/zttap300.inf,与 1.12.0 引入的实验性 Windows ARM64 支持一脉相承。
  • Central Controller (CV1) 内部更新:包含 schema 变更与多架构 Docker 构建流水线,对应仓库中的 ext/central-controller-docker 目录及其迁移脚本migrations/*.sql
  • Windows 下切换网络延迟问题:修复从离开一个网络到加入另一个网络时偶发的数分钟级卡顿。
  • 编译器告警清理:覆盖 GCC 14、Clang 18、Clang 21 三个工具链。

1.16.1:指标采集默认关闭

1.16.1(2025-12-22)最重要的行为变更是:Metrics 收集默认关闭,需在local.conf中显式设置"enableMetrics": true开启。同时修复了 daemon 模式下指标不记录、以及 debug dumpfile 被写到根目录的问题。

在 service/OneService.cpp 中可以找到精确的读取逻辑:

bool enableMetrics = OSUtils::jsonBool(settings["enableMetrics"], false); if (enableMetrics) { ... }

默认值false与发布说明一致。开启后,Prometheus 兼容指标会输出到 home 目录下的metrics.prom文件(见 service/OneService.cpp 与 service/OneService.cpp 中对metrics.prom的写入)。该能力最早在 1.12.0 引入,1.16.1 起改为白名单式开启以降低默认开销。

一个完整的local.conf参考结构(完整字段说明见 service/README.md):

{ "settings": { "enableMetrics": true, /* 收集指标到 metrics.prom */ "encryptedHelloEnabled": false, /* HELLO 包加密,1.16.0 新增 */ "lowBandwidthMode": false, /* 低带宽模式,1.10.3 引入 */ "forceTcpRelay": false, /* 强制 TCP 中继,1.10.3 引入 */ "primaryPort": 9993, "portMappingEnabled": true } }

此外,1.16.1 还包含 Mac 与 BSD 的 tun/tap 代码小幅修复。

1.16.0:许可证重构与新中继架构

1.16.0(2025-08-21)是近几年轻量版本中变化最大的一次发布。

许可证:核心 MPL,控制器转为商用源码可用

  • 核心(node/include/)及服务(service/osdep/)改为Mozilla Public License (MPL),对应仓库根目录的 LICENSE-MPL.txt。
  • 网络控制器(controller/)改为商业源码可用许可,其实现位于 nonfree/controller(EmbeddedNetworkController.cppFileDB.cppPostgreSQL.cpp等)。
  • 默认二进制构建不再包含控制器;如需构建非 MPL 组件,使用:
make ZT_NONFREE=1

按发布说明,使用ZT_NONFREE=1构建出的可执行文件许可证会从 MPL 变为专有商业许可。仓库中 objects-nonfree.mk 与 nonfree/CMakeLists.txt 即为非 MPL 组件的构建入口。

网络特定中继(Network-Specific Relays,预览/测试)

这是 1.16.0 最值得关注的功能:可以指定一个或多个节点作为某特定网络的专属中继,当网络成员之间的流量需要中继时,优先走这些网络特定中继而不是全局根服务器(roots)。关键设计点是:这些中继节点不一定是该网络的成员

从源码结构看,该能力已进入核心拓扑逻辑——node/Topology.hpp 中出现了network preferred relay的判断注释(True if this is a root server or a network preferred relay from one of our networks),说明中继选择路径已在 Topology 层落地。官方明确表示:Moons(自建根)进一步被降级为“更加弃用”,新部署不应再使用;网络特定中继在更多用户实测与内部验证完成前仍属预览特性。

HELLO 包加密:encryptedHelloEnabled

HELLO 包是节点握手时的首个数据包。1.16.0 提供可选加密,通过local.confencryptedHelloEnabled开启:

{ "settings": { "encryptedHelloEnabled": true } }

读取代码位于 service/OneService.cpp:

_node->setEncryptedHelloEnabled(OSUtils::jsonBool(settings["encryptedHelloEnabled"], false));

发布说明指出:HELLO 包本身不含业务数据,只携带公钥与极少量元数据(如协议版本号)。大多数用户无需开启;若因合规等原因需要,可开启,代价是 HELLO 握手阶段少量 CPU 与带宽开销。

小修复与工程化

  • 全库改用clang-format统一格式,仓库中.clang-format定义与make clang-format目标可一键格式化所有核心与服务 C++ 文件。
  • 网桥不再计入组播(multicast)上限,且组播会发送给所有网桥——对应 PR #2477,逻辑位于 node/Multicaster.cpp 的activeBridges处理。
  • 修复 multipath 场景下桥接流量的一条流标识(flow designation)问题。
  • OIDC 等库版本升级;出于预防性考虑删除陈旧未用的软件更新代码。
  • 新增 OpenTelemetry 支持(Central Controllers),相关依赖位于 ext/opentelemetry-cpp-api-only。
  • 支持从 Docker 环境变量注入local.conf内容(PR #2445),对应 ext/central-controller-docker/main.sh 中的配置生成逻辑。

1.14 系列:多线程包 I/O 与 multipath 打磨

1.14.1:Linux 多线程包 I/O

1.14.1(2024-09-12)引入多线程包 I/O,目前仅限 Linux,且必须在local.conf中启用。官方评估:该特性对“CPU 是瓶颈且追求高吞吐”的小型多核设备收益最大。难点在于保持报文顺序负载均衡的平衡,这也是它暂不默认开启、需充分测试的原因。同时该版本向网络控制器上报节点平台信息(OS、CPU 架构),便于网络管理员查看并用于未来的策略检查与资产盘点。

1.14.0 与 1.14.2

  • 1.14.0:Linux 高负载下 I/O 性能改进、multipath 改进、修复离线一段时间后的端口重绑定“coma”问题、修复规则引擎歧义(GitHub Issue #2200)、控制器 API 支持节点名称与元数据。
  • 1.14.2:修复 macOS Sequoia 缺失 entitlement、修复local.conf中低带宽模式解析问题。

更早版本的关键演进回顾

1.12.x:指标与 ARM64

  • 1.12.0:实验性 Windows ARM64 支持、macOS 休眠/唤醒修复、Prometheus 兼容指标(即后续metrics.prom的源头)、Linux 10–30% 提速。
  • 1.12.1/1.12.2:Linux 端口绑定修复;macOS 全隧道模式改进与网络设置变更后更快恢复。

1.10.x:低带宽模式、forceTcpRelay 与 multipath 成熟

  • 1.10.2:multipath 的 CLI 输出改进、balance-aware 模式、自定义策略、链路质量测量优化。
  • 1.10.3:新增low-bandwidth modeforceTcpRelay(可选)。二者在源码中均有对应:config.lowBandwidthMode的赋值见 service/OneService.cpp,forceTcpRelay的解析见 service/OneService.cpp——其中还包含一条重要约束:forceTcpRelay 与 multipath(bond)不能同时使用,若同时启用会打印警告并自动禁用 forceTcpRelay(forceTcpRelay cannot be used with multipath)。TCP 中继本身受allowTcpFallbackRelay控制(默认 true)。
  • 1.10.4:Windows 安全修复(见下文)。
  • 1.10.5/1.10.6:Windows 高 CPU 修复、macOS 临时 IPv6 地址绑定预防、路径学习环路预防。

1.8.x:SSO/OIDC 与“coma”问题攻坚

1.8 系列围绕 SSO/OIDC 做了大量修复(1.8.9 修复“幽灵”包认证失败、SSO 内存泄漏、节点证书推送失败、离开 SSO 网络死锁等),同时在 1.8.0 引入次级端口自动重绑定机制:当 NAT/路由器异常导致服务长时间离线时,ZeroTier 会分配新的次级端口(除非在local.conf中手动指定),这是对“connection coma”问题的持续对抗。1.8.1 起 Windows 7 不再受支持。

1.6.x:AES-GMAC-SIV、multipath 与 Apple Silicon

1.6.0 是从 2.0 分支回移特性的“大版本”:

  • AES-GMAC-SIV 加密模式:在支持 AES 加速的硬件(几乎所有 x86-64、多数 ARM64)上比旧的 Salsa20/12-Poly1305 更快且安全性更优,基于 AES-SIV 实现并经过 Trail of Bits 审计。已知限制:32 位 ARM、PowerPC、MIPS 暂不支持硬件 AES 加速。
  • Multipath 正式支持:模式借鉴 Linux 内核 bonding 驱动,含 active-passive 与 active-active,支持快速故障切换与负载均衡。bond 相关实现位于 node/Bond.cpp 与 node/Bond.hpp。
  • DNS 配置推送:控制器可向节点推送 DNS 配置,节点侧可本地配置是否允许(对应 JSON API 中/network/<id>allowDNS可写字段,见 service/README.md)。
  • Apple Silicon 原生支持:通过 universal binary 提供 macOS ARM64 支持。

1.4.x 与 1.2.x:规则引擎与路径选择重构

  • 1.4.0:macOS 不再依赖内核扩展(改用 feth 接口)、并发多路径、底层 QoS 预留;1.4.4 起许可证从 GPL3 改为 BSL 1.1。
  • 1.2.6:路径选择大改、远程追踪(remote tracing)、指定组播复制器、ARM NEON 加密加速;1.2.4 集成 supercop 的 Salsa20/12 汇编实现(x86-64 最高 2 倍加密加速);1.2.0 引入规则引擎(distributed network packet filtering,对应仓库的 rule-compiler 目录)与联邦根(federated roots,即moons.d/)。

安全相关更新汇总

发布说明中值得重点记录的安全条目:

  • 1.10.4(Windows):修复服务工作目录文件权限问题,未授权本地用户可能读取特权文件并管理本地实例;不可远程利用,仅影响 Windows。
  • 1.8.8(Windows):修复安装器中本地提权漏洞。
  • 1.6.6:回移 COM 哈希检查,缓解网络成员冒充。
  • 1.8.1:进一步加强对网络内地址冒充的防御。
  • 1.2.12:修复控制 API 无效 URL 可能导致的崩溃(需管理员权限,不可利用)。

升级建议:Windows 用户应至少升级至 1.10.4 以规避本地权限问题,所有平台用户建议跟踪 1.16 系列以获得最新修复。

结语:如何对照源码继续深入

本文所有结论均可在当前仓库中验证:

  • 版本变更总览:RELEASE-NOTES.md
  • local.conf完整字段与 JSON API 说明:service/README.md
  • specialists 上限与网络配置结构:include/ZeroTierOne.h、node/NetworkConfig.hpp、node/NetworkConfig.cpp
  • 配置解析与服务主循环:service/OneService.cpp
  • 中继/拓扑选择逻辑:node/Topology.hpp、node/Switch.cpp
  • 非 MPL 控制器组件:nonfree/controller

对于 1.16 系列的运维者,实操清单是:确认ZT_MAX_NETWORK_SPECIALISTS扩容是否解决大型网络 specialists 截断;按需在local.conf开启enableMetricsencryptedHelloEnabled;新部署避免使用 Moons,关注网络特定中继的后续正式化进展;Linux 多核低端设备可尝试启用多线程包 I/O 观察吞吐变化。

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

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

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

工业级智能系统芯片组合设计:五颗关键器件协同方案

1. 这不是芯片清单&#xff0c;而是一套能落地的工业级智能系统骨架你手头这张芯片列表——TLE7272-2D、GD32F427VGT6、STM32F417ZGT6、MCP4631-503E/ST、GRX350A3BC160——表面看是五颗独立器件&#xff0c;但实际是一套经过工程验证的“感知-控制-执行-通信-供电”闭环系统设…

作者头像 李华
网站建设 2026/9/13 18:20:27

YASA实战:用Python对多导睡眠图进行自动睡眠分期与事件检测

简介&#xff1a;面向睡眠科研与脑电数据分析人员的 YASA 睡眠分析工具箱资源包&#xff0c;定位为可直接安装使用的 Python 源码项目。YASA 支持多导睡眠图自动分期、纺锤波/慢波/快速眼动事件检测、伪影剔除&#xff0c;以及频谱、相位幅度耦合与 1/f 斜率等分析&#xff0c;…

作者头像 李华