4787 字
24 分钟
NetBird 部署

适用场景:

  • 团队约 20 人

  • 内网服务器没有公网 IP

  • 有一台公网 Ubuntu VPS

  • 公网 VPS 部署 NetBird 控制面与 Relay

  • 内网 Ubuntu Server 作为普通 Peer、跳板机或 Routing Peer

  • 外部 Windows / macOS / Linux 用户通过 NetBird 访问内网

  • 主要用途为 SSH、SCP、rsync、VS Code Remote SSH

当前自部署域名示例:

https://netbird.example.com

1. NetBird 整体工作原理#

NetBird 是基于 WireGuard 的 Overlay Network。

一套自部署 NetBird 主要分成两个部分:

控制平面
Management
Signal
Dashboard
Embedded IdP
STUN
Relay
数据平面
NetBird Peer ↔ NetBird Peer

当前 getting-started.sh 新部署使用组合式架构:

Traefik
Dashboard
netbird-server

其中 netbird-server 已经整合:

Management
Signal
Relay
STUN
Embedded IdP

官方快速安装要求公网服务器至少 1 CPU、2 GB RAM,并且 TCP 80、443 与 UDP 3478 公网可达,同时要求一个解析到该服务器公网 IP 的域名。


2. 推荐网络拓扑#

2.1 公网侧#

Internet
netbird.example.com
公网 Ubuntu VPS
┌─────────────────────────────┐
│ Traefik │
│ Dashboard │
│ NetBird Management │
│ Signal │
│ Relay │
│ STUN │
│ Embedded IdP │
└─────────────────────────────┘

公网 VPS 至少负责:

设备注册
用户登录
Peer 信息下发
访问策略下发
连接协商
STUN
P2P 失败后的 Relay

实际 SSH 数据并不一定经过 VPS

正常情况下:

外部客户端
│ WireGuard P2P
内网 Peer

如果 P2P 无法建立:

外部客户端
公网 NetBird Relay
内网 Peer

3. 两种推荐的内网访问模式#

必须先决定自己到底需要哪一种。


3.1 模式 A:只通过 SSH 跳板机#

如果需求是:

外部用户
│ NetBird
内网跳板机
│ SSH
其他内网服务器

那么:

不需要配置 Network,也不需要 Routing Peer。

只要在跳板机安装 NetBird。

例如:

跳板机:
LAN IP = 10.21.76.240
NetBird IP = 100.x.x.x

用户:

Terminal window
ssh username@100.x.x.x

进入后:

Terminal window
ssh username@10.21.76.244

或者:

Terminal window
ssh -J username@100.x.x.x username@10.21.76.244

这套方案:

NetBird = 网络入口
Jump Host = SSH 登录与审计入口

最适合目前以 SSH 为核心的团队。


3.2 模式 B:直接访问整个远程内网#

如果希望用户直接:

Terminal window
ssh user@10.21.76.244
curl http://10.21.76.200:8000
psql -h 10.21.76.210

则需要:

Network
+
Resource
+
Access Policy
+
Routing Peer

拓扑:

外部 NetBird 用户
Routing Peer
NetBird IP:100.x.x.x
LAN IP:10.21.76.x
├── 10.21.76.244
├── 10.21.76.239
└── 其他服务器

NetBird 官方目前推荐新配置使用 Networks,旧 Routes 已属于 legacy/deprecated;除 Exit Node 等特殊情况外应优先使用 Networks。


4. 公网 NetBird Server 部署#

4.1 VPS 要求#

官方最低配置:

Linux VM
1 CPU
2 GB RAM

公网放行:

TCP 80
TCP 443
UDP 3478

域名:

netbird.example.com

必须解析到 VPS 公网 IP。

对于约 20 人团队:

建议:
2 CPU
2~4 GB RAM
20 GB+ 磁盘

如果大量连接走 Relay,更重要的是:

公网带宽
月流量
VPS 到用户和内网出口的线路质量

5. DNS 配置#

添加:

Type: A
Host: netbird
Value: <VPS公网IP>

验证:

Terminal window
dig +short netbird.example.com

应返回 VPS 的公网 IP。

如果 DNS 使用 Cloudflare:

Proxy status = DNS only

