NetBird 是覆盖网络软件:隧道用 WireGuard,公钥、地址和访问规则由管理服务分发。截至 2026-10-12,最新正式标签是 v0.80.0(2026-10-01)。带 canary 的标签不在本文范围内。本文不含安装步骤。

NetBird 是什么

一个可独立引用的定义句:NetBird 是建在 WireGuard 之上的覆盖网络平台;客户端管理隧道,管理服务保存网络状态,并把公钥、地址和访问规则发给获准互访的对端。

v0.80.0 的 README 把产品写成两件事合在一处:少做手工配置的对等私网,加上集中的访问控制。数据面句子写的是 “WireGuard-based overlay network”。WireGuard 本身的隧道模型见 WireGuard 与 OpenVPN。

WireGuard 不是 IETF RFC。NetBird 的管理、信令和中继也没有一份独立的 IETF 规范。下面的组件分工来自文档,不是 RFC 编号。

沿革与维护者

GitHub 仓库 netbirdio/netbird 的创建时间是 2021-04-14。官方博客 Wiretrustee becomes NetBird 宣布产品改名,并写明 2022-03-26 起网站、博客和文档改到 netbird.io,仓库改挂到 netbirdio 组织。博客点名迁移的仓库是 wiretrustee 与 wiretrustee-dashboard。

v0.80.0 根目录 LICENSE 的版权行是 Copyright (c) 2022 NetBird GmbH & AUTHORS。README 另有一句:2022 年 11 月,NetBird 加入德国联邦教育与研究部资助的 StartUpSecure 计划,并与 CISPA 亥姆霍兹信息安全中心一起被写进这句。这是 README 的自我介绍。本文没有核对资助合同。

本次读取的贡献计数中,mlsmaycon 为 670,pascal-fischer 为 564,lixmal 为 520,braginini 为 443,pappz 为 410。计数会随新提交变化,不能单独证明职务。本文没有把这些登录名写成法律姓名。

第三方商业登记摘录把法律名称从 Wiretrustee UG 改为 NetBird GmbH 的日期写成 2024-10-29。本文没有核对柏林夏洛滕堡法院的原始登记簿,因此不收录董事名单,也不把版权行里的 “2022 NetBird GmbH” 和那份摘录收成同一件事。

v0.80.0 的 go.mod 声明 go 1.26.0,并把工具链钉在 go1.26.7。

许可证:README 和 LICENSE 的例外名单不一致

v0.80.0 根目录 LICENSE 写明:BSD 3-Clause 适用于仓库的其余部分;management/、signal/、relay/ 和 combined/ 适用 GNU AGPL 第 3 版。这四个目录里的 LICENSE 文件都是 AGPL 第 3 版文本。combined/ 在该标签下有 main.go 与 Dockerfile。本文没有通读它的职责说明,也没有逐个源文件核对是否另写了「或任何更新版本」。

同一标签的 README 把例外写成只有 management/、signal/ 和 relay/,没有出现 combined/。页眉徽章仍只写 BSD-3。GitHub 对整仓给出的 SPDX 是 NOASSERTION,与这种分段许可相符。

BSD 3-Clause 允许再分发源码和二进制,条件包括保留版权声明,以及未经书面许可不得用版权人的名字为衍生作品背书。AGPL 第 3 版则带有向网络用户提供对应源码的义务。这是两份许可证文本的差别,不是对项目的评价。两份文本都是 OSI 批准过的许可证类型;分段方式以根目录 LICENSE 为准,README 那句是较短的说法。

管理界面在 README 的功能表里指向另一个仓库 netbirdio/dashboard。本文没有核对那个仓库的许可证。

架构:客户端、管理、信令、中继

How NetBird Works 的页脚写着更新于 2026-10-05,比标签 v0.80.0 晚四天。下表是这一页的组件,不是对 v0.80.0 源码的逐行复核。

组件该页写明的角色
客户端生成 WireGuard 密钥,私钥留在本机;向管理服务注册;接收网络图;建立点对点隧道;把访问规则落到本机防火墙
管理服务登记并认证对端,保存公钥和网络图,分配地址,推送变更,管理访问规则、私有 DNS 和用户
信令服务让对端交换连接候选。该页写明它不存储数据,流量也不经过它
中继服务直连做不到时转发流量。WireGuard 仍是端到端加密,中继看不到明文

管理服务可以是 NetBird 托管的,也可以自己运行。这是该页列出的两种形态,不是对其中一种的建议。

