SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-29

Cara Self-Host Server VPN NetBird di VPS

Jalankan mesh VPN NetBird di satu VPS dengan DNS dan TLS, skrip quickstart yang dipatok, setup key untuk peer tanpa interaksi, serta perbandingan dengan Headscale.

Manfaat self-hosting server VPN NetBird

Self-hosting server VPN NetBird menempatkan control plane pada VPS milik Anda: komponen yang menyimpan daftar peer, menentukan mesin mana yang boleh mengakses mesin lain, dan membantu dua peer menemukan satu sama lain di balik NAT (network address translation). Tunnel itu sendiri tetap menggunakan WireGuard dan dienkripsi secara langsung di antara mesin Anda. Perubahannya adalah tidak ada perusahaan eksternal yang menyimpan inventaris perangkat atau alur login Anda. Pahami manfaat ini dengan jelas, karena control plane terkelola juga tidak pernah menyimpan key yang mengenkripsi trafik Anda, dan hal-hal yang sebenarnya dapat dilakukan coordination server jika disusupi lebih terbatas daripada yang diasumsikan banyak orang sebelum membacanya.

NetBird berada di antara dua konsep yang mungkin sudah Anda kenal. NetBird merupakan mesh overlay, sehingga peer terhubung satu sama lain dan tidak mengirim semua trafik melalui satu gateway. NetBird juga dapat di-self-host dari awal hingga akhir, sehingga menjadi alternatif untuk control server Tailscale yang dapat di-self-host, yaitu Headscale. Jika Anda baru pernah menjalankan tunnel dengan satu gateway, baca perbedaan antara WireGuard biasa dan mesh overlay terlebih dahulu, karena model mental tersebut membuat bagian lain dari halaman ini lebih mudah dipahami.

Jika yang sebenarnya Anda inginkan adalah satu server yang menjadi jalur keluar semua trafik Anda, mesh menyediakan lebih banyak komponen daripada yang diperlukan. VPN WireGuard biasa pada satu VPS atau exit node Tailscale dapat melakukan hal itu dengan lebih sedikit komponen yang harus dijalankan. Jika tujuannya adalah mengakses satu jaringan privat, bukan menghubungkan mesin satu sama lain, subnet router Tailscale pada VPS mengiklankan rentang jaringan tersebut ke tailnet yang sudah Anda miliki tanpa memerlukan stack di bawah ini.

Apa yang benar-benar dijalankan oleh stack

Tata letaknya baru-baru ini berubah, dan sebagian besar dokumentasi lama masih menjelaskan tata letak sebelumnya. Per Agustus 2026, pada rilis v0.76.2, skrip quickstart secara default menulis file Compose dengan tiga service.

  • netbird-server menangani management API, signal service, relay dengan STUN listener tertanam, serta identity provider tertanam. Pada rilis yang lebih lama, komponen-komponen ini berjalan dalam container terpisah, dan identity provider berupa instalasi Zitadel terpisah yang harus Anda buat terlebih dahulu.
  • dashboard adalah konsol web admin.
  • traefik melakukan terminasi TLS (transport layer security) dan meminta sertifikat dari Let's Encrypt saat pertama kali dijalankan.

Ada dua service tambahan yang tetap nonaktif kecuali Anda menyetujuinya pada prompt. NetBird Proxy service memublikasikan service internal pada hostname publik. CrowdSec memfilter trafik yang bersifat abusif. Keduanya tidak diperlukan untuk membangun mesh yang berfungsi, dan keduanya menggunakan memori pada server kecil.

Jika Anda sebelumnya menggunakan wg-easy dalam satu container Docker, jumlah komponennya kini jauh lebih banyak. Keuntungannya adalah tersedianya kebijakan akses dan akun per pengguna, serta peer yang terhubung langsung satu sama lain, bukan melalui satu gateway.

Yang Anda perlukan sebelum memulai

Nama domain publik bersifat wajib. Dashboard, API, dan relay semuanya menggunakan HTTPS pada port 443. Traefik memperoleh sertifikat dari Let's Encrypt menggunakan HTTP challenge, yang memerlukan nama domain yang mengarah ke VPS ini dari Internet publik. Alamat IP langsung tidak dapat digunakan dalam alur ini.

Buat satu record A, netbird.example.com yang mengarah ke alamat IPv4 publik VPS, lalu tunggu hingga record tersebut tersedia sebelum menjalankan apa pun.

