本教程测试环境Ubuntu 24.04 X64。
Netbird 是一个基于 WireGuard® 构建的开源网络平台,它可以帮助你轻松创建安全、私密的虚拟网络。它专注于简化配置,实现了零配置(Zero-config)的网络连接,非常适合团队协作、远程访问服务器、物联网设备管理等场景。是tailscale之外的另一个选择。
核心优势:
简单易用:自动化的密钥管理和对等点(Peer)发现,无需手动配置 WireGuard。
高性能:底层使用 WireGuard,速度快,延迟低。
点对点(P2P)连接:设备之间尽可能建立直接连接,而不是通过中心服务器转发流量,以获得最佳性能。
集中式管理:通过一个统一的管理面板(UI)来管理所有网络成员、访问策略和DNS。
安全性:支持 SSO(如 Google, Microsoft, GitHub)登录,并提供基于角色的访问控制(ACL)。
说明:其实官方提供的免费方案对一般场景下的应用足矣,在此注册。但此域名在墙内实际上无法直接访问,所以自托管部署就有必要了,而且速度也有保证。
准备工作:用于netbird管理的域名nb.mydomain.com(不要套CDN),确保域名正确解析到了你VPS的IP,docker环境安装参考这里 。
一、服务器端部署
1、通过官方提供的一键安装脚本部署
export NETBIRD_DOMAIN=nb.mydomain.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started-with-zitadel.sh | bash
说明:官方脚本将会通过caddy自动为nb.mydomain.com申请证书,所以确保80,443端口不被占用(不能修改)。安装成功后脚本会生成管理账号及默认密码,浏览器登录 https://nb.mydomain.com修改密码并进行配置。
2、全手动安装
2.1、认证服务配置
部署NetBird的最重要一步就是决定采用哪种安全认证方法,NetBird采用单点登录领域的OIDC协议,官方支持以下的选项:自建单点登录服务:Zitadel、Keycloak、Authentik。单点登录云服务:Azure AD、Google Workspace、Okta、Auth0。这里选择的是
Auth0 ,参考文档在
这里或
这里。
(2)、创建NetBird的基础应用,请参考下图的步骤,选择Native类型
如下图,Client ID的值将配置到环境变量。
向下翻页,在Application URIs处填写对应的内容,https://nb.mydomain.com 和http://localhost:53000 及http://localhost
多个域名用英文逗号,分隔。启用
Cross-Origin Authentication
向下翻页,展开Advanced Settings,OpenID Configuration需配置到环境变量
(3)、创建NetBird API
Identifier填写域名即可,Identifier的值同样要被配置到环境变量
(4)、创建交互式SSO认证应用
Client ID需配置到环境变量
下翻到Advanced Settings,启用Device Code并保存
(5)、创建Machine to Machine认证应用
选择Auth0 Management API,然后选中以下权限并继续:read:users, update:users, create:users, read:users_app_metadata, update:users_app_metadata, create:users_app_metadata
转到settings,如下图,相应的值要配置到环境变量
其中domain的值需要拼装成https://xxxxxx.us.auth0.com/api/v2/格式的字符串,不是nb.mydomian.com域名
至此,身份认证部分的配置全部结束,为了确保配置的正确性,务必仔细核对配置内容。
git clone --depth 1 --branch v0.54.1 https://github.com/netbirdio/netbird.git
cd netbird/infrastructure_files/
准备环境变量配置文件
根据文件setup.env.example配置说明,更改setup.env文件内的环境变量为你自己的,setup.env最终配置如下:
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT="https://xxxxxx.us.auth0.com/.well-known/openid-configuration"
NETBIRD_USE_AUTH0=true
NETBIRD_AUTH_CLIENT_ID="kWDpnrJyMZRVhoVGdGW3RC3a6xh63Fi4o2"
NETBIRD_AUTH_SUPPORTED_SCOPES="openid profile email offline_access api email_verified"
NETBIRD_AUTH_AUDIENCE="https://nb.mydomain.com"
NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID="i2DCxQFAZnUNzvi78VdNHk6hI6PSi8icyS"
NETBIRD_MGMT_IDP="auth0"
NETBIRD_IDP_MGMT_CLIENT_ID="1e6FuHIJh41IhKBge0inAnbAUp2HRtJQG"
NETBIRD_IDP_MGMT_CLIENT_SECRET="-JOgfc_GMrHcLGXQ2uE_Q4DO6hsfEnFBEiUckzc3eimKzCKmktRqwjU7mn9kCoc4l0"
NETBIRD_IDP_MGMT_EXTRA_AUDIENCE="https://xxxxxx.us.auth0.com/api/v2/"
NETBIRD_DISABLE_LETSENCRYPT=true
NETBIRD_DOMAIN=nb.mydomain.com
NETBIRD_MGMT_API_PORT=443
NETBIRD_SIGNAL_PORT=443
NETBIRD_RELAY_PORT=443
2.3、根据setup.env配置生成docker-compose.yml文件,文件被放在artifacts文件夹
2.4、修改 docker-compose.yml 文件中的服务端口(其他无需修改),与下面nginx配置文件中的保持一致
services:
dashboard:
<<: *default
image: netbirdio/dashboard:latest
ports:
- 8010:80
# - 443:443
.......
signal:
<<: *default
image: netbirdio/signal:latest
volumes:
- netbird-signal:/var/lib/netbird
ports:
- 8011:80
......
management:
<<: *default
image: netbirdio/management:latest
depends_on:
- dashboard
volumes:
- netbird-mgmt:/var/lib/netbird
......
ports:
- 8012:443
......
relay:
<<: *default
image: netbirdio/relay:latest
environment:
- NB_LOG_LEVEL=info
......
ports:
- 8013:443
......
最后
查看容器工作状态
2.5、申请证书参考
这里 第5点,编译Nginx,参考
这里 第四点。在已经配置好的文件 /usr/local/nginx/conf/nginx.conf 里加入一个sever 字段,注意
相关端口与前述docker-compose.yml 文件中一致 。nginx基本配置参考这里 或这里。 server {
# netbird HTTPS server config
listen 443 ssl;
http2 on ;
server_name nb.mydomain.com;
ssl_certificate /etc/cert/cert.crt;
ssl_certificate_key /etc/cert/private.key;
# This is necessary so that grpc connections do not get closed early
# see https://stackoverflow.com/a/67805465
client_header_timeout 1d;
client_body_timeout 1d;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Proxy dashboard
location / {
proxy_pass http://127.0.0.1:8010;
}
# Proxy Signal
location /signalexchange.SignalExchange/ {
grpc_pass grpc://127.0.0.1:8011;
#grpc_ssl_verify off;
grpc_read_timeout 1d;
grpc_send_timeout 1d;
grpc_socket_keepalive on;
}
# Proxy Management http endpoint
location /api {
proxy_pass http://127.0.0.1:8012;
}
# Proxy Management grpc endpoint
location /management.ManagementService/ {
grpc_pass grpc://127.0.0.1:8012;
#grpc_ssl_verify off;
grpc_read_timeout 1d;
grpc_send_timeout 1d;
grpc_socket_keepalive on;
}
# Proxy relay
location /relay {
proxy_pass http://127.0.0.1:8013;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
重新加载nginx配置文件使之生效
/usr/local/nginx/sbin/nginx -s reload
2.6、通过浏览器能够访问你的nb.mydomain.com域名
创建用于登录NetBird的用户(这个用户不是Auth0的用户,而是Auth0提供的身份认证服务的子用户),创建完成后,会提示验证邮箱等,按照提示操作即可。
说明:第一次创建的netbird账号Role是Owner,具有最高管理权限。以后创建的账号Role是user,权限很低,需要用Owner登录netbird,在菜单team-users-user role修改成admin即可。
二、客户端安装,官方文档在此
登录后,界面如下
点击 Add peer,会出现各种平台下的netbird客户端安装方法,基本上所有的平台都支持,包括群晖等。
如Linux下,运行命令
curl -fsSL https://pkgs.netbird.io/install.sh | sh
也可直接安装二进制文件,最新版本在此
wget --no-check-certificate https://github.com/netbirdio/netbird/releases/download/v0.54.1/netbird_0.54.1_linux_amd64.tar.gz
tar xzf netbird_0.54.1_linux_amd64.tar.gz
sudo mv netbird /usr/bin/netbird
sudo chmod +x /usr/bin/netbird
sudo netbird service install
sudo netbird service start
客户端连入netbird组网
netbird up --management-url https://nb.mydomain.com:443
根据提示,打开相应的链接验证即可。
更新的话,使用的是脚本安装的话,逐行执行下面命令
netbird down
curl -fsSLO https://pkgs.netbird.io/install.sh
chmod +x install.sh
./install.sh --update
netbird up
登录netbird后台管理,peers菜单下可以看到已经安装的客户端。点击相应客户端右侧的三点,disable session expiration
三、子网路由配置
netbird 的子网路由的配置,相比与 Tailscale 真的是简单。两个内网只要分别在一台设备上安装 Netbird,这两个内网的所有设备其实都可以互访
落地机就是网段192.168.1.0/24中且安装了netbird客户端的机器,通过落地机可以访问上述网段中任何没有安装netbird的设备。落地机可选择多个,只需其中一个在线,子网路由功能就可正常工作。
客户端不需要任何设置
四、一些常用命令,官方文档在此
netbird up 登录并启动NetBird 客户端。此命令会检查客户端是否已登录,并尝试连接到管理服务。如果尚未登录,它将启动单点登录流程。
netbird status 查看NetBird 客户端的状态。
netbird status --detail 可以获取更详细的信息,如连接的对等端、NetBird IP 地址、公钥、连接状态和连接类型。
netbird down 停止并退出NetBird 客户端。
netbird version 显示NetBird 客户端的版本信息。
netbird help 显示所有可用的NetBird 命令。
备份或升级参考这里。
说明:开放端口,在服务器上开启相关端口如80、443,UDP端口3478等。
评论
发表评论