自托管需 Docker 及 Compose v2 以上版本,且必须有公网域名和开放 80/443/3478 端口;客户端需先安装并注册到管理服务才能组网;提交问题前需先在 Discussions 中反馈而非直接开 issue。

netbird
netbirdio活跃维护基于 WireGuard 的点对点零信任网络平台,用统一身份把人员、机器和 AI 代理安全接入任意网络,无需复杂 VPN 配置。
NetBird securely connects people, machines and AI agents across any network with one identity-based Zero Trust platform. Powered by peer-to-peer WireGuard®
export NETBIRD_DOMAIN=netbird.example.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bash自托管需一台至少 1 CPU、2 GB 内存的 Linux VM,公网开放 TCP 80/443 与 UDP 3478,并准备指向该 VM 的域名;客户端侧 README 未说明具体硬件或显存要求。
基于 WireGuard 的点对点私有网络与集中访问控制平台,免开端口免配防火墙
基于 WireGuard 的点对点零信任网络平台,用统一身份把人员、机器和 AI 代理安全接入任意网络,无需复杂 VPN 配置。
核心能力
- 用 WireGuard 建立加密覆盖网络,自动打通机器间隧道
- 通过 ICE/STUN 协商点对点连接,NAT 失败时回退中继
- 集中管理分组与访问规则,支持 SSO、MFA 与设备姿态检查
- 提供自托管快速启动脚本与 Terraform、Ansible 自动化
- 覆盖 Linux、macOS、Windows、iOS、Android 及容器等多平台
容易踩的坑
- v0.83.0-rc.1pre-release2026-11-09 · 2026-11-09 18:16 UTC
查看更新说明
Changelog
- e4fd2311293460fd0fa9ff0e6884601f2d62aebe [management,proxy] Attribute agent network errors in access logs (#8460)
- 5a4bfab65357eb3de4583894cea14b2aff79a32a [self-hosted,misc] Add Viper-backed config loader for the combined server (#8108)
- 2d3c816ae7ae902b02e00d255273527c190ee403 [client] Add profile ownership and IPC authz (#7407)
- 0270bfa8641eb4cbac3813ffe74a57fb8be813a0 [doc] Expand repository contribution guidance (#7946)
- fc3711687a2d39825b8d45c2c6479aa1571900dc [proxy] Renew cached ACME certificates and report expiry (#8524)
- 8dc1e2aed65904b7451d6d88fb2972e0ec0ab799 [management] Stop peer expiration jobs when expiration is disabled for the account (#8521)
- 76797c864eefa98c9fc34f7c8baff445105643ae [management] limit resource policy store call (#8522)
- 772d0b86f8662f898c6d434b24c25bd7893dbddc [client, ios] Add RefreshWireGuardStats to the iOS SDK (#8509)
- 91f4ad04b6cf41107c3023a73b041a4c2a07f409 [management] Restyle the MCP consent page and leave write unticked (#8502)
- 14911a26806ba20a165c77e43ba5d712cc6118e7 [management] Catch drift between the MCP catalog and the OpenAPI spec (#8498)
- 6a6d21754ab36b9db804f5f29f50de898f24f682 [management] Record MCP sign-ins in the activity log (#8499)
- d77bd2354cc770b0659299d9457cf8cd1222bfb2 [client, ios] Do not wait for the utun to be removed on engine stop (#8471)
- 4e266e3502861bd0bda67645785ab1f2aa9d287e [client,ios] Preserve credentials when login checks cannot reach management (#8202)
- 794913206ea860cd1c520c01c5d61c09a59857d1 [management] Serve the REST API as an MCP server (#8335)
- 3160255d70ff190f727d85a63e8b665ab2aeff00 [management] Add an OAuth 2.1 broker for MCP clients (#8334)
- d3d872ea1d70e37b01f36ccc344ddc0c6285ee62 [management] Scope group resource references to the owning account (#8474)
- 145bfca1fddd75b70c4e0a14b2ba4091f8f4110c [proxy] Report LLM token usage as metrics (#8481)
- 313f71fb42a7d8b215f06486c67c97dadfde934a [misc] Make the skip-latest tests independent of their environment (#8468)
- 2f5b9cacafd2f35e22749b9b510115df5f085391 [client] Use a destination Windows refuses in the UDP dial error test (#8480)
- 3c996c91dda48e722c4b735f8d1028beda02cb79 [management] extract peer connection to separate tables (#8426)
- ad8c1cc9569cc410914aa4f8307c75d424df80bc [client] Match peer rule protocols behind IPv6 extension headers in nftables (#8451)
- 45a3bcb6c59f691a9bf26bdd03779045eb7c0c52 [client] Drop forwarded traffic that would leave through the interface it arrived on (#8440)
- 4db6fb7a031c7526fd33c635db821808a58b4a7a [client] Default the SSH server to off for stored configs without a peer key (#8448)
- e2af49047c56cc5e0a4f6aa22dbc3c78f0f3b0b0 [client] Remove a peer from the interface when it leaves the network map while its lazy connection is idle (#8449)
- b839159538ae65e59717b3d3a931113de64c3b47 [client] Start the SSH server's SFTP subprocess through su like session commands, so nologin and expired accounts are refused (#8394)
- caf50c8cecc6d41f66dcec7808f24bf528d057ec [misc] Bump the signing pipeline to v0.1.9 (#8466)
- f7908340c4f1e27b45f051835f3fd73cbf31d398 [misc] Don't move latest for a patch on an older release line (#8215)
- 21606828b91f7d4d679dca701b96cf6c64b8bc76 [management] Enforce account id on proxy update (#8419)
- ef987dc7b8a001eb9ecf1ae5658e03555b3d7ef1 [management] Add a hard deadline to update debouncer to signal pending updates (#8437)
- 65f833fe6a329db27b884e5005941c16a2ee65c6 [misc] Stop dispatching the mobile client submodule bumps on release tags (#8347)
- 99cc59d637397ab4658aef03f07bcda026a1b6a6 [infrastructure] Fix Enterprise migration with env-provided secret (#8436)
- 801ca163088b79d34088c58cdc2cd42e78a47473 [management] Ensure configure.sh does not clear the DataStoreEncryptionKey value (#5258)
- 7d0f15965e0c8289e54b03708b89348cbf3a08fb [client,ios] Report network loss through the existing recovery callback (#7716)
- 5b55b834bfba5f905acc93d1618f7d14d14f8168 [management] Skip writes and network map updates for u
- v0.82.0最新正式版2026-10-29 · 2026-10-29 13:56 UTC
Release Notes for v0.82.0
Highlights
🛣️ Latency-aware HA routing that holds stable routes
Routing peers in an HA group with equal metrics are meant to be chosen by latency, but the client used to sample latency only once, when the connection was set up, and moved the route on events that did not need it. Every switch between masquerading routing peers resets the TCP connections using the route, so SSH sessions and other long-lived flows dropped more often than they had to.
The client now samples the latency of connected routing peers continuously and smooths it, and moves a route for latency only when the gain clears a margin: at least 20ms, 20% of the current latency, and the measurement noise of both paths. After a latency-driven switch it keeps the new peer for at least 30 seconds. A routing peer that drops from direct to relay keeps the route for a grace period before it moves to an equivalent direct peer, and a peer that comes up over relay first is held the same way while the others turn direct. Failover, better metrics and connected-over-idle still switch immediately.
The grace period is set on the client with
NB_HA_RELAYED_SWITCH_DELAY(a duration,0, ornever; default30s). Routing peer switches are now logged at warning level with the reason and published as system events, so they show innetbird status -dand in debug bundles.📖 High availability for routing peers · #7689, #8192
📋
netbird status --tablenetbird status --table(-t) lists peers in a table with their name, IP, status, connection type, latency and traffic, which is easier to scan than the detailed output on a large network. It works with the existing filter flags, sonetbird status -t -S connected -T P2Pshows only connected peer-to-peer peers.Peers (3/5 connected): NAME IP STATUS CONN LATENCY RX / TX web-01 100.64.0.12 Connected P2P 12ms 1.2 MiB / 3.4 MiB db-01 100.64.0.15 Connected Relayed 48ms 54.0 KiB / 12.1 KiB ci-runner 100.64.0.40 Connecting - - 0 B / 0 B--tablecannot be combined with-d,--json,--yaml,--ipv4or--ipv6.📖 CLI: status, table view · #8305
🗄️ A dedicated database for reverse proxy access logs
Reverse proxy access logs are now read and written through their own database connection instead of the main store's, and can live in a separate database. Nothing needs to change on upgrade: by default the access log store follows the main store engine, as a separate
access_logs.dbfile in the data directory on SQLite, or the main store DSN through its own connection pool on PostgreSQL.To point it elsewhere, set
server.accessLogStore(engine,dsn,file) in the combined server'sconfig.yaml, or the environment variables below:Variable Purpose NB_ACCESS_LOG_STORE_ENGINEsqliteorpostgresNB_ACCESS_LOG_POSTGRES_DSNa dedicated PostgreSQL database NB_ACCESS_LOG_SQLITE_FILEthe SQLite file, access_logs.dbby defaultNB_ACCESS_LOG_SQL_MAX_OPEN_CONNSpool size, falling back to NB_SQL_MAX_OPEN_CONNS📖 Reverse proxy access logs · #8303
Removal: MySQL store
The MySQL store engine for management, deprecated in v0.81.0, is removed. A management server configured with the
mysqlengine refuses to start on v0.82.0 and points to the migration guide.**Migrate to PostgreSQL
- v0.82.0-rc.1pre-release2026-10-26 · 2026-10-26 18:16 UTC
查看更新说明
Breaking changes
- MySQL has been removed. To upgrade, you must follow the migration docs to postgres: https://docs.netbird.io/selfhosted/migration/mysql-to-postgresql
- Reverse proxy access logs move to their own database. Nothing to configure: by default they follow your main store (a separate
access_logs.dbon SQLite, the same DSN on PostgreSQL). A new optionalaccessLogStoresection lets you point them elsewhere. This means logs will stay in the old database file, but the dashboard/management API will only report from the new one.
Deprecation notice
- Rosenpass will be marked as deprecated, and a replacement is in the final testing phase
What's Changed
- [client] Bump wireguard-go to bd0cb75a3df0 by @pappz in https://github.com/netbirdio/netbird/pull/8229
- [management] Return the reason when custom domain validation fails by @thomashacker in https://github.com/netbirdio/netbird/pull/8122
- [client,relay] Bump quic-go to v0.64.0 by @riccardomanfrin in https://github.com/netbirdio/netbird/pull/8249
- [misc] Fix errcheck findings from the latest golangci-lint by @lixmal in https://github.com/netbirdio/netbird/pull/8251
- New Crowdin updates by @netbirddev in https://github.com/netbirdio/netbird/pull/8101
- [client] Add Hebrew to the language picker by @thomashacker in https://github.com/netbirdio/netbird/pull/8102
- [client] Avoid Signal reconnect listener shutdown deadlock by @mlsmaycon in https://github.com/netbirdio/netbird/pull/8257
- [management] Add support for pagination in GetAllPeers call by @dmitri-netbird in https://github.com/netbirdio/netbird/pull/8190
- [misc] Announce tag-pushed releases on the forum by @riccardomanfrin in https://github.com/netbirdio/netbird/pull/8265
- [client] Fix grammatical error in post-install message by @alireza-hdri in https://github.com/netbirdio/netbird/pull/8242
- [management] Mask credentials in logged URLs by @bcmmbaga in https://github.com/netbirdio/netbird/pull/8250
- [client] Keep the resolv.conf watch armed while repairing DNS in file mode by @riccardomanfrin in https://github.com/netbirdio/netbird/pull/8207
- [client] Drop the non-functional admin URL by @mlsmaycon in https://github.com/netbirdio/netbird/pull/8267
- [misc] Let suites outside the module reach the e2e harness network by @mlsmaycon in https://github.com/netbirdio/netbird/pull/8260
- [management] Remove the MySQL store engine by @bcmmbaga in https://github.com/netbirdio/netbird/pull/7914
- [relay] Negotiate the protocol version on the server side by @pappz in https://github.com/netbirdio/netbird/pull/8231
- [client] Migrate the desktop UI to Tailwind CSS 4 and fix frontend npm audit findings by @heisbrot in https://github.com/netbirdio/netbird/pull/8277
- [management] Use account owner as inviter for service user invites by @bcmmbaga in https://github.com/netbirdio/netbird/pull/8276
- [management] Make EDR sync interval configurable by @bcmmbaga in https://github.com/netbirdio/netbird/pull/8273
- [management] Give the /api/setup owner account the single account mode domain by @smrrazavian in https://github.com/netbirdio/netbird/pull/8147
- [client] Stop the service and UI before the NSIS installer extracts files by @emrcbrn in https://github.com/netbirdio/netbird/pull/8255
- [infrastructure] Increase WASM build size to 70MB by @theodorsm in https://github.com/netbirdio/netbird/pull/8281
- [client] Remove the replace directives from the embedded client by @lixmal in https://github.com/netbirdio/netbird/pull/8280
- [management] Skip inactivity expiration rescan on connect when a job is scheduled by @mlsmaycon in https://github.com/netbirdio/netbird/pull/8287
- [management] Add additional indexes for groups, events, pats and access logs by @pascal-fischer in https://github.com/netbirdio/netbird/pull/8289
- [management] reduce calls to update last usage for users and pats by @pascal-fischer in https://github.com/netbirdio/netbird/pull/8290
- [management] remove ac
- v0.81.52026-10-26 · 2026-10-26 17:38 UTC
查看更新说明
What's Changed
- [client] Validate and bound SSH session requests and channels (#8344) by @lixmal in https://github.com/netbirdio/netbird/pull/8368
- [client] Bound the SSH session request queue and keep resizes from blocking the session loop (#8363) by @lixmal in https://github.com/netbirdio/netbird/pull/8369
Full Changelog: https://github.com/netbirdio/netbird/compare/v0.81.4...v0.81.5
- v0.81.42026-10-24 · 2026-10-24 11:24 UTC
查看更新说明
What's Changed
- [client] Drop SSH privileges through libc in PKCS#11 package builds (https://github.com/netbirdio/netbird/pull/8323) (https://github.com/netbirdio/netbird/pull/8331)
- [client,proxy,management,signal,relay] Distrust compromised eMudhra CA keys (#8326) by @mlsmaycon in https://github.com/netbirdio/netbird/pull/8328
- [client] Drop SSH privileges through libc in PKCS#11 package builds (#8323) by @lixmal in https://github.com/netbirdio/netbird/pull/8331
Full Changelog: https://github.com/netbirdio/netbird/compare/v0.81.3...v0.81.4
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
🤖 NetBird Agent Network (Beta)
Identity-aware access control for AI agents — keyless access to LLM APIs and private resources over the encrypted NetBird tunnel. See
agent-network/or read the docs at netbird.ai.
NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.
Connect. NetBird creates a WireGuard-based overlay network that automatically connects your machines over an encrypted tunnel, leaving behind the hassle of opening ports, complex firewall rules, VPN gateways, and so forth.
Secure. NetBird enables secure remote access by applying granular access policies while allowing you to manage them intuitively from a single place. Works universally on any infrastructure.
https://github.com/user-attachments/assets/10cec749-bb56-4ab3-97af-4e38850108d2
Self-host NetBird (video)
Key features
| Connectivity | Management | Security | Automation | Platforms |
|---|---|---|---|---|
| ✓ Kernel WireGuard | ✓ Admin Web UI | ✓ SSO & MFA support | ✓ Public API | ✓ Linux |
| ✓ Peer-to-peer connections | ✓ Auto peer discovery and configuration | ✓ Access control: groups & rules | ✓ Setup keys for bulk provisioning | ✓ macOS |
| ✓ Connection relay fallback | ✓ IdP integrations | ✓ Activity logging | ✓ Self-hosting quickstart script | ✓ Windows |
| ✓ Routes to external networks | ✓ Private DNS | ✓ Traffic events | ✓ IdP groups sync with JWT | ✓ Android |
| ✓ Domain-based DNS routes | ✓ Custom DNS zones | ✓ Device posture checks | ✓ Terraform provider | ✓ Android TV |
| ✓ Exit nodes | ✓ Multiuser support | ✓ Peer-to-peer encryption | ✓ Ansible collection | ✓ iOS |
| ✓ IPv6 dual-stack overlay | ✓ Multi-account profile switching | ✓ SSH with central access policies | ✓ Apple TV | |
| ✓ Browser SSH & RDP | ✓ Quantum-resistance with Rosenpass | ✓ FreeBSD | ||
| ✓ Reverse proxy with auto-TLS | ✓ Periodic re-authentication | ✓ pfSense | ||
| ✓ OPNsense | ||||
| ✓ MikroTik RouterOS | ||||
| ✓ OpenWRT | ||||
| ✓ Synology | ||||
| ✓ TrueNAS | ||||
| ✓ Proxmox | ||||
| ✓ Raspberry Pi | ||||
| ✓ Serverless | ||||
| ✓ Container |
Quickstart with NetBird Cloud
- Download and install NetBird at https://app.netbird.io/install.
- Follow the steps to sign up with Google, Microsoft, GitHub or your email address.
- Check the NetBird admin UI.
Quickstart with self-hosted NetBird
This is the quickest way to try self-hosted NetBird. It should take around 5 minutes to get started if you already have a public domain and a VM. Follow the Advanced guide with a custom identity provider for installations with different IdPs.
Infrastructure requirements:
- A Linux VM with at least 1 CPU and 2 GB of memory.
- The VM should be publicly accessible on TCP ports 80 and 443 and UDP port 3478.
- A public domain name pointing to the VM.
Software requirements:
- Docker with the Compose plugin (Compose v2 or higher). See the Docker installation guide.
Steps
- Download and run the installation script:
export NETBIRD_DOMAIN=netbird.example.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bash
A bit on NetBird internals
- Every machine in the network runs the NetBird agent, which manages WireGuard.
- Every agent connects to the Management Service, which holds network state, manages peer IPs, and distributes updates to agents.
- Agents use ICE (via pion/ice) to discover connection candidates for peer-to-peer connections.
- Candidates are discovered with the help of STUN servers.
- Agents negotiate a connection through the Signal Service, exchanging end-to-end encrypted messages with candidates.
- When NAT traversal fails (e.g. mobile carrier-grade NAT) and a direct p2p connection isn't possible, the system falls back to a Relay Service and a secure WireGuard tunnel is established through it.
See a complete architecture overview for details.
Reporting bugs and requesting features
NetBird uses a discussion-first workflow. Bug reports and feature requests start in Discussions, not as issues.
| What you want to do | Where to go |
|---|---|
| Report a bug, regression, or unexpected behavior | Issue Triage |
| Request a feature or share an idea | Ideas & Feature Requests |
| Ask about setup, configuration, or self-hosting | Q&A / Support |
| Report a security vulnerability | Security policy, never a public thread |
Our team and maintainers triage discussions, ask follow-up questions, check for duplicates, and reproduce bugs. Validated reports are promoted to issues. This keeps the issue tracker a clear answer to one question: what is the team working on.
Please search existing discussions and issues first, including closed ones. If something similar already exists, upvote it and add your details there instead of opening a duplicate.
For bug reports, include your NetBird version, operating system, deployment type (Cloud, self-hosted, Kubernetes, or Docker), reproduction steps, expected and actual behavior, and a debug bundle where relevant:
netbird version
netbird status -d -A
netbird debug for 1m -A -S -U
-U uploads the bundle and prints a file key you can paste instead of attaching the archive.
-A anonymizes the output, which matters on a public thread. It masks most identifying details
but is not full redaction, so read the bundle before posting it. Two levels are available:
| Level | How to select | What it masks |
|---|---|---|
default | -A / --anonymize | Public IP addresses, IPv6 ULA addresses, MAC addresses, and domains other than netbird.io, netbird.cloud, netbird.selfhosted, and netbird.stage. IPv4 private, CGNAT, and link-local ranges are kept |
strict | --anonymize-level strict (implies -A) | The above, plus IPv4 private, CGNAT, and link-local ranges, peer names in front of netbird.cloud, netbird.selfhosted, and netbird.stage, and WireGuard public keys. Labels under netbird.io are kept, since it only hosts infrastructure |
See collecting a debug bundle and the CLI reference for details.
See How to use Discussions, Issues, and Pull Requests for the full workflow, or SUPPORT.md for a shorter version.
Contributing
Contributions are welcome. Read CONTRIBUTING.md first. NetBird works ticket first, anything that changes behavior needs an issue the team has agreed on before you open a pull request.
Community projects
- NetBird installer script
- netbird-tui - terminal UI for managing NetBird peers, routes, and settings
- caddy-netbird - Caddy plugin that embeds a NetBird client for proxying HTTP and TCP/UDP traffic through NetBird networks
Note: The main branch may be in an unstable or even broken state during development.
For stable versions, see releases.
Support acknowledgement
In November 2022, NetBird joined the StartUpSecure program sponsored by the Federal Ministry of Education and Research of the Federal Republic of Germany. Together with the CISPA Helmholtz Center for Information Security, NetBird brings security best practices and simplicity to private networking.

Acknowledgements
We build on open source technologies like WireGuard®, Pion ICE, and Rosenpass. We greatly appreciate the work these projects are doing, and we'd love it if you could support them too (e.g., by starring or contributing).
Legal
This repository is licensed under the BSD-3-Clause license, which applies to all parts of the repository except for the directories management/, signal/ and relay/. Those directories are licensed under the GNU Affero General Public License version 3.0 (AGPLv3). See the respective LICENSE files inside each directory.
WireGuard and the WireGuard logo are registered trademarks of Jason A. Donenfeld.