dig +short netbird.example.com

Perintah tersebut harus menampilkan alamat server Anda. Jika installer dijalankan sebelum DNS selesai berpropagasi, permintaan sertifikat akan gagal saat pertama kali dijalankan. Validasi yang gagal berulang kali juga dapat mencapai batas laju Let's Encrypt, sehingga Anda harus menunggu satu jam sebelum mencoba lagi.

Tiga port harus dapat diakses dari Internet: TCP 80 untuk HTTP challenge dan pengalihan ke HTTPS, TCP 443 untuk dashboard, API, signal, dan trafik relay, serta UDP 3478 untuk STUN.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/udp
sudo ufw reload
sudo ufw status

Buka port tersebut pada firewall jaringan provider Anda juga. Pada sebagian besar panel VPS, firewall ini merupakan kontrol terpisah. Inilah alasan server yang konfigurasi ufw status-nya sendiri sudah benar tetap menolak koneksi.

STUN (session traversal utilities for NAT) digunakan peer untuk mengetahui alamat publik dan port yang ditetapkan NAT-nya, sehingga dua peer dapat mencoba membuat tunnel langsung. Jika UDP 3478 diblokir, peer tetap terhubung melalui relay pada TCP 443, sehingga tidak ada tanda kerusakan yang jelas. Sebagai gantinya, setiap peer menampilkan Connection type: Relayed, dan seluruh trafik melewati VPS Anda, bukan langsung dari peer ke peer.

Pada sisi perangkat lunak, Anda memerlukan Docker dengan plugin Compose v2, serta jq dan curl. Script memeriksa semuanya dan berhenti jika salah satunya tidak tersedia. Jika Docker baru dipasang pada server ini, ikuti Menjalankan Docker Compose pada VPS terlebih dahulu.

Port jika Anda melewati reverse proxy bawaan

Menjalankan layanan tanpa Traefik berarti setiap service diekspos secara langsung, sehingga daftar port menjadi lebih panjang:

  • TCP 80, pengalihan HTTP
  • TCP 443, HTTPS
  • TCP 33073, gRPC manajemen
  • TCP 10000, gRPC signal
  • TCP 33080, relay melalui WebSocket atau QUIC
  • UDP 3478, STUN

Pilih opsi ini hanya jika server tersebut sudah menangani TLS untuk layanan lain. Jika tidak, Traefik bawaan memerlukan lebih sedikit aturan dan mengurangi risiko kesalahan.

Instal server NetBird dengan skrip quickstart

One-liner yang didokumentasikan menyalurkan release terbaru langsung ke shell:

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

Tetapkan versinya. latest berubah, sehingga perintah yang sama jika dijalankan dengan selang dua minggu menghasilkan dua instalasi berbeda, dan tidak ada catatan di disk tentang instalasi mana yang menulis konfigurasi Anda. Unduh release yang memiliki tag, baca isinya, lalu jalankan.

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.sh

Skrip terlebih dahulu meminta domain:

Enter the domain you want to use for NetBird (e.g. netbird.my-domain.com):

Kemudian skrip menanyakan cara menangani 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):

Pilih [0]. Opsi 2 hingga 5 menulis potongan konfigurasi dan menyerahkan pengaturannya kepada Anda. Ini tepat untuk server yang sudah menjalankan proxy, tetapi tidak tepat untuk server baru. Opsi 0 kemudian meminta alamat email Let's Encrypt yang digunakan untuk pemberitahuan kedaluwarsa.

Pada instalasi pertama, jawab tidak untuk service NetBird Proxy. Service ini memerlukan dua record DNS tambahan, proxy.netbird.example.com dan wildcard *.proxy.netbird.example.com, serta tidak diperlukan untuk mesh biasa. Jawab tidak untuk CrowdSec juga. Keduanya dapat ditambahkan nanti.

Skrip menulis file ke direktori saat ini: docker-compose.yml, config.yaml dengan mode 600, dashboard.env, dan traefik-dynamic.yaml jika Anda memilih Traefik bawaan. Perlakukan direktori tersebut sebagai state yang harus disimpan, karena config.yaml berisi key yang mengenkripsi data di dalam store. Kehilangan file ini tidak dapat diperbaiki dengan melakukan reinstall.

docker compose ps
docker compose logs -f netbird-server

Setiap service harus dapat membaca running, dan log server harus berhenti bertambah tanpa service restart berulang kali. Pantau sertifikat secara terpisah:

