Installed April 19, 2026. Replaces Pangolin as the mesh VPN for home โ farm โ mobile access. WireGuard-based, peer-to-peer where possible, relayed as fallback.
Pangolin was a single-VPS hub architecture โ every packet routed through the VPS. That was fine for admin but meant latency compounded and a VPS outage killed remote access entirely. NetBird gives us:
- Direct P2P between peers whenever network conditions allow
- Relay fallback only when necessary
- Subnet routing โ one peer on each LAN advertises the whole LAN to the mesh
- Zero public port exposure โ no open ports on the home router required
- Clean client apps for every OS
| Peer | NetBird IP | LAN IP | Location | Role |
|---|---|---|---|---|
| hpve | 100.123.31.199 | 192.168.8.221 | Home | Proxmox host, advertises 192.168.8.0/24 |
| fpve | 100.123.49.175 | 192.168.0.191 | Farm | Farm Proxmox, advertises 192.168.0.0/24 |
| vps | 100.123.69.155 | (SSDNodes public IP) | edge01 | Public VPS โ Caddy edge |
| studio | 100.123.217.253 | 192.168.8.180 | Home | Mac Studio |
To add more peers (iPad, MacBook, phone), invite from the dashboard or use a setup key.
Linux (Debian/Ubuntu):
curl -fsSL https://pkgs.netbird.io/install.sh | bash
netbird up --management-url https://api.netbird.io --hostname <peer-name>
You’ll get a one-time auth URL in the terminal โ open it in a browser to authorize.
Or with a setup key (for headless provisioning):
netbird up --setup-key <KEY> --hostname <peer-name>
macOS / Windows / iOS / Android: download from netbird.io/download. Sign in with the same account.
Pi-hole on CT102 is registered as a NetBird nameserver, so mesh peers get local DNS automatically:
*.edmd.meโ 192.168.8.54 (Caddy)- Short names (
hpve,portainer,immich, etc.) โ resolve directly *.netbird.cloudโ resolved by NetBird client locally (peer names)
Peers appended netbird.cloud as a search domain, so typing just hpve in a browser reaches hpve.netbird.cloud (the hpve peer’s mesh address).
The hpve peer advertises 192.168.8.0/24 to the mesh. The fpve peer advertises 192.168.0.0/24. Any peer connected can reach any host on either LAN by its local IP address.
Routes are configured in the NetBird dashboard under Network Routes and must be selected on each peer (netbird routes select <route-id>).
netbird status # Show connection state
netbird status --detail # Per-peer connection info (direct vs relayed)
netbird up # Start
netbird down # Stop
systemctl status netbird # Service status
journalctl -u netbird -f # Live logs
NetBird tries paths in this order:
- Direct P2P over IPv6 โ fastest, no NAT issues. Requires IPv6 on both ends.
- Direct P2P over IPv4 via STUN/ICE โ works through most NATs, can fail with strict CGNAT (Starlink).
- Relayed through NetBird relay servers โ always works, adds 30-80ms latency.
Check which path is being used: netbird status --detail shows each peer’s connection_type as P2P or Relayed.
In an ideal home network, two improvements would help direct P2P:
- Enable IPv6 at both ends. Bypasses IPv4 NAT issues entirely.
- Port-forward UDP 51820 on the home router โ 192.168.8.221 (hpve). Gives the home peer a stable public endpoint.
At our current home, neither is feasible โ the ISP gives OPNsense a private WAN IP (192.168.254.65) behind their managed gateway. We can’t get IPv6 through the upstream gateway, and we can’t open inbound ports on the upstream we don’t control. Until the ISP service tier changes, peers fall back to STUN-punched UDP4 (which works for most paths) or relayed (small latency cost).
In practice this means: peers that are both on residential ISPs with reasonable NAT will reach each other directly via STUN; mobile peers on cellular often relay. Both are functional.
| Problem | Check |
|---|---|
Can’t reach *.edmd.me URLs |
Is NetBird connected? netbird status |
| Connection reports as relayed | Often unavoidable on home ISP (see P2P note). Mobile peers on cellular tend to relay. Functional, just adds latency. |
| Peer shows offline in dashboard | Check journalctl -u netbird on that peer |
| LAN devices unreachable | hpve peer might be down, or subnet routing not enabled |
| Wrong DNS result for short name | Pi-hole CT102 โ check /etc/pihole/hosts/custom.list. Or OPNsense Unbound forward โ see Pi-hole. |