地址来自运营商级 NAT 的地址块 100.64.0.0/10。这个块在 RFC 6598 里划给共享地址空间。文档写明:每个账户在这个块里默认随机得到一个 /16,新对端再从中随机拿一个空闲地址;对端删除后地址立即收回,没有保留期。共享地址空间的一般含义见 CGNAT 是什么。

发现路径用的是 ICE 和 STUN。文档点名的实现是 Pion ICE。ICE 的规范是 RFC 8445,STUN 的现行规范是 RFC 8489。候选地址经信令送给对端。信令消息的正文按该页的写法,用双方私钥与对方公钥推出的共享密钥做端到端加密,并注明是 NaCl 的 box:Curve25519、XSalsa20、Poly1305。信令能看见两边的公钥,从而知道谁在和谁说话,但看不见正文。NAT 穿越的概念背景见 VPN NAT 穿越与打洞。

中继一节同时写了两件事:他们使用开源的 Coturn;自 v0.29.0 起引入基于 WebSocket 的中继,意图替换先前的 TURN。这一页没有写替换已经完成。因此不能把「现在只有 Coturn」或「现在只有 WebSocket」写成定论。

访问规则由客户端执行。该页举例说会用系统上可用的防火墙管理器,例如 nftables。这是举例,不是配置步骤。哪些地址被放进 WireGuard,属于隧道上的路由语义,见 WireGuard AllowedIPs 是什么。

私有 DNS 由客户端里的解析器处理。该页把对端的完全限定域名写在 netbird.cloud 命名空间。这是该句的原话。自己托管时后缀是否不同,这一页没有展开。分离 DNS 的一般概念见 VPN 分离 DNS 是什么。

文档还点名的其他技术

v0.80.0 的 README 写明,项目建立在 WireGuard、Pion ICE 和 Rosenpass 之上。功能表有一行 “Quantum-resistance with Rosenpass”,链接指向 NetBird 自己的一篇知识库文章。本文不转述那篇文章的标题或宣传句,也不展开 Rosenpass 的握手。后量子密钥交换作为更一般的话题,见 VPN 的未来。

同一张功能表把 “Kernel WireGuard” 列为连通性的一项,并把平台从 Linux、macOS、Windows、Android、iOS 一直列到若干路由器、NAS 和容器的文档页。这是功能表。哪些平台实际使用内核模块、哪些使用用户态实现,表本身没有逐项说明,本文也没有复测。

文档中的典型用途

这些是文档里的角色,不是建议选它:

  • 让一批机器组成加密的私网,由管理服务分配地址并分发 WireGuard 公钥。
  • 用组和访问规则限制哪些对端可以互访。规则在客户端执行。
  • 功能表还列出到外部网络的路由和出口节点。那是表上的条目名称。路由如何写进隧道,见 AllowedIPs 一文,这里不给出配置。
  • 直连失败时,由中继转发已经用 WireGuard 加密的包。

它不解析浏览器该走哪个 HTTP 代理,也不实现 IKE。那些是另一类软件,见 HTTP 代理与 VPN 有何不同。

和相关项目差在哪

项目重心与 NetBird 的边界
NetBirdWireGuard 数据面,加上自己的管理、信令和中继客户端不是 Tailscale 客户端
HeadscaleTailscale 控制服务器的自托管实现数据面仍是 Tailscale 客户端上的 WireGuard。见 Headscale 是什么
WireGuard隧道协议不附带这套管理、信令和中继
Nebula证书、分组和 lighthouse数据面不是 WireGuard。见 Nebula 是什么
strongSwanIKE 与内核 IPsec协商的是 RFC 7296 等公开规范,不是 WireGuard。见 strongSwan 是什么

引用时先分开的五件事

  1. 版本:正式标签 v0.80.0 发布于 2026-10-01。架构页更新于 2026-10-05,可能含标签之后的句子。
  2. 许可证:以根目录 LICENSE 的四段 AGPL 例外为准。README 少写了 combined/。
  3. 路径:直连是文档中的常规路径,中继是后备。信令不转发流量。
  4. 中继实现:同一页既写 Coturn,也写自 v0.29.0 起意图替换它的 WebSocket 中继,但没有宣布替换结束。
  5. 公司法律名称的变更日期来自第三方登记摘录,本文没有核对法院原文。

本文只整理公开资料。组网仍然要遵守网络所有者和当地法规的要求;这里不讨论绕过访问控制的做法。

主要资料