Commit Graph
1072 Commits
Author SHA1 Message Date
Brandon Hopkins d7d9e75e5b Add optional logout URL step (#775) 2026-06-03 16:42:33 +02:00
Jack Carter e49d920fb6 docs: add Networks site-to-site use-case guide (#773)
* docs: add Networks site-to-site use-case guide

Add a canonical site-to-site guide built on Networks/Resources/Policies,
which is the recommended and actively developed approach. Reposition the
legacy Network Routes site-to-site Note to point at the new page and scope
Network Routes to the wide-open, no-policy case only. Add the new page to
the docs sidebar under Networks > Use Cases.

* docs: fix Resource fields, policy heading, and prerequisites in Networks site-to-site

- Remove non-existent 'Type: Subnet' field; describe Resource Groups under
  Additional Options to match the actual UI
- Rename Step 4 to 'Create access control policies'
- Trim prerequisites (drop account line and device examples)

* docs: clarify Masquerade requirement and Linux-only SNAT for site-to-site
2026-06-01 11:23:44 +02:00
Jack Carter 93e57b61f6 docs: document posture check evaluation timing and policy distribution (#774)
Add a 'When Posture Checks Are Evaluated' section to the posture checks
page covering connect/login evaluation, immediate distribution of changes,
and the connection-time evaluation caveat for mid-session state changes.

Add a 'How Policy Changes Are Distributed' section to the access control
overview covering event-driven push, no redistribution interval, and
change coalescing. The two sections cross-link.
2026-06-01 10:14:31 +02:00
Maycon Santosandcoderabbitai[bot] 109140a77a Add observability documentation for self-hosted deployments (#772)
* Add observability documentation for self-hosted deployments

* Update src/pages/selfhosted/observability/index.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update src/pages/selfhosted/observability/index.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Document metric naming conventions and updates across self-hosted observability pages

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-05-29 16:04:04 +02:00
Bethuel Mmbaga 9e09fa68fa Update sqlite to postgres migration (#771) 2026-05-29 11:38:31 +03:00
Jack Carter f022842ef3 docs: add migration and sync context to Entra ID integration guides (#769)
Answers common customer questions about the Entra ID API to SCIM
migration that the public docs did not cover:

- One-integration-at-a-time limit and tenant-separation workaround
- Reusing an existing Enterprise Application for SCIM vs. the legacy
  API App Registration
- Why the group externalId mapping is removed (displayName matching)
- Why unused user attribute mappings are trimmed
- Why externalId source changes from mailNickname to objectId
- New Sync Behavior section contrasting 5-min API polling with
  event-driven SCIM provisioning
2026-05-28 16:37:43 +02:00
Jack Carter d1936d99ec fix: replace invalid <p> wrapping Button with <div> (#768)
* fix: replace invalid <p> wrapping Button with <div>

The Button component renders a <div> in its primary variant. HTML
disallows block elements inside <p>, so browsers auto-close the <p>
during parsing and React 19 reports a hydration mismatch. The
float="center" attribute was non-functional, so rendering is unchanged.

* chore: gitignore .playwright-mcp run artifacts
2026-05-27 13:51:03 -07:00
Misha Bragin 14efe3f46a User Servers ref when relevant instead of User Devices (#770) 2026-05-27 16:38:39 +02:00
TiranajungeandJack Carter 090eff7117 OPNsense checkbox "Show community plugins" (#765)
* OPNsense checkbox "Show community plugins"

OPNsense requires a new checkbox "Show community plugins" to be checked, before you can find the netbird plugin.

Tested on OPNsense 26.1.8_5

* docs: tighten OPNsense community plugins instruction

---------

Co-authored-by: Jack Carter <128555021+SunsetDrifter@users.noreply.github.com>
2026-05-26 16:14:50 +02:00
Misha Bragin 3bac72719b Align docs with the simplified layout changes (#766) 2026-05-26 10:35:24 +02:00
Bruno Mercier CostaandClaude Opus 4.7 a28e476670 docs: add Support Matrix section under Get More Help (#764)
* Add Support Matrix section under Get More Help

Adds /help/support-matrix with an overview, NetBird client (split into
per-OS pages following the get-started/install layout), Kubernetes
operator, Terraform provider, and self-hosted sub-sections.

Linux/Windows/macOS pages pre-fill OS version cutoffs derived from the
Go toolchain's minimum OS requirements at each NetBird release's Go
version (sourced from go.mod at release tags). Each derived page carries
a Warning callout marking the values as inferences pending team
confirmation. Mobile/TV pages and the other component pages remain TBD
placeholders.

* Rework Linux support page around client modes

Drops the per-distro TBD table and consolidates the description with the
Warning callout. Splits Linux support by client mode: userspace follows
the Go toolchain's minimum OS requirements; kernel mode depends on the
host's iptables/nftables features. Notes Ubuntu 20.04 as the
end-to-end test floor.


* Add full Linux e2e test matrix to support page

Replaces the single Ubuntu 20.04 floor reference with the full set of
distributions covered by the NetBird team's end-to-end tests: Ubuntu
20.04/22.04/24.04, Debian 12, Rocky Linux 9, and Fedora 41. Ubuntu
20.04 remains called out as the oldest tested release.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------
2026-05-22 11:47:42 +02:00
netbirddev 2cc722e436 Update API pages with v0.71.3 2026-05-20 17:35:38 +00:00
Maycon Santos 30cb1bff3b Update BYOP documentation to reflect "Clusters" terminology (#762)
* Update BYOP documentation to reflect "Clusters" terminology and add shared vs account cluster details.

* Update BYOP DNS documentation and replace modal images
2026-05-20 12:07:28 +02:00
PizzaLovingNerdandTechHutTV 4e1f5669c9 Added Homebrew for Linux as instructions for atomic, updated DistroBox docs. (#756)
* Update Linux installation instructions for NetBird on Fedora Silverblue and Universal Blue. Added Homebrew and Distrobox installation methods, including necessary commands and SELinux configuration notes. Updated Distrobox container image version from Debian 12 to 13.

* Some adjustments to homebrew docs

* removed leading space on the \``bash` opening fence

---------

Co-authored-by: TechHutTV <brandon@techhut.tv>
2026-05-19 14:20:53 -07:00
Brandon Hopkins 8ab98eff17 Add Cloud Marketplaces section, reorganize self-hosted docs, clean up redirects (#760)
* Add marketplace section with Vultr

* Add Images and Self-Hosted Restructure

* Organize self-hosted pages

* Clean up redirects
2026-05-19 07:55:43 -07:00
Maycon Santos 6dc4724fa2 Add short flags for CLI command options (#754) 2026-05-19 15:57:01 +02:00
Jack Carter 84a3532943 docs: add Masquerade configuration page (#751)
* docs: add Masquerade configuration page

Documents persistent return-route setup on the destination host when
masquerade is disabled on a routing peer. Covers Netplan, systemd-networkd,
NetworkManager, ifupdown, and RHEL legacy network-scripts, plus verification
and a security note. Resolves the previously dangling "Related" tile in
how-routing-peers-work.mdx.

* docs: clarify masquerade page and trim persistent recipes

- Netplan: show as a fragment with addresses/default route context so readers
  don't paste it as a standalone file
- systemd-networkd: note the drop-in needs a matching .network file and
  point at networkctl status to find it
- Test section: add ping/curl reachability examples
- Verify section: call out that proto/onlink/metric fields are normal
- Remove NetworkManager, ifupdown, and RHEL legacy sections

* docs: clarify netplan section when /etc/netplan is empty

Lead with the common case (cloud-init / installer yaml already exists),
and call out the placeholders in the example. Add a fallback path for
the rare case where /etc/netplan/ is empty.

* docs: comment <IFACE> placeholder in netplan example

* docs: clarify <IFACE> is the destination's LAN interface

* docs: comment <PEER_LAN_IP> placeholder in netplan example

* docs: tighten <PEER_LAN_IP> comment to 'local IP on this subnet'

* docs: make 'pick one' explicit for the persistent-config methods

Replace the weak one-liner with a bold "pick one" callout and a
two-bullet decision criterion (ls /etc/netplan/) so readers don't
mistake the two H3 sections for sequential steps.

* docs: add 'Find your account's NetBird range' to the masquerade page

Mirror the section already on the site-to-vpn page so readers learn to
use their account's /16 block rather than pinning the whole /10. Same
prose and netbird status recipe; trailing line adapted to reference
100.64.0.0/10 (the placeholder used elsewhere on this page).

* docs: remove 'Related' Tiles block from masquerade page

* docs: align security warning with the recommended /16 range

* docs: restore cross-link from advanced-configuration to masquerade

* docs: drop ping from the test-route example

ping would fail for ACL reasons (not routing reasons) on policies
scoped to specific TCP ports, misdirecting troubleshooting. Use curl or
nc against an allowed port instead.

* docs: apply review findings to masquerade page and legacy warning

masquerade.mdx
- add "Disable masquerade on the routing peer" section (dashboard +
  API path), so the page actually documents the toggle, not just
  the prerequisite
- "What changes when masquerade is off": say the route lives on the
  destination host (or its gateway for multi-hop)
- forward-ref "Find your account's NetBird range" from the inputs
  list to remove the substitute-then-rewind loop
- ip route del: include via <PEER_LAN_IP> so the test takedown is
  unambiguous
- netplan prose: spell out that you append to the existing routes:
  list, not add a second routes: key (YAML rejects that)
- verify output: use 192.168.1.10 for the routing peer so it stops
  colliding with the 192.168.1.50 used as the destination's own IP
  in the netplan example
- add an end-to-end verification step (curl + tcpdump) so a reader
  confirms source IPs are actually preserved, not just that a route
  exists in the table

advanced-configuration.mdx
- rewrite the contradictory Warning so it scopes correctly to legacy
  Network Routes (which match peer NetBird IPs only) and points
  readers to the Networks path when they want policy-layer ACLs
  with masquerade off

* docs: promote the /16 substitution reminder to a Note callout

* docs: clearer wording for the /16 substitution Note
2026-05-19 15:07:07 +02:00
Jack Carter 8f06376f4f docs: drop inaccurate containerized routing peer ip_forward note (#761)
The agent already enables ip_forward inside the container's own network
namespace when it has NET_ADMIN, so the blanket claim that a container
cannot do this on its own is misleading. The preceding paragraph
already covers the fallback case when the agent cannot modify sysctl.
2026-05-19 10:28:21 +02:00
Jack Carter 47f7ab7b33 docs: rework Site-to-VPN SNAT guidance, verified end-to-end (#758)
* docs: rewrite Site-to-VPN SNAT requirement to always be manual

The dashboard Masquerade flag does not cover the Site-to-VPN direction on
any route — the marking rules NetBird installs are only wired up when a
policy targets the resource, and the documented flow uses a peer-to-peer
policy. The old guidance ("on Linux kernel mode, no manual SNAT needed")
was wrong, so manual SNAT is now framed as required on every routing peer
regardless of OS or WireGuard mode.

Also adds an nftables example alongside the iptables one, drops the
"(If applicable)" qualifier from the Step 3 heading, fixes the four
in-page anchor links that were already 404ing against the old heading,
and reframes the Step 4 masquerade-flag note plus the Outbound SNAT
requirement and Troubleshooting sections to match.

Verified end-to-end in a kernel-mode Linux lab: with the documented setup
(masquerade=true, peer-to-peer policy only, no manual SNAT) curl from a
clientless device to the overlay peer's NetBird IP times out; adding
either the iptables or the nftables rule from the new Step 3 makes it
return HTTP 200.

* docs: make Step 3 SNAT examples persistent

The previous version showed runtime iptables/nft commands with
persistence as a trailing comment. Replace with two equivalent
fully-persistent options: iptables-persistent (recommended) and a
dedicated systemd-unit + /etc/nftables.d/ file for nftables-native
setups.

Explicitly call out why /etc/nftables.conf is not the right persistence
target — its default starts with "flush ruleset", which wipes the
iptables-nft chains NetBird installs.

Both options verified end-to-end in a lab: rule applied, curl succeeds;
rule removed (simulating reboot), curl fails; reload via
netfilter-persistent / systemctl restart, curl succeeds again.

* docs: drop nftables-only option from Step 3

iptables-persistent works on every Linux NetBird supports — whether the
underlying backend is iptables-legacy or iptables-nft — so a separate
nftables variant with its own systemd unit was strictly more complexity
for the same outcome. Keep the iptables-persistent block as the single
Linux instruction.

* docs: drop UFW/firewalld FORWARD caveat from Step 3

The note was scoped to a minority of routing peers (those running UFW or
firewalld with default-DROP on FORWARD), and the persistence guidance
was too vague to be actionable. The symptom — packets reaching the
routing peer but not the target — is already covered by the
Troubleshooting section, which is enough of a lead for affected users.

* docs: drop standalone Outbound SNAT requirement section

The section's three takeaways — ACL ipset rejects routed-CIDR sources,
SNAT rewrites the source to a known NetBird IP, dashboard Masquerade
flag doesn't cover this direction — are already covered inline in Step
3 and the Step 4 masquerade note. Fold the one unique bit (the ipset
mechanic) into Step 3's opening sentence and drop the standalone
section plus the three "see Outbound SNAT requirement" backreferences
that pointed at it.

* docs: use ss -tan in Test Connectivity verification

The previous command (ss -tnp | grep :8080) filters by process and
misses TIME-WAIT sockets, which are kernel-owned. After a fast curl the
TCP connection closes before ss runs, so the user only ever sees the
LISTEN socket — no indication of the source IP. ss -tan lists all
states, so the TIME-WAIT entry showing the routing peer's NetBird IP as
the remote address is reliably visible for ~60 s.

Verified end-to-end in a kernel-mode Linux lab.

* docs: make Linux static route in Step 6 persistent

Replace the runtime "ip route add" + persistence-as-a-comment with two
fully-persistent options: a netplan drop-in (Ubuntu Server default) and
an nmcli equivalent (RHEL / Fedora / desktop). The netplan YAML was
validated against netplan generate. Also annotate the Windows command
to highlight that "-p" is what makes it persistent.

* docs: drop unverified pfSense/OPNsense and MikroTik examples

Neither platform ships a first-class NetBird routing-peer setup, and we
have no way to verify the SNAT commands in those sections work as
written. Replace with a single "Other platforms" paragraph that points
back to the general principle (any SNAT that rewrites the site-CIDR
source on egress from wt0 is sufficient) without claiming to give
verified instructions. Also tighten the Prerequisites line that
referenced "per-platform SNAT syntax" that no longer exists.

* docs: rewrite DNS NXDOMAIN troubleshooting entry

The previous entry referenced a "127.0.0.1-co-located NetBird resolver"
that doesn't exist — the doc's own DNS section explicitly notes that
the NetBird daemon binds its resolver on the peer's own NetBird IP,
not on 127.0.0.1. The "binding loopback causes it to refuse forwarding"
explanation was therefore exactly backwards.

Replace with a dig-based isolation flow that distinguishes the three
real failure modes (timeout = dnsmasq not reachable on the site IP;
SERVFAIL = forward to NetBird resolver failed; NXDOMAIN = wrong FQDN).
Diagnostic flow verified end-to-end in a lab — valid hostnames return
NOERROR with an answer record, unknown ones return status: NXDOMAIN as
described.
2026-05-18 14:40:53 +02:00
Eduard Gert eb752fd70b Add distributor portal docs (#729)
* add distributor portal

* update wordings

* update docs
2026-05-15 12:47:38 +02:00
Nicolas FratiandBrandon Hopkins a2cd5f41d5 Add docs for MFA totp (#704)
Co-authored-by: Brandon Hopkins <76761586+TechHutTV@users.noreply.github.com>
2026-05-14 11:39:45 -07:00
netbirddev f3ee9f9f83 Update API pages with v0.71.0 2026-05-14 16:39:03 +00:00
Jack Carter 8b1fe13cac docs: split Ports & Firewalls out of FAQ (#755) 2026-05-13 17:48:07 +02:00
Jack Carter 9802af7bdc docs: rename DNS wildcard routing to routing peer DNS resolution (#745)
Matches the dashboard rename. The setting moves DNS resolution for
routed domains from the client to the routing peer; wildcard routing
is one consequence rather than the primary purpose, so the canonical
section now leads with that framing.

Heading anchor changes from #enable-dns-wildcard-routing to
#enable-routing-peer-dns-resolution. Keeps an invisible legacy anchor
on both pages so external bookmarks still scroll to the section.
2026-05-13 16:04:24 +02:00
Jack Carter a5bd6f26dd docs: remove Related section from Site-to-VPN guide (#753) 2026-05-13 14:38:04 +02:00