docker compose logs traefik | grep -i acme

ACME (automatic certificate management environment) adalah protokol yang digunakan Traefik untuk memperoleh sertifikat. Error di sini hampir selalu disebabkan oleh DNS atau port 80 yang tertutup.

Buat akun admin pertama

Buka https://netbird.example.com. Pada instalasi baru, alamat ini menampilkan halaman penyiapan, bukan formulir login. Masukkan alamat email, nama, dan kata sandi, lalu klik Create Account. Akun tersebut menjadi admin pertama, kemudian halaman dialihkan ke formulir login.

Akun tersebut disimpan di penyimpanan pengguna milik NetBird sendiri, yang dijalankan oleh identity provider di dalam container netbird-server. Tidak ada komponen eksternal yang digunakan. Ini merupakan perubahan terbesar dibandingkan NetBird self-hosted setahun lalu. Saat itu, instalasi yang berfungsi mengharuskan Anda menyiapkan Zitadel atau Keycloak terlebih dahulu, lalu menyalin empat nilai OIDC (OpenID Connect) ke setup.env sebelum layanan apa pun dapat berjalan.

Jika browser menampilkan peringatan sertifikat, bukan halaman penyiapan, berarti sertifikat gagal diterbitkan. Perbaiki masalah tersebut sebelum melanjutkan. Dashboard berkomunikasi dengan API melalui hostname yang sama dan dapat gagal dengan cara yang membingungkan jika sertifikat bermasalah.

Bergabung dengan peer pertama Anda

Instal client pada mesin Linux mana pun, termasuk VPS itu sendiri jika Anda ingin memasukkannya ke dalam mesh:

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

Pada Debian dan Ubuntu, skrip tersebut mengonfigurasi repositori paket NetBird, lalu menginstal client melalui apt. Dengan demikian, package manager tetap mengelola client tersebut. Jika Anda tidak ingin menyalurkan skrip langsung ke shell, simpan terlebih dahulu dengan curl -fsSL -o install.sh https://pkgs.netbird.io/install.sh dan baca isinya sebelum menjalankan sh install.sh. Apa pun pilihannya, konfirmasikan komponen yang terpasang:

apt-cache policy netbird

netbird adalah client command line dan daemon. netbird-ui adalah aplikasi desktop tray, dan server headless tidak memerlukannya.

Sekarang arahkan client ke server Anda:

sudo netbird up --management-url https://netbird.example.com

Abaikan --management-url jika tidak ingin melakukannya, dan client akan mendaftar ke layanan hosted NetBird karena itu adalah default yang sudah dikompilasi. Perintah tersebut tetap berhasil, mesin tetap memperoleh alamat, dan dashboard self-hosted Anda tetap kosong. Kesalahan ini hampir selalu terjadi setidaknya sekali.

Perintah tersebut menampilkan URL yang harus dibuka di browser untuk menyelesaikan login. Setelah itu:

netbird status
ip addr show wt0

Baca empat baris dari netbird status: Management: Connected, Signal: Connected, baris Relays: yang melaporkan semua relay yang tersedia, dan NetBird IP: dalam rentang overlay. wt0 adalah interface WireGuard yang dibuat NetBird, dan interface tersebut seharusnya menggunakan alamat yang sama.

Bergabung ke mesin kedua secara otomatis dengan setup key

Login melalui browser tidak dapat digunakan pada mesin yang tidak memiliki browser dan tidak ada orang yang mengoperasikannya. Setup key adalah token pr autentikasi yang mendaftarkan mesin tanpa langkah interaktif. Buat setup key di dashboard melalui Setup Keys.

Ada dua jenis setup key. One-off key mengautentikasi tepat satu mesin, lalu tidak dapat digunakan lagi. Reusable key dapat mendaftarkan banyak mesin, dengan batas jumlah opsional. Keduanya memiliki masa berlaku, dan keduanya dapat otomatis menetapkan peer baru ke sebuah grup, sehingga aturan akses pada grup tersebut langsung berlaku saat mesin muncul.

sudo netbird up --setup-key <SETUP-KEY> \
  --management-url https://netbird.example.com \
  --hostname build-runner-01

--hostname menetapkan nama yang ditampilkan di dashboard. Tanpa opsi ini, peer menggunakan nama yang diberikan mesin untuk dirinya sendiri, dan sekumpulan entri yang semuanya bernama ubuntu tidak membantu siapa pun.

