继Zerotier之后,想实现更方便的IPV4、IPV6以及Tun透传的网络架构,同时还需要满足免费的需求,这种工具少之又少。大部分是同Zerotier一样的闭源商业软件,此外,它们的服务器几乎都在国外,难以在国内提供服务;此时,有款基于WireGuard的开源零信任组网项目诞生,它就是Netbird,也就是下一代组网的神器。
1. 异地组网架构
为了弥补传统组网方式复杂的VPN配置的不足,由此诞生了一套基于零信任网络的组网方式,它不依赖于原网络架构中的复杂配置关系,而是基于不同的Peer对,组成一个架空的虚拟三层网络,在这个网络中各个节点可以不受限制的互相访问,从而简化的复杂星形网络的配置。
根据不同的组网架构区分,目前最常见的两种组网方式分别为Zerotier
架构与WireGuard
架构
Zerotier
架构基于UDP技术实现动态的Mesh VPN组网,由行星节点+卫星节点以及控制平面组成
控制平面下发不同组网的规则,分配路由以及IP地址至行星节点
客户端通过连接卫星及行星节点后,再获取配置信息
由行星节点参与完成UDP组网发现,完成点对点组网,实现P2P数据传输
由于不支持中继模式,因此在P2P组网成功以前,存在一段时间无法访问
WireGuard
架构与Zerotier不同的是,WireGuard架构的组网模式是开源的,它只有简单的三层VPN穿透配置,每个节点单独维护
由此衍生出了许多基于WireGuard的商用软件,例如:Tailscale、Netmaker、Netbird等,它们几乎都实现了内核态的WireGuard功能
不同于Zerotier,WireGuard架构都需要显式配置并维护每对Peer的参数,从而实现自动组网,因此配置更加复杂
由于是基于L3隧道形式,因此具有更好的安全性以及更加适用企业的VPN场景
2. Netbird概述
官网地址:
2.1 Netbird简介
NetBird 通过 Management、 Signal、 Stun、 Turn 四个后端组件外加一个前端构建出一套完整的零信任组网方案
Management负责管理与维护各个Peer的加密配置与通讯规则
Signal则负责根据不同节点的触发信号分配对应规则的地址
STUN与TURN则参与在未能通过P2P传输时,实现中转传输流量
2.2 部署需求
开放 TCP 端口
80
,443
,33073
,10000
;开放 UDP 端口
3478
,49152-65535
;一个域名外加 TLS 证书(自动申请)。
2.3 部署流程(自托管)
可以直接连接官网服务器实现网络管理,但由于官网服务器在国外不稳定,需要完成国内自部署,以实现组网功能
官网教程最方便的形式是通过Docker部署,具体流程如下:
# 首先是Linux环境安装docker,然后安装配置jq与curl
sudo yum install jq curl
# 设置环境变量,以及自动安装脚本
export NETBIRD_DOMAIN=netbird.example.com;
curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started-with-zitadel.sh | bash
2.4 中继节点部署
由于Netbird是由控制平面+不同中继节点组成,控制平面提供不同规则配置与认证,而中继节点则提供加速连接,提升P2P连接成功率以及中转传输的功能
中继节点通过Docker部署配置如下所示,需要注意是否使用TLS进行加密传输(这个只是影响websocket是否明文连接,并不影响WireGuard加密结果)
services:
netbird-relay:
image: netbirdio/relay:latest
network_mode: host
environment:
- NB_LISTEN_ADDRESS=:33080
- NB_QUIC_LISTEN_ADDRESS=:33080
- NB_EXPOSED_ADDRESS=your.domain.com:33080
- NB_AUTH_SECRET=你的中继密钥
- NB_TLS_CERT_FILE=/etc/netbird/certs/server.crt
- NB_TLS_KEY_FILE=/etc/netbird/certs/server.key
volumes:
- ./certs/server.crt:/etc/netbird/certs/server.crt:ro
- ./certs/server.key:/etc/netbird/certs/server.key:ro
参数说明:
NB_QUIC_LISTEN_ADDRESS
启用 QUIC 协议监听NB_EXPOSED_ADDRESS
应使用与证书 CN/SAN 对应的域名或 IP
2.5 中继节点添加
在
management.json
或环境变量中加入:
"Relay": {
"Addresses": [
"rels://your.domain.com:33080"
],
"Secret": "你的中继密钥",
"CredentialsTTL": "24h0m0s"
}
注意使用
rels://
前缀匹配 TLS WebSocket Relay。之后重启 Management 服务。客户端
netbird status -d
应显示已可用