Tự host NetBird VPN server trên VPS như thế nào
Chạy NetBird mesh VPN trên một VPS: cấu hình DNS, TLS, script quickstart ghim phiên bản, setup key cho peer tự động và so sánh thực tế với Headscale.
Tự host máy chủ VPN NetBird mang lại gì
Tự host máy chủ VPN NetBird đưa control plane lên VPS do bạn sở hữu. Đây là thành phần lưu danh sách peer, quyết định máy nào được truy cập máy nào và giúp hai peer tìm thấy nhau phía sau NAT (network address translation). Các tunnel vẫn sử dụng WireGuard và được mã hóa trực tiếp giữa các máy của bạn. Điểm thay đổi là không có công ty bên ngoài nào lưu inventory thiết bị hoặc quy trình đăng nhập của bạn. Hãy xác định rõ lợi ích thực tế, vì control plane được host bên ngoài cũng không bao giờ giữ các key dùng để mã hóa traffic của bạn, và coordination server thực sự có thể làm gì khi bị breach có phạm vi hẹp hơn nhiều so với điều đa số mọi người nghĩ trước khi đọc phần này.
NetBird nằm giữa hai khái niệm mà có thể bạn đã biết. Đây là mesh overlay, nên các peer kết nối trực tiếp với nhau thay vì gửi toàn bộ traffic qua một gateway. NetBird cũng có thể tự host từ đầu đến cuối, nên cạnh tranh với Headscale, control server tự host của Tailscale. Nếu bạn chỉ từng chạy tunnel qua một gateway duy nhất, hãy đọc trước sự khác biệt giữa WireGuard thông thường và mesh overlay, vì mô hình này giúp bạn hiểu phần còn lại của trang.
Nếu mục tiêu thực tế của bạn là một server duy nhất để toàn bộ traffic đi ra từ đó, mesh có nhiều thành phần hơn mức cần thiết. WireGuard thông thường trên một VPS duy nhất hoặc Tailscale exit node có thể làm việc đó với ít thành phần phải vận hành hơn nhiều. Nếu mục tiêu là truy cập một private network thay vì kết nối các máy với nhau, Tailscale subnet router trên một VPS sẽ quảng bá dải mạng đó đến tailnet bạn đã có mà không cần toàn bộ stack bên dưới.
Stack thực sự chạy những gì
Cấu trúc đã thay đổi gần đây, và phần lớn tài liệu cũ vẫn mô tả cấu trúc trước đây. Kiểm tra vào tháng 10 năm 2026 với v0.80.0 và v0.76.2, là bản release mà hướng dẫn này cố định, cho thấy script quickstart mặc định ghi một file Compose với 3 service.
netbird-servercung cấp management API, signal service, relay có STUN listener tích hợp và identity provider tích hợp. Ở các release cũ, chúng là những container riêng biệt, còn identity provider là một bản cài Zitadel riêng mà bạn phải build trước.dashboardlà admin web console.traefikthực hiện TLS termination và yêu cầu chứng chỉ từ Let's Encrypt trong lần start đầu tiên.
Có thêm 2 service nhưng mặc định không chạy, trừ khi bạn chọn đồng ý tại prompt. NetBird Proxy service public các service nội bộ trên những hostname public. CrowdSec lọc traffic có hành vi lạm dụng. Không service nào là bắt buộc để build một mesh hoạt động được, và cả 2 đều tốn memory trên máy nhỏ.
Nếu bạn chuyển từ wg-easy trong một Docker container duy nhất, đây là một bước tăng đáng kể về số lượng thành phần. Đổi lại, bạn có access policy và account riêng cho từng user, cùng các peer có thể kết nối trực tiếp với nhau thay vì đi qua một gateway.
Những gì cần chuẩn bị trước khi bắt đầu
Tên miền public là bắt buộc. Dashboard, API và relay đều chạy HTTPS trên port 443. Traefik lấy certificate từ Let's Encrypt bằng challenge TLS-ALPN-01, được xử lý trên port 443. Challenge này cần một hostname phân giải đến VPS từ Internet public. Địa chỉ IP đơn thuần sẽ không hoạt động trong quy trình này.
Tạo một bản ghi A, netbird.example.com trỏ đến địa chỉ IPv4 public của VPS, rồi chờ DNS cập nhật trước khi chạy bất kỳ lệnh nào.
dig +short netbird.example.comLệnh đó phải in ra địa chỉ của server. Nếu chạy installer trước khi DNS cập nhật, yêu cầu cấp certificate sẽ fail ngay lần khởi động đầu tiên. Các lần validation fail liên tiếp sẽ chạm rate limit của Let's Encrypt. Khi đó bạn phải chờ giới hạn được bổ sung lại mới có thể thử lần nữa.
Có 3 port phải truy cập được từ Internet: TCP 80 để redirect sang HTTPS, TCP 443 cho dashboard, API, signal, relay và certificate challenge, cùng UDP 3478 cho STUN.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/udp
sudo ufw reload
sudo ufw statusBạn cũng phải mở các port này trên network firewall của nhà cung cấp. Đây thường là một lớp cấu hình riêng trong panel VPS. Vì vậy, một máy có ufw status riêng được cấu hình đúng vẫn có thể từ chối kết nối.
STUN (session traversal utilities for NAT) cho phép peer biết địa chỉ public và port mà NAT của chính nó đã cấp. Nhờ đó, 2 peer có thể thử thiết lập tunnel trực tiếp. Nếu chặn UDP 3478, các peer vẫn kết nối được qua relay trên TCP 443 nên nhìn bên ngoài không có gì bị hỏng. Những peer không tìm được đường truyền trực tiếp sẽ hiển thị Connection type: Relayed. Khi đó traffic của chúng đi qua VPS thay vì đi trực tiếp giữa 2 peer. Các peer trên cùng LAN vẫn có thể kết nối trực tiếp bằng địa chỉ local của chúng.
Về phần mềm, bạn cần Docker có plugin Compose v2, cùng với jq và curl. Script kiểm tra Docker, Compose và jq rồi dừng nếu thiếu một thành phần. Script sử dụng curl mà không kiểm tra thành phần này, nên hãy cài nó trước. Nếu Docker mới được cài trên máy này, trước tiên hãy làm theo hướng dẫn để Docker Compose hoạt động trên VPS.
Các port nếu bạn bỏ reverse proxy đi kèm
Không có Traefik, combined server vẫn chạy management, signal và relay trên cùng một HTTP backend, nên danh sách port chỉ tăng thêm rất ít. File Compose được tạo sẽ publish:
- TCP 8080, dashboard, mặc định bind vào 127.0.0.1
- TCP 8081,
netbird-server, mặc định bind vào 127.0.0.1 - UDP 3478, STUN, được publish trực tiếp
Proxy của bạn terminate TLS trên TCP 443 và forward đến 2 port local đó. STUN không đi qua proxy, nên UDP 3478 vẫn phải mở trên firewall trong mọi trường hợp. Những hướng dẫn liệt kê các port riêng cho management gRPC, signal gRPC và relay đang mô tả layout nhiều container cũ hơn.
Chỉ chọn cách này khi máy đã terminate TLS cho một dịch vụ khác. Nếu không, Traefik đi kèm cần ít rule hơn và ít lỗi hơn.
Cài đặt server NetBird bằng quickstart script
Lệnh một dòng trong tài liệu sẽ pipe bản release mới nhất thẳng vào shell:
curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bashHãy cố định phiên bản. latest thay đổi, nên cùng một lệnh chạy cách nhau hai tuần sẽ tạo ra hai bản cài đặt khác nhau, và không có thông tin nào trên disk ghi lại bản nào đã ghi cấu hình của bạn. Hãy tải một bản release có tag, đọc nội dung, rồi mới chạy nó.
mkdir -p ~/netbird
cd ~/netbird
curl -fsSL -o getting-started.sh \
https://github.com/netbirdio/netbird/releases/download/v0.76.2/getting-started.sh
less getting-started.sh
bash getting-started.shScript hỏi domain trước:
Enter the domain you want to use for NetBird (e.g. netbird.my-domain.com):Sau đó script hỏi cách xử lý TLS:
Which reverse proxy will you use?
[0] Traefik (recommended - automatic TLS, included in Docker Compose)
[1] Existing Traefik (labels for external Traefik instance)
[2] Nginx (generates config template)
[3] Nginx Proxy Manager (generates config + instructions)
[4] External Caddy (generates Caddyfile snippet)
[5] Other/Manual (displays setup documentation)
Enter choice [0-5] (default: 0):Chọn [0]. Các tùy chọn từ 2 đến 4 sẽ ghi một đoạn cấu hình và để bạn tự nối các thành phần, còn tùy chọn 5 sẽ ghi file Compose, dashboard.env và config.yaml rồi in tài liệu thiết lập ra terminal. Cách này đúng trên máy đã chạy proxy và sai trên máy mới. Sau đó tùy chọn 0 hỏi địa chỉ email, rồi Traefik đăng ký địa chỉ đó với account Let's Encrypt của bạn. Prompt vẫn gọi đây là địa chỉ nhận thông báo về chứng chỉ, nhưng Let's Encrypt đã ngừng gửi email thông báo hết hạn từ ngày 4 tháng 6 năm 2025, nên vấn đề gia hạn sẽ xuất hiện trong log của Traefik thay vì trong inbox của bạn.
Trong lần cài đặt đầu tiên, hãy trả lời không với service NetBird Proxy. Service này cần thêm một DNS record, cụ thể là wildcard *.netbird.example.com CNAME trỏ đến netbird.example.com, nhưng không có tác dụng với mesh thông thường. Prompt của CrowdSec chỉ xuất hiện khi proxy được bật, nên từ chối proxy cũng bỏ qua CrowdSec. Bạn có thể thêm cả hai sau.
Script ghi các file vào thư mục hiện tại: docker-compose.yml, config.yaml với mode 600 và dashboard.env. Khi dùng Traefik đi kèm, script chỉ thêm traefik-dynamic.yaml và proxy.env nếu bạn bật NetBird Proxy. Hãy coi thư mục này là state cần được giữ lại, vì config.yaml chứa key dùng để mã hóa dữ liệu trong store. Reinstall không thể sửa lỗi mất file này.
docker compose ps
docker compose logs -f netbird-serverMọi service phải đọc running, và log của server phải ổn định thay vì restart liên tục. Hãy theo dõi chứng chỉ riêng:
docker compose logs traefik | grep -i acmeACME (môi trường quản lý chứng chỉ tự động) là protocol mà Traefik dùng để lấy chứng chỉ. Lỗi ở đây hầu như luôn do DNS hoặc cổng 443 bị đóng.
Tạo tài khoản admin đầu tiên
Mở https://netbird.example.com. Với một bản cài đặt mới, trang này sẽ mở trang thiết lập thay vì biểu mẫu đăng nhập. Nhập địa chỉ email, tên và mật khẩu, rồi nhấp vào Create Account. Tài khoản đó trở thành admin đầu tiên và trang sẽ chuyển hướng đến biểu mẫu đăng nhập.
Tài khoản này được lưu trong user store riêng của NetBird, do một identity provider được tích hợp trong container netbird-server cung cấp. Không có thành phần bên ngoài nào được sử dụng. Đây là thay đổi lớn nhất so với NetBird self-hosted của một năm trước. Khi đó, một bản cài đặt hoạt động được yêu cầu phải triển khai Zitadel hoặc Keycloak trước, rồi sao chép 4 giá trị OIDC (OpenID Connect) vào setup.env trước khi bất kỳ thành phần nào có thể khởi động.
Nếu trình duyệt hiển thị cảnh báo certificate thay vì trang thiết lập, certificate chưa được cấp. Hãy xử lý lỗi này trước khi tiếp tục. Dashboard giao tiếp với API qua cùng hostname và có thể gặp lỗi khó xác định khi certificate không hợp lệ.
Thêm peer đầu tiên
Cài client trên bất kỳ máy Linux nào, kể cả chính VPS nếu bạn muốn đưa máy đó vào mesh:
curl -fsSL https://pkgs.netbird.io/install.sh | shTrên Debian và Ubuntu, script này cấu hình package repository của NetBird rồi cài client qua apt. Vì vậy, package manager vẫn quản lý client trong cả hai trường hợp. Nếu bạn không muốn pipe script vào shell, hãy lưu script trước bằng curl -fsSL -o install.sh https://pkgs.netbird.io/install.sh rồi đọc nội dung trước khi chạy sh install.sh. Dù dùng cách nào, hãy xác nhận các thành phần đã được cài:
apt-cache policy netbirdnetbird là CLI client và daemon. netbird-ui là desktop tray app, không có tác dụng trên headless server.
Bây giờ trỏ client đến server của bạn:
sudo netbird up --management-url https://netbird.example.comNếu bỏ --management-url, client sẽ đăng ký với hosted service của NetBird vì đó là giá trị mặc định được tích hợp sẵn. Command vẫn chạy thành công, máy vẫn nhận được một địa chỉ, nhưng dashboard self-hosted của bạn vẫn trống. Hầu như ai cũng mắc lỗi này ít nhất một lần.
Command sẽ in ra một URL. Mở URL đó trong browser để hoàn tất đăng nhập. Sau đó:
netbird status
ip addr show wt0Đọc 4 dòng từ netbird status: Management: Connected, Signal: Connected, một dòng Relays: liệt kê mọi relay khả dụng, và một dòng NetBird IP: trong dải overlay. wt0 là WireGuard interface do NetBird tạo, và interface này phải có cùng địa chỉ đó.
Đăng ký máy thứ hai không cần thao tác bằng setup key
Đăng nhập bằng browser không phù hợp với máy không có browser và không có người thao tác trực tiếp. setup key là token pre-authentication dùng để đăng ký máy mà không cần bước tương tác. Tạo key trong dashboard, tại mục Setup Keys.
Có 2 loại key. Key dùng một lần chỉ xác thực đúng 1 máy rồi bị sử dụng hết. Key có thể dùng lại để đăng ký nhiều máy, với giới hạn số lượng tùy chọn. Cả 2 loại đều có thời hạn và có thể tự động gán peer mới vào một group. Vì vậy, access rule của group sẽ được áp dụng ngay khi máy xuất hiện.
sudo netbird up --setup-key <SETUP-KEY> \
--management-url https://netbird.example.com \
--hostname build-runner-01--hostname đặt tên hiển thị trong dashboard. Nếu không đặt, peer sẽ dùng tên mà máy tự nhận diện. Một fleet gồm nhiều entry đều có tên ubuntu sẽ không giúp ích gì.
Với container và build agent có thời gian tồn tại ngắn, hãy đánh dấu key là ephemeral khi tạo. Peer được đăng ký bằng ephemeral key sẽ tự động bị xóa sau khi offline hơn 10 phút. Nhờ đó, các entry không còn hoạt động không bị giữ lại trong peer list.
Có một giới hạn cần hiểu trước khi thiết kế quy trình dựa trên setup key: khi key hết hạn hoặc bị revoke, key chỉ ngăn các lần đăng ký mới. Nó không ngắt kết nối những máy đã đăng ký bằng key đó. Muốn thu hồi quyền truy cập của một máy, bạn phải xóa peer tương ứng.
Bạn còn cần một identity provider riêng không?
Với một cài đặt nhỏ thì không. User store tích hợp sẵn xử lý các tài khoản được tạo từ dashboard, và như vậy là đủ cho một nhóm nhỏ người dùng.
Bạn nên dùng external identity provider khi đã có sẵn một provider và không muốn duy trì thêm một danh sách người dùng khác. NetBird chấp nhận mọi provider hỗ trợ OIDC. Hãy đăng ký một confidential OIDC client trong provider của bạn, sau đó thêm client đó vào dashboard của NetBird với 4 giá trị: tên, client ID, client secret và issuer. NetBird sẽ cung cấp redirect URL để bạn dán ngược lại vào provider. NetBird có integration riêng cho Google, Microsoft Entra ID, Okta, Zitadel, Keycloak, Authentik và Pocket ID. Các provider khác dùng cấu hình OIDC generic. Nếu bạn đã chạy Authentik làm hệ thống single sign-on tự host, đây là cách duy trì một danh sách tài khoản duy nhất thay vì hai danh sách.
Local login vẫn khả dụng sau khi bạn thêm provider, và mọi provider đã cấu hình đều xuất hiện trên trang login. Hãy giữ một tài khoản local admin với mật khẩu mạnh. Khi cấu hình OIDC bị lỗi, bạn vẫn còn cách đăng nhập vào hệ thống.
NetBird hay Headscale: nên chạy control plane nào?
Cả hai đều loại bỏ cùng một dependency: control server hosted mà các client lẽ ra phải gọi về. Tuy nhiên, hai dự án này có mô hình rất khác nhau.
Headscale triển khai lại Tailscale control server, còn bạn tiếp tục dùng các Tailscale client chính thức. Dự án không có web console chính thức. Bạn quản lý user và pre-authentication key bằng lệnh headscale trên một config file. Có các web interface do cộng đồng phát triển, nhưng chúng không thuộc dự án. Cách này phù hợp nếu bạn muốn lưu state trong file và quản lý thay đổi bằng version control.
NetBird cung cấp trọn bộ sản phẩm: client riêng, dashboard riêng, identity provider tích hợp sẵn và các access policy có thể chỉnh sửa trong trình duyệt. Điều này khiến VPS của bạn có thêm nhiều thành phần phải vận hành, nhưng đổi lại việc bàn giao cho đồng nghiệp không bao giờ mở terminal sẽ đơn giản hơn nhiều. Nếu bạn thực sự đang cân nhắc NetBird với Tailscale managed thay vì Headscale, cả hai đều dùng WireGuard bên dưới, nên bài so sánh NetBird với Tailscale sẽ trình bày những điểm khác biệt thực tế: ai vận hành control plane, cách viết access rule và cách relay chuyển tiếp traffic.
Hãy chạy Headscale nếu bạn đã dùng Tailscale client hoặc muốn control plane nhỏ gọn nhất có thể. Hãy chạy NetBird nếu nhiều người cần quản lý peer và bạn muốn có console cùng SSO mà không phải tự lắp ghép. Trước khi chọn một trong hai, hãy kiểm tra gói miễn phí của Tailscale thực sự bao gồm những gì, vì một nhóm phi thương mại có tối đa sáu user không phải trả phí cho hosted control plane, được dùng không giới hạn thiết bị của user và ban đầu có 50 resource được tag, nên có thể hoàn toàn không cần tự chạy control plane. Khi vượt giới hạn này, chi phí tăng theo số người thay vì số máy, vì vậy tính xem Tailscale sẽ tính phí nhóm của bạn bao nhiêu sẽ cho bạn một con số để so sánh với chi phí VPS và số giờ bạn phải bỏ ra để vận hành stack này.
Một VPS nhỏ đến mức nào có thể chạy được hệ thống này?
Mức tối thiểu được ghi trong tài liệu là 1 CPU và 2 GB bộ nhớ. Hãy mua gói 2 GB.
Có thể bỏ qua an toàn 3 thành phần trên máy cấu hình nhỏ. Không cài NetBird Proxy, vì service này dùng để publish service nội bộ bằng hostname public và không liên quan đến việc các peer kết nối với nhau. Bỏ qua CrowdSec, vì script chỉ đề xuất thành phần này cùng với proxy; bạn có thể thêm sau khi máy đã exposed, thay vì cài ngay từ đầu. Giữ store SQLite mặc định trong volume netbird_data, và chỉ chuyển sang PostgreSQL khi bạn tách deployment trên nhiều máy hoặc gặp vấn đề concurrency thực tế. Tài liệu có hướng dẫn migration để thực hiện việc này sau.
Relay là thành phần duy nhất không thể bỏ. Hai peer có NAT gán một port khác nhau cho mỗi đích sẽ không bao giờ thiết lập được tunnel trực tiếp, nên relay là đường duy nhất giúp chúng hoạt động. Tắt relay chỉ tiết kiệm được rất ít bộ nhớ nhưng lại làm hỏng kết nối theo cách khó truy vết.
Khi một máy không còn đủ, relay là thành phần đầu tiên nên chuyển sang máy khác. Một relay độc lập chạy với NB_LISTEN_ADDRESS, NB_EXPOSED_ADDRESS, NB_AUTH_SECRET và NB_ENABLE_STUN. Shared secret phải giống hệt trên relay và máy chủ chính, nếu không client sẽ không xác thực được với relay.
Các chế độ lỗi và thông tin bạn sẽ thấy
Dashboard hiển thị cảnh báo chứng chỉ. Traefik chưa lấy được chứng chỉ. Chạy docker compose logs traefik | grep -i acme. Có hai nguyên nhân. Hoặc dig +short netbird.example.com chưa trả về VPS này, hoặc TCP 443 bị đóng ở đâu đó giữa Let's Encrypt và container, thường là trên firewall mạng của nhà cung cấp chứ không phải trên ufw. Challenge được trả lời trên 443, nên mở cổng 80 không giúp được trong trường hợp này. Hãy khắc phục nguyên nhân trước khi thử lại liên tục, vì Let's Encrypt chỉ cho phép 5 lần authorization thất bại trên mỗi hostname, mỗi account, trong mỗi giờ. Nếu lặp lại, bạn sẽ bị khóa quyền retry cho đến khi hạn mức được bổ sung.
Client báo đã kết nối nhưng dashboard trống. Client đã đăng ký với hosted service của NetBird vì --management-url bị thiếu. Chạy netbird status --detail và đọc dòng Management:, dòng này cho biết server mà client thực sự đang kết nối. Nếu thấy Management: Connected to https://api.netbird.io:443, nghĩa là client đã kết nối đến cloud. Chạy sudo netbird down, rồi chạy lại sudo netbird up --management-url https://netbird.example.com.
Mọi peer đều hiển thị Connection type: Relayed. Không có tunnel trực tiếp nào được thiết lập, nên toàn bộ traffic đi qua VPS và thêm một hop latency. Kiểm tra UDP 3478 trên firewall của VPS và firewall của nhà cung cấp, vì STUN cho phép peer xác định địa chỉ public và port của chính nó. netbird status --detail cũng in ra Direct: false và các loại candidate ICE (interactive connectivity establishment) cho từng peer, cho biết quá trình kết nối đã đi được đến đâu. Trên một số network, relayed là kết quả duy nhất có thể có và không có gì sai.
Một peer tham gia nhưng không thể truy cập bất kỳ thứ gì. Nằm trong mesh không có nghĩa là hai peer được phép kết nối với nhau. Access policy quyết định việc này, và một group không được gắn policy sẽ không truy cập được gì. Kiểm tra policy trong dashboard trước khi bắt đầu debug route và firewall.
netbird status báo lỗi daemon. Service chưa chạy. Dùng sudo netbird service status và sudo netbird service start. Log của client nằm ở /var/log/netbird/client.log. Với những vấn đề bạn chưa xác định được, netbird debug bundle --anonymize --system-info sẽ gom log, trạng thái, route, thiết lập DNS và trạng thái firewall vào một archive.
Sao lưu và nâng cấp
Hai thành phần này chứa toàn bộ dữ liệu cần thiết cho một bản cài đặt: thư mục chứa docker-compose.yml và config.yaml, cùng Docker volume chứa database và các encryption key. Hãy sao lưu chúng cùng nhau. config.yaml chứa key dùng để mã hóa dữ liệu trong store, vì vậy bản sao database không có key này sẽ không khôi phục được dữ liệu có thể đọc.
docker volume ls
docker compose down
sudo tar czf netbird-config.tgz -C ~ netbird
docker run --rm -v netbird_netbird_data:/data -v "$PWD":/backup \
alpine tar czf /backup/netbird-data.tgz -C /data .
docker compose up -dCompose thêm tiền tố là thư mục project vào tên volume, nên volume được ghi là netbird_data thường xuất hiện dưới tên netbird_netbird_data. Chạy docker volume ls trước và dùng tên mà lệnh in ra. Nếu không, docker run sẽ âm thầm tạo một volume rỗng và không archive được dữ liệu nào. Lưu các archive bên ngoài VPS. Nếu đã có công cụ sao lưu, restic hoặc BorgBackup có thể xử lý phần sao lưu offsite.
Nâng cấp server gồm pull image rồi recreate container:
docker compose pull
docker compose up -d
docker compose psTrước khi dựa vào quy trình này, hãy chạy docker compose config | grep image:. Mọi tag có giá trị latest nên được pin vào một version, vì cùng lý do bạn đã pin install script: bạn cần biết version nào đang chạy và cần có một version để quay lại khi nâng cấp gặp lỗi. Client được nâng cấp bằng package manager đã dùng để cài chúng.
FAQ
Tôi có cần identity provider riêng để tự host NetBird không?
Không. Các bản phát hành hiện tại có user store tích hợp sẵn, nên bạn tạo tài khoản admin đầu tiên trong trình duyệt tại https://netbird.example.com rồi thêm user từ dashboard. External OIDC provider là tùy chọn và có thể thêm sau bằng 4 giá trị: tên, client ID, client secret và issuer. Các hướng dẫn yêu cầu bạn triển khai Zitadel hoặc Keycloak trước NetBird mô tả một thiết lập không còn cần thiết, và làm theo chúng khiến bạn phải vận hành thêm một service.
Tại sao tất cả peer của tôi đều hiển thị Connection type: Relayed?
Kết nối trực tiếp không được thiết lập, nên traffic đi qua relay trên VPS của bạn. Nguyên nhân thường gặp là UDP 3478 bị chặn. Đây là STUN port mà peer dùng để phát hiện địa chỉ và port public của chính chúng. Hãy mở port này trên firewall của VPS và firewall mạng riêng của nhà cung cấp, sau đó chạy lại netbird status --detail và đọc dòng Direct:. Khi cả hai peer đều nằm sau NAT cấp một port khác nhau cho từng đích, trạng thái relayed là kết quả bình thường và không có gì bị cấu hình sai.
Client của tôi đã kết nối nhưng dashboard không hiển thị peer nào. Chuyện gì đã xảy ra?
Client đã đăng ký với hosted service của NetBird thay vì server của bạn. Điều này xảy ra khi --management-url bị bỏ qua. netbird status --detail in ra server mà client đang kết nối trên dòng Management:, nên giá trị như https://api.netbird.io:443 xác nhận điều đó. Chạy sudo netbird down, sau đó chạy sudo netbird up --management-url https://netbird.example.com, rồi peer sẽ xuất hiện trong dashboard.
NetBird tự host khác Headscale như thế nào?
Cả hai đều thay thế control server hosted bằng một server do bạn vận hành. Headscale chỉ là control plane: bạn quản lý nó bằng lệnh headscale và một config file, không có web console chính thức, và nó điều khiển các Tailscale client chính thức. NetBird có client riêng, admin dashboard và tích hợp identity provider trong cùng một stack. Headscale nhẹ hơn khi vận hành và lưu state trong các file. NetBird dễ bàn giao cho những người không dùng terminal hơn.
Server NetBird tự host cần VPS cấu hình thế nào?
Mức tối thiểu được tài liệu ghi rõ là 1 CPU và 2 GB memory, và bạn nên mua gói có 2 GB. Từ chối proxy service tùy chọn trong quá trình cài đặt; thao tác này cũng bỏ qua prompt của CrowdSec. Giữ SQLite store mặc định cho đến khi bạn thực sự cần PostgreSQL.