不要首先开启 Cloudflare Orange Cloud 代理。


6. VPS 防火墙#

云服务器安全组开放:

TCP 80
TCP 443
UDP 3478

SSH 建议只允许管理员来源:

TCP 22

如果使用 UFW:

Terminal window
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/udp
sudo ufw enable
sudo ufw status

7. 安装依赖#

NetBird Quickstart 需要:

Docker
Docker Compose v2
jq
curl

检查:

Terminal window
docker --version
docker compose version
jq --version
curl --version

Ubuntu:

Terminal window
sudo apt update
sudo apt install -y jq curl

Docker 建议按照 Docker 官方 Ubuntu 仓库安装。


8. 部署 NetBird Server#

在准备存放配置的目录中执行:

Terminal window
mkdir -p ~/netbird
cd ~/netbird

然后运行官方安装脚本:

Terminal window
curl -fsSL \
https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh \
| bash

这是当前官方推荐的快速自部署方式。脚本会生成完整的 Compose 和配置文件。


9. Reverse Proxy 选择#

安装脚本会询问:

Which reverse proxy will you use?
[0] Traefik
[1] Existing Traefik
[2] Nginx
[3] Nginx Proxy Manager
[4] External Caddy
[5] Other / Manual

如果没有自己的反向代理:

直接选择 0

即:

Traefik

官方 Quickstart 同样推荐 Traefik,它负责自动申请和更新 Let’s Encrypt TLS 证书。


10. 当前部署产生的主要文件#

安装完成后通常存在:

docker-compose.yml
config.yaml
dashboard.env

其中:

docker-compose.yml
→ Docker 服务、网络、卷、端口
config.yaml
→ Management / Signal / Relay / STUN / Embedded IdP
dashboard.env
→ Dashboard 和 OIDC 配置

当前新部署使用的是 combined netbird-server 架构,而不是旧版 management/signal/relay 多容器架构。

检查:

Terminal window
docker compose ps

日志:

Terminal window
docker compose logs --tail=200

11. GeoLite2 下载卡死问题#

首次启动可能看到:

Geolocation database file
GeoLite2-City_xxxxxxxx.mmdb not found,
file will be downloaded

然后:

Waiting for NetBird server to become ready
. . . . . . . .

GeoLite 数据库由 Management 启动时自动检查并下载。在受限出口、代理、DPI、防火墙或无法访问 pkgs.netbird.io 的环境中可能失败。

如果不使用:

GeoLocation Posture Check
国家/城市访问策略

可以直接关闭:

NB_DISABLE_GEOLOCATION=true

官方说明开启该变量以后:

Management 不初始化 Geolocation
不会下载 GeoLite 数据库

推荐创建:

Terminal window
nano docker-compose.override.yml

加入:

services:
netbird-server:
environment:
NB_DISABLE_GEOLOCATION: "true"

验证:

Terminal window
docker compose config -q

重新创建:

Terminal window
docker compose up -d \
--force-recreate \
netbird-server

查看:

Terminal window
docker compose logs -f \
--tail=100 netbird-server

12. 验证 NetBird Server#

查看容器:

Terminal window
docker compose ps

检查域名:

Terminal window
curl -Iv https://netbird.example.com

检查 OIDC:

Terminal window
curl -k \
https://netbird.example.com/oauth2/.well-known/openid-configuration

正常应返回 JSON,并包含类似:

{
"issuer": "https://netbird.example.com/oauth2"
}

如果返回:

502

说明 Traefik 无法连接 netbird-server

如果安装一直显示:

Waiting for NetBird server to become ready

官方建议依次检查:

Terminal window
dig +short netbird.example.com
curl -vI https://netbird.example.com
docker compose logs traefik
curl -k \
https://netbird.example.com/oauth2/.well-known/openid-configuration

官方指出 502 通常说明反向代理已经收到请求,但无法到达 netbird-server


13. 创建首个管理员#

第一次成功打开:

https://netbird.example.com

如果数据库中还没有账户,会进入:

/setup

输入:

Email
Password
Name

创建首个:

Owner

当前 Quickstart 自带 Embedded IdP,可以直接维护本地用户,不必额外部署 Keycloak。


14. 创建团队用户#

进入:

Team
→ Users

建议约 20 名成员全部使用:

Role = User

管理员使用:

Admin

只保留极少数:

Owner

Embedded IdP 当前支持:

Owner
Admin
User

其中 User 可以连接设备和查看自己有权访问的资源。


15. 建议启用 MFA#

当前自部署 Embedded IdP 已支持 Local MFA。

进入:

Settings
→ Authentication
→ Local MFA

开启:

Local MFA = ON

用户下一次登录时会使用 TOTP:

Google Authenticator
1Password
Authy
其他 TOTP App

官方当前已经支持自部署 Embedded IdP 用户的 TOTP MFA。


16. Group 设计#

建议创建:

remote-users
admins
jump-hosts
routing-peers
gpu-servers

Groups 相当于标签,一个 Peer 可以同时属于多个 Group。Policy 以 Source Group 和 Destination Group 为主要控制对象。


17. 删除默认 All → All 策略#

NetBird 初始化后存在:

Default Policy

本质:

All → All
所有协议
双向访问

这意味着所有 Peer 默认可以互相访问。

正式团队使用前,应先建立必要规则,然后禁用或删除:

Default

官方明确建议需要更严格控制时删除 Default Policy 并建立自定义访问规则。


18. 模式 A:只配置 SSH 跳板机#

如果只需要:

用户
NetBird
Jump Host
其他服务器

无需创建 Network。

18.1 跳板机安装 NetBird#

Ubuntu:

Terminal window
curl -fsSL https://pkgs.netbird.io/install.sh | sh

服务器建议使用 Setup Key 注册。

Dashboard:

Settings
→ Setup Keys
→ Create

建议:

Name:
jump-host
Type:
One-off
Usage:
1
Ephemeral:
OFF
Auto Group:
jump-hosts

Setup Key 专门适合无人值守服务器;One-off Key 只能注册一台设备,Key 后续过期或撤销不会影响已经注册成功的 Peer。

连接:

Terminal window
sudo netbird up \
--management-url https://netbird.example.com \
--setup-key '<SETUP_KEY>'

检查:

Terminal window
sudo netbird status -d

查看 NetBird IP:

Terminal window
ip addr show wt0

例如:

100.90.0.5

19. 跳板机访问策略#

创建:

Source:
remote-users
Destination:
jump-hosts
Protocol:
TCP
Port:
22
Direction:
Unidirectional

用户:

Terminal window
ssh username@100.90.0.5

再进入其他内网主机:

Terminal window
ssh username@10.21.76.244

或者:

Terminal window
ssh \
-J username@100.90.0.5 \
username@10.21.76.244

20. SSH Config 推荐配置#

Linux/macOS:

~/.ssh/config

Windows:

C:\Users\<USER>\.ssh\config

例如:

Host team-jump
HostName 100.90.0.5
User amax
IdentityFile ~/.ssh/id_ed25519
Host server244
HostName 10.21.76.244
User amax
ProxyJump team-jump
IdentityFile ~/.ssh/id_ed25519

之后:

Terminal window
ssh server244

SCP:

Terminal window
scp file.tar server244:/data/

rsync:

Terminal window
rsync -av ./project/ server244:/data/project/

21. 模式 B:部署 Routing Peer#

Routing Peer 的含义是:

把 NetBird Overlay 中的流量转发到没有安装 NetBird 的 LAN/VPC 设备。

官方推荐 Linux 作为生产 Routing Peer,因为它可以直接使用内核 nftables / iptables 进行转发。


22. Routing Peer 安装#

先创建 Setup Key:

Settings
→ Setup Keys

建议:

Name:
office-routing-peer
Type:
One-off
Usage:
1
Auto Groups:
routing-peers
Ephemeral:
OFF

内网 Ubuntu:

Terminal window
curl -fsSL https://pkgs.netbird.io/install.sh | sh

注册:

Terminal window
sudo netbird up \
--management-url https://netbird.example.com \
--setup-key '<SETUP_KEY>'

检查:

Terminal window
sudo netbird status -d

23. Routing Peer 必须满足的条件#

最关键:

Routing Peer 自己必须能直接访问目标内网设备。

例如:

Terminal window
ping 10.21.76.244
Terminal window
nc -vz 10.21.76.244 22

如果 Routing Peer 本身:

Routing Peer -X-> 10.21.76.244

NetBird 不可能帮助它访问目标。

这是官方列出的 Routing Peer 最常见故障原因之一。


24. IP Forwarding#

Linux NetBird Agent 正常会自动启用 IP Forwarding。

检查:

Terminal window
sysctl net.ipv4.ip_forward

正常:

net.ipv4.ip_forward = 1

否则:

Terminal window
sudo sysctl -w net.ipv4.ip_forward=1

持久化:

Terminal window
echo 'net.ipv4.ip_forward=1' \
| sudo tee /etc/sysctl.d/99-netbird.conf

应用:

Terminal window
sudo sysctl --system

这是 NetBird 官方 Routing Peer 文档要求。


25. Routing Peer 开机自动连接#

官方 Linux Client 安装后使用后台 NetBird Service。

检查:

Terminal window
sudo systemctl status netbird --no-pager
Terminal window
sudo systemctl is-enabled netbird
Terminal window
sudo systemctl is-active netbird

正常:

enabled
active

若没有:

Terminal window
sudo systemctl enable --now netbird

NetBird 的 Connect on Startup 默认开启,服务在系统重启后启动时会自动连接 Management 并重新加入网络。

明确重新打开:

Terminal window
sudo netbird up \
--disable-auto-connect=false

重启验证:

Terminal window
sudo reboot

回来以后:

Terminal window
sudo systemctl is-enabled netbird
sudo systemctl is-active netbird
sudo netbird status -d

查看本次启动日志:

Terminal window
sudo journalctl \
-u netbird \
-b \
--no-pager

Setup Key 注册成功后,不需要每次重启重新输入 Setup Key。


26. NetBird Network 的正确概念#

官方当前把 Network 定义成:

Network
├── Resources
├── Access Policies
└── Routing Peers

可以记成:

Network = 一个环境
Resource = 要访问什么
Policy = 谁能访问
Routing Peer = 从哪条路走过去

官方原始 Mental Model 是:

Resources = destinations
Policies = gatekeepers
Routing Peers = roads

27. 创建 Network#

进入 Dashboard:

Network Routing
→ Networks
→ Add Network

例如:

Name:
Office LAN

这里仅仅创建了一个逻辑容器:

Office LAN

此时还没有任何可访问资源。


28. 添加 Resource#

打开:

Network Routing
→ Networks
→ Office LAN
→ Add Resource

Resource 可以是:

单个 IP
10.21.76.244/32
整个 CIDR
10.21.76.0/24
Domain
gpu.internal
Wildcard Domain
*.internal

官方推荐遵循最小权限原则:

能使用 /32 就优先使用 /32,不要一开始发布整个 /24

例如:

Name:
GPU-244
Address:
10.21.76.244/32
Resource Group:
gpu-servers

29. 创建 Network Resource Policy#

例如只允许科研成员 SSH:

Source:
remote-users
Destination:
gpu-servers
Protocol:
TCP
Port:
22

含义:

remote-users
│ TCP 22
10.21.76.244

没有 Policy 的 Resource 默认不可访问。

如果要 Ping,还需另外允许:

ICMP

TCP 22 并不会自动允许 ICMP。


30. 添加 Routing Peer#

打开:

Network Routing
→ Networks
→ Office LAN
→ Add Routing Peer

选择:

office-routing-peer

最终:

Office LAN
├── Resource
│ └── 10.21.76.244/32
├── Policy
│ └── remote-users → TCP 22
└── Routing Peer
└── office-routing-peer

官方示例的推荐流程同样是:

创建 Network
→ 添加 /32 Resource
→ 创建 Policy
→ 添加 Routing Peer
→ 客户端 netbird networks ls 验证

31. Masquerade#

Routing Peer 默认:

Masquerade = Enabled

数据:

客户端
Routing Peer
↓ SNAT
目标服务器

因此目标服务器一般看到:

Routing Peer LAN IP

而不是:

用户 NetBird 100.x IP

优点:

内网无需添加返回路由

官方推荐初始部署保留默认 Masquerade。

只有确实需要保留来源 NetBird IP 时才关闭。

关闭后内网必须知道如何返回:

100.x 网络
via Routing Peer

32. Routing Peer 本机与后方 Resource 是两回事#

这是最容易配置错误的地方。

例如 Routing Peer:

NetBird IP:
100.90.0.5
LAN IP:
10.21.76.240

如果访问:

Terminal window
ssh user@100.90.0.5

这是:

TO Routing Peer

需要:

Peer-to-Peer Policy

例如:

remote-users
→ routing-peers
TCP 22

如果访问:

Terminal window
ssh user@10.21.76.244

是:

THROUGH Routing Peer

需要:

Network Resource Policy

NetBird 官方明确区分:

TO Routing Peer
→ input chain
→ Peer Policy
THROUGH Routing Peer
→ forward chain
→ Network Resource Policy

33. 推荐 Routing Peer 与跳板机分开#

长期推荐:

Routing Peer
只负责 IP 转发
Jump Host
只负责 SSH 登录与审计

例如:

Routing Peer
10.21.76.230
Jump Host
10.21.76.240

优点:

网络权限更清晰
SSH 权限更清晰
日志更清晰
降低单机暴露面
排障更容易

小规模环境也可以使用同一台机器同时承担两个角色;官方允许同一个 Peer同时作为普通 Peer、Routing Peer 和 Exit Node。


34. Routing Peer 高可用#

同一个 Network 可以添加多个 Routing Peer。

例如:

Routing Peer A
metric = 100
Routing Peer B
metric = 200

则:

A = 主
B = 备用

A 不可用时自动切 B。

如果:

A = 100
B = 100

则客户端根据延迟选择。

官方当前 Routing Peer HA 完全由 metric 控制。


35. Windows 客户端#

安装官方 Windows EXE/MSI。

安装后包括:

NetBird GUI
NetBird daemon service

默认目录:

C:\Program Files\NetBird

当前 Windows 安装器会安装后台 daemon。

首次运行:

NetBird
→ Connect
→ Self-hosted

输入:

https://netbird.example.com

然后浏览器登录自己的 NetBird 用户账号。

也可以使用管理员 PowerShell:

Terminal window
netbird up `
--management-url https://netbird.example.com

检查:

Terminal window
netbird status
Terminal window
netbird status -d

36. Linux 用户客户端#

安装:

Terminal window
curl -fsSL https://pkgs.netbird.io/install.sh | sh

用户设备不要用 Setup Key,建议使用用户身份认证:

Terminal window
netbird up \
--management-url https://netbird.example.com

浏览器登录自己的账户。

检查:

Terminal window
netbird status -d

官方建议 Setup Key 主要用于无人值守服务器,而普通终端用户通过交互式身份认证注册。


37. 查看 Network 是否正确下发#

客户端:

Terminal window
netbird networks ls

这是当前官方 Networks 的主要验证命令之一。

Linux 查看:

Terminal window
ip route

或者:

Terminal window
ip route get 10.21.76.244

Windows:

Terminal window
route print

或者:

Terminal window
Get-NetRoute

38. 外网测试方法#

不要只在客户端和 Routing Peer 位于同一 LAN 时测试。

因为此时可能只是:

LAN 直接连接

无法验证:

公网 Management
Signal
STUN
P2P
Relay

推荐:

1. 内网完成设备注册
2. 客户端断开 Wi-Fi
3. 使用手机热点
4. netbird status -d
5. 测试 SSH

检查:

Terminal window
netbird status -d

然后:

Terminal window
ssh user@目标

39. 本地与远程 IP 冲突#

例如:

本地网络:
10.21.76.244
远程 Network:
10.21.76.244

这属于:

Overlapping IP

同一个客户端无法通过相同目的 IP 自动知道:

我要本地 244
还是
我要远程 244

如果只需要 SSH,最推荐:

用户
→ 跳板机的 NetBird 100.x IP
→ 远程 10.21.76.244

即:

Terminal window
ssh \
-J user@100.x.x.x \
user@10.21.76.244

这样:

用户本地访问 10.21.76.244
→ 本地 244
ProxyJump 后访问 10.21.76.244
→ 跳板机所在远程 LAN 的 244

两边不会冲突。


40. NetBird Server 自动启动#

Quickstart 使用 Docker Compose。

检查容器 RestartPolicy:

Terminal window
docker inspect \
-f '{{.Name}} restart={{.HostConfig.RestartPolicy.Name}}' \
$(docker compose ps -q)

应看到类似:

restart=unless-stopped

检查 Docker 开机启动:

Terminal window
systemctl is-enabled docker

正常:

enabled

检查:

Terminal window
systemctl is-active docker

正常:

active

不要在关机前执行:

Terminal window
docker compose down

因为 down 会删除 Compose 容器。

正常:

Terminal window
reboot

之后 Docker 根据 RestartPolicy 恢复容器。


41. Routing Peer 自动启动#

对于通过:

Terminal window
curl -fsSL https://pkgs.netbird.io/install.sh | sh

安装的 Linux NetBird Agent:

Terminal window
sudo systemctl is-enabled netbird
sudo systemctl is-active netbird

正常:

enabled
active

确保 Connect on Startup:

Terminal window
sudo netbird up \
--disable-auto-connect=false

官方当前说明该功能默认就是开启状态。

重启验证:

Terminal window
sudo reboot

登录回来:

Terminal window
sudo netbird status -d

42. 常用状态检查#

Server#

Terminal window
cd ~/netbird
docker compose ps
Terminal window
docker compose logs \
--tail=100 \
netbird-server
Terminal window
docker compose logs \
--tail=100 \
traefik

Client#

Terminal window
netbird status
Terminal window
netbird status -d
Terminal window
netbird networks ls

Routing Peer#

Terminal window
sudo netbird status -d
Terminal window
ip addr show wt0
Terminal window
sysctl net.ipv4.ip_forward
Terminal window
ip route

43. SSH 不通排查顺序#

不要一上来排 NetBird。

严格按以下顺序检查。

第一步:Routing Peer 自己能访问目标吗#

Terminal window
nc -vz 10.21.76.244 22

失败:

先处理内网路由、目标 SSH、防火墙

第二步:Routing Peer 在线吗#

Terminal window
sudo netbird status -d

检查:

Management
Signal
Relay

第三步:Network 是否下发#

客户端:

Terminal window
netbird networks ls

第四步:Policy 是否正确#

检查:

Source Group
Destination Resource Group
TCP
Port 22

第五步:IP Forwarding#

Terminal window
sysctl net.ipv4.ip_forward

第六步:抓包#

Routing Peer:

Terminal window
sudo tcpdump \
-ni any \
host 10.21.76.244 \
and port 22

用户同时:

Terminal window
ssh user@10.21.76.244

44. 用户撤权#

如果成员离开团队:

Team
→ Users
→ Disable/Delete

同时建议:

Peers
→ 删除该用户设备

SSH 层还需要:

删除 Linux 用户
删除 authorized_keys

NetBird 权限与 Linux SSH 权限是两层独立控制。


45. 日志与审计#

NetBird 自部署可以记录:

用户
Peer
Group
Policy
Setup Key
配置变化

但 NetBird 本身不是 SSH 堡垒机。

它不能默认记录:

用户在 SSH 中执行了什么命令

如果需要:

SSH 登录审计
命令审计
sudo 操作审计

可以在 Jump Host 进一步部署:

auditd
tlog
sudo I/O logging
JumpServer
Teleport

46. Server 备份#

官方要求至少备份:

docker-compose.yml
config.yaml
dashboard.env
Management 数据目录

在 NetBird 安装目录:

Terminal window
mkdir -p backup
Terminal window
cp \
docker-compose.yml \
dashboard.env \
config.yaml \
backup/

停止 Server:

Terminal window
docker compose stop netbird-server

复制数据:

Terminal window
docker compose cp -a \
netbird-server:/var/lib/netbird/ \
backup/

重新启动:

Terminal window
docker compose start netbird-server

47. NetBird Server 更新#

先备份。

然后:

Terminal window
docker compose pull \
netbird-server \
dashboard

如果使用 Traefik:

Terminal window
docker compose pull

重新创建:

Terminal window
docker compose up -d \
--force-recreate

检查:

Terminal window
docker compose ps
Terminal window
docker compose logs \
--tail=100

官方升级流程同样要求先备份,再 Pull 新镜像并 up -d --force-recreate


48. Linux NetBird Client 更新#

如果使用安装脚本:

Terminal window
netbird down
Terminal window
curl -fsSLO \
https://pkgs.netbird.io/install.sh
Terminal window
chmod +x install.sh
Terminal window
sudo ./install.sh --update
Terminal window
netbird up

这是当前官方 Linux 更新流程。


49. 推荐的最终生产配置#

对于当前约 20 人团队,建议最终采用:

Internet
netbird.example.com
公网 NetBird VPS
Management / Relay
┌───────────┴───────────┐
│ │
用户 NetBird 内网 NetBird
Clients Gateway
┌───────────────┴──────────────┐
│ │
Routing Peer Jump Host
网络转发 SSH登录
│ │
内网资源 内网服务器

第一阶段可以进一步简化成:

用户
NetBird
Jump Host
其他服务器

此时:

不需要 Network
不需要 Routing Peer

只配置:

remote-users
↓ TCP 22
jump-hosts

50. 后续需要直接访问内网资源时#

再增加:

Office LAN Network

资源按 /32 添加:

10.21.76.239/32
10.21.76.240/32
10.21.76.244/32

而不是:

10.21.76.0/24

然后:

remote-users
↓ TCP 22
gpu-servers
Routing Peer
目标服务器

这样遵循最小权限原则,也符合当前官方 Networks 的设计方式。


51. 最重要的几个概念#

NetBird Server
= 控制面 + Signal + Relay + STUN
Peer
= 安装了 NetBird 的设备
Jump Host
= 用户实际 SSH 登录的服务器
Routing Peer
= 网络层转发设备,用户无需登录它
Network
= 某个 LAN / VPC / 环境的逻辑容器
Resource
= Network 中真正要访问的 IP / CIDR / Domain
Policy
= 谁可以访问什么、什么协议、什么端口
Setup Key
= 无人值守服务器注册凭据

最容易混淆的一点:

访问 Routing Peer 自己
→ Peer-to-Peer Policy
通过 Routing Peer 访问它后面的服务器
→ Network Resource Policy

52. 当前最推荐的配置策略#

普通用户#

Group:
remote-users

跳板机#

Group:
jump-hosts

Routing Peer#

Group:
routing-peers

SSH 规则#

remote-users
→ jump-hosts
→ TCP 22
→ Unidirectional

Network 资源规则#

remote-users
→ gpu-servers
→ TCP 22

安全原则#

禁用 Default All → All
只发布必须访问的资源
优先 /32
不要共享 NetBird 用户
不要共享 SSH 私钥
每人独立 NetBird 用户
每人独立 Linux 用户/SSH Key
Routing Peer 用 Setup Key
普通用户设备使用交互式登录
开启 Local MFA
定期备份 NetBird Server

53. 最常用命令速查#

NetBird Server#

Terminal window
docker compose ps
Terminal window
docker compose logs \
--tail=100 \
netbird-server
Terminal window
docker compose restart \
netbird-server

Linux Peer#

Terminal window
sudo netbird status -d
Terminal window
sudo netbird down
Terminal window
sudo netbird up \
--management-url https://netbird.example.com

Routing Peer#

Terminal window
sudo systemctl is-enabled netbird
sudo systemctl is-active netbird
sudo netbird status -d
sysctl net.ipv4.ip_forward
ip addr show wt0

Networks#

Terminal window
netbird networks ls

SSH#

Terminal window
ssh user@100.x.x.x

或者:

Terminal window
ssh \
-J user@100.x.x.x \
user@10.21.76.244

54. 当前部署决策建议#

如果主要需求仍然是:

20 个成员
→ 命令行
→ 一台内网服务器
→ 再访问其他内网服务器

优先采用:

NetBird Peer + SSH Jump Host

暂时不要:

直接发布整个 10.x.x.x/24

等后续需要:

直接访问 GPU
Jupyter
数据库
NAS
内部 Web

再配置:

Networks
+ Routing Peer
+ /32 Resources
+ Resource Policies

这样是当前最清晰、最容易审计、权限范围最小,也最符合 NetBird 官方最新 Networks 模型的部署方式。

NetBird 部署
https://ginwineli.cn/posts/common/service/netbird-部署/
作者
琴酒Gin
发布于
2026-08-17
许可协议
CC BY-NC-SA 4.0