Untuk container dan build agent yang berumur singkat, tandai key sebagai ephemeral saat membuatnya. Peer yang didaftarkan dengan ephemeral key akan dihapus secara otomatis setelah offline selama lebih dari 10 minutes. Dengan demikian, entri yang sudah tidak aktif tidak memenuhi daftar peer.

Pahami satu batasan ini sebelum mengandalkan setup key: kedaluwarsa atau penghapusan key menghentikan pendaftaran baru, tetapi tidak memutus koneksi mesin yang sudah terdaftar dengannya. Untuk mencabut akses mesin, hapus peer tersebut.

Apakah Anda masih memerlukan identity provider terpisah?

Untuk instalasi kecil, tidak. Penyimpanan pengguna bawaan menangani akun yang dibuat dari dashboard, dan itu sudah cukup untuk beberapa orang.

Anda memerlukan identity provider eksternal jika sudah memilikinya dan tidak ingin mengelola daftar pengguna kedua. NetBird menerima provider apa pun yang mendukung OIDC. Daftarkan client OIDC rahasia pada provider Anda, lalu tambahkan client tersebut di dashboard NetBird dengan empat nilai: nama, client ID, client secret, dan issuer. NetBird akan memberikan URL pengalihan untuk ditempelkan kembali pada provider. Integrasi khusus tersedia untuk Google, Microsoft Entra ID, Okta, Zitadel, Keycloak, Authentik, dan Pocket ID. Provider lain dapat ditambahkan sebagai OIDC generik. Jika Anda sudah menjalankan Authentik sebagai single sign-on yang di-host sendiri, gunakan cara ini agar hanya ada satu daftar akun, bukan dua.

Login lokal tetap tersedia setelah Anda menambahkan provider, dan setiap provider yang dikonfigurasi akan ditampilkan pada halaman login. Pertahankan satu akun admin lokal dengan kata sandi yang kuat. Jika konfigurasi OIDC bermasalah, Anda tetap memiliki cara untuk masuk.

NetBird atau Headscale: control plane mana yang harus Anda jalankan?

Keduanya menghapus dependensi yang sama, yaitu control server ter-hosting yang biasanya dihubungi client Anda. Namun, bentuk kedua project ini berbeda.

Headscale mengimplementasikan ulang control server Tailscale, dan Anda tetap menggunakan client Tailscale resmi. Tidak ada web console resmi. Anda mengelola user dan pre-authentication key dengan perintah headscale terhadap file konfigurasi. Web interface dari komunitas tersedia, tetapi bukan bagian dari project ini. Pendekatan tersebut cocok bagi pengguna yang ingin menyimpan state dalam file dan mengelola perubahannya melalui version control.

NetBird menyediakan seluruh produk: client sendiri, dashboard sendiri, identity provider tersemat, serta access policy yang diedit melalui browser. Ini menambah jumlah komponen pada VPS Anda, tetapi jauh lebih mudah diserahkan kepada rekan kerja yang tidak akan membuka terminal.

Jalankan Headscale jika Anda sudah menggunakan client Tailscale atau menginginkan control plane sekecil mungkin. Jalankan NetBird jika beberapa orang perlu mengelola peer dan Anda menginginkan console serta SSO tanpa harus merakitnya sendiri. Sebelum memilih salah satunya, periksa cakupan sebenarnya dari paket gratis Tailscale, karena grup yang terdiri atas maksimal enam user dengan perangkat tanpa batas tidak perlu membayar control plane ter-hosting dan mungkin sama sekali tidak memiliki alasan untuk menjalankannya. Setelah melewati batas tersebut, biaya bertambah berdasarkan jumlah orang, bukan jumlah mesin. Karena itu, hitung biaya Tailscale untuk grup Anda untuk membandingkannya dengan biaya VPS dan waktu yang diperlukan stack ini.

Seberapa kecil VPS yang dapat menjalankan ini?

Minimum yang didokumentasikan adalah 1 CPU dan 2 GB memori. Catatan NetBird sendiri menyebutkan bahwa batas minimum saat ini mendekati 1 GB RAM karena manajemen pengguna sekarang bersifat lokal. Sebelumnya, tata letak yang memerlukan deployment Zitadel lengkap membutuhkan 2 GB hingga 4 GB. Gunakan 2 GB. Ruang tambahan ini memungkinkan proses upgrade mengunduh image baru saat image lama masih tersimpan di disk.

Tiga hal berikut aman untuk tidak disertakan pada server dengan sumber daya terbatas. Jangan aktifkan service NetBird Proxy. Service ini digunakan untuk memublikasikan service internal pada hostname publik dan tidak berkaitan dengan koneksi antarklien. Jangan aktifkan CrowdSec. Anda dapat menambahkannya nanti pada server yang terekspos, bukan sejak hari pertama. Pertahankan penyimpanan SQLite default pada volume netbird_data. Gunakan PostgreSQL hanya jika deployment dibagi ke beberapa mesin atau terjadi konkurensi nyata. Dokumentasi menyebutkan bahwa migrasi tersebut dapat dilakukan nanti.

Relay adalah satu-satunya komponen yang tidak dapat dihilangkan. Dua peer yang NAT-nya menetapkan port berbeda untuk setiap tujuan tidak akan pernah berhasil membuat tunnel langsung. Karena itu, relay adalah satu-satunya jalur yang memungkinkan keduanya tetap berfungsi. Menonaktifkan relay hanya menghemat sedikit memori dan memutus koneksi dengan cara yang sulit dilacak.

Jika satu server tidak lagi mencukupi, relay adalah komponen pertama yang sebaiknya dipindahkan. Relay mandiri berjalan dengan NB_LISTEN_ADDRESS, NB_EXPOSED_ADDRESS, NB_AUTH_SECRET, dan NB_ENABLE_STUN. Shared secret harus identik pada relay dan server utama. Jika tidak, klien gagal melakukan autentikasi ke relay tersebut.

Mode kegagalan dan hal yang akan Anda lihat

Dasbor menampilkan peringatan sertifikat. Traefik tidak memperoleh sertifikat. Jalankan docker compose logs traefik | grep -i acme. Ada dua penyebab. dig +short netbird.example.com belum mengarah ke VPS ini, atau TCP 80 tertutup di suatu titik antara Let's Encrypt dan container, biasanya pada firewall jaringan provider, bukan pada ufw. Perbaiki penyebabnya sebelum mencoba ulang dalam loop, karena validasi yang gagal terkena pembatasan laju dan Anda tidak dapat mencoba lagi selama satu jam.

Klien menyatakan telah terhubung, tetapi dasbor kosong. Klien mendaftarkan diri ke service hosted NetBird karena --management-url tidak ada. Jalankan netbird status --detail dan baca baris Management:, yang menunjukkan server yang benar-benar dihubungi. Jika terlihat Management: Connected to https://api.netbird.io:443, berarti klien terhubung ke cloud. Jalankan sudo netbird down, lalu sudo netbird up --management-url https://netbird.example.com lagi.

Setiap peer menunjukkan Connection type: Relayed. Tidak ada tunnel langsung yang terbentuk, sehingga seluruh trafik melewati VPS dan menambah satu hop latensi. Periksa UDP 3478 pada firewall VPS dan firewall provider, karena STUN memungkinkan peer mengetahui alamat publik dan port-nya sendiri. netbird status --detail juga menampilkan Direct: false serta jenis kandidat ICE (interactive connectivity establishment) untuk setiap peer. Informasi ini menunjukkan sejauh mana upaya koneksi berhasil. Pada beberapa jaringan, relayed adalah satu-satunya hasil yang tersedia dan tidak ada masalah.

Sebuah peer bergabung tetapi tidak dapat menjangkau apa pun. Berada dalam mesh tidak berarti dua peer dapat saling berkomunikasi. Kebijakan akses menentukan hal tersebut, dan group tanpa kebijakan yang terpasang tidak dapat menjangkau apa pun. Periksa kebijakan di dasbor sebelum mulai melakukan debugging terhadap route dan firewall.

netbird status melaporkan masalah daemon. Service tidak berjalan. Gunakan sudo netbird service status dan sudo netbird service start. Log klien berada di /var/log/netbird/client.log. Jika Anda tidak dapat menentukan penyebabnya, netbird debug bundle --anonymize --system-info mengumpulkan log, status, route, pengaturan DNS, dan status firewall ke dalam satu arsip.

Pencadangan dan pemutakhiran

Dua hal menopang seluruh instalasi: direktori yang berisi docker-compose.yml dan config.yaml, serta volume Docker yang menyimpan database dan kunci enkripsi. Cadangkan keduanya secara bersamaan. config.yaml menyimpan kunci yang mengenkripsi data di penyimpanan, sehingga salinan database tanpa kunci tersebut tidak dapat dipulihkan menjadi data yang dapat dibaca.

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 -d

Compose menambahkan awalan direktori proyek pada nama volume, sehingga volume yang didokumentasikan sebagai netbird_data biasanya muncul sebagai netbird_netbird_data. Jalankan docker volume ls terlebih dahulu dan gunakan nama yang ditampilkan, atau docker run di atas akan gagal dengan membuat volume kosong secara diam-diam dan tidak mengarsipkan apa pun. Simpan arsip di luar VPS. Jika Anda sudah memiliki alat pencadangan, restic atau BorgBackup dapat menangani pencadangan ke lokasi di luar server.

Pemutakhiran server dilakukan dengan melakukan pull lalu membuat ulang container:

docker compose pull
docker compose up -d
docker compose ps

Sebelum mengandalkan perintah tersebut, jalankan docker compose config | grep image:. Setiap tag yang bertuliskan latest harus dikunci ke versi tertentu, dengan alasan yang sama seperti saat Anda mengunci skrip instalasi: Anda perlu mengetahui apa yang sedang berjalan dan memiliki versi untuk dikembalikan jika pemutakhiran menimbulkan masalah. Client diperbarui melalui package manager yang digunakan untuk menginstalnya.

FAQ

Apakah saya memerlukan identity provider sendiri untuk melakukan self-hosting NetBird?

Tidak. Rilis saat ini menyertakan user store bawaan. Anda dapat membuat akun admin pertama melalui browser di https://netbird.example.com, lalu menambahkan pengguna dari dashboard. OIDC provider eksternal bersifat opsional dan dapat ditambahkan nanti menggunakan empat nilai: nama, client ID, client secret, dan issuer. Panduan yang meminta Anda men-deploy Zitadel atau Keycloak sebelum NetBird menjelaskan setup yang tidak lagi diperlukan. Jika diikuti, panduan tersebut membuat Anda harus menjalankan satu service tambahan.

Mengapa semua peer saya menampilkan Connection type: Relayed?

Koneksi langsung tidak terbentuk, sehingga trafik melewati relay pada VPS Anda. Penyebab yang umum adalah UDP 3478 diblokir. Port tersebut digunakan STUN untuk menemukan alamat dan port publik peer. Buka port itu pada firewall VPS dan firewall jaringan terpisah milik provider Anda. Setelah itu, jalankan netbird status --detail lagi dan baca baris Direct:. Pada jaringan yang menetapkan port berbeda untuk setiap tujuan melalui NAT, status relayed adalah satu-satunya hasil yang mungkin. Tidak ada konfigurasi yang salah.

Client saya terhubung, tetapi dashboard tidak menampilkan peer. Apa yang terjadi?

Client terdaftar pada hosted service NetBird, bukan pada server Anda. Hal ini terjadi ketika --management-url tidak disertakan. netbird status --detail menampilkan server yang sedang dihubungi pada baris Management:. Nilai seperti https://api.netbird.io:443 mengonfirmasi hal tersebut. Jalankan sudo netbird down, lalu sudo netbird up --management-url https://netbird.example.com. Setelah itu, peer akan muncul di dashboard Anda.

Apa perbedaan NetBird self-hosted dan Headscale?

Keduanya menggantikan control server hosted dengan server yang Anda jalankan sendiri. Headscale hanya menyediakan control plane. Anda mengelolanya menggunakan perintah headscale dan file konfigurasi. Tidak ada konsol web resmi, dan Headscale mengendalikan Tailscale client resmi. NetBird menyediakan client sendiri, admin dashboard, dan integrasi identity provider dalam stack yang sama. Headscale lebih kecil untuk dijalankan dan menyimpan state dalam file. NetBird lebih mudah diberikan kepada pengguna yang tidak akan menggunakan terminal.

VPS dengan spesifikasi berapa yang diperlukan server NetBird self-hosted?

Minimum yang didokumentasikan adalah 1 CPU dan memori 2 GB. Gunakan VPS dengan kapasitas 2 GB. Kebutuhan praktis turun menjadi sekitar 1 GB pada rilis terbaru karena identity provider kini tertanam, bukan deployment terpisah. Jangan mengaktifkan proxy dan service CrowdSec opsional selama instalasi. Gunakan SQLite store bawaan sampai Anda benar-benar memerlukan PostgreSQL.