Networking¶
Three isolated network overlays. Addresses are environment values (the operator's SSH config and mesh dashboard hold them); these pages describe topology with placeholders.
| network | scope | carries | peers |
|---|---|---|---|
| Netbird mesh (WireGuard) | CGNAT-class 100.64.0.0/16 |
SSH, service access, agent traffic | all user peers + the three nodes |
wg-direct |
private point-to-point | NFS only (vps-apps ↔ pi-home) | two tunnel endpoints |
wgr-vpsnet |
private point-to-point | the only path to vps-net | pi-home ↔ vps-net |
Design rules:
- NFS rides its own static tunnel so backups survive a mesh outage.
- The mesh control plane node (vps-net) is not a mesh peer and is
reachable only over
wgr-vpsnetthrough pi-home. - No service publishes on
0.0.0.0except LAN/DNS/SSH platform services noted on nodes.md.
Netbird mesh¶
| element | placement |
|---|---|
| Control plane (mgmt + signal + relay + dashboard) | vps-net, TLS on 443 |
Reverse proxy peers (proxy-*) |
relay infrastructure, mesh side |
| DNS-aware name resolution | each peer resolves <peer>.mesh names locally via NetBird's resolver — survives resolver/host outages |
DNS¶
| consumer | resolver | path |
|---|---|---|
| LAN clients | pi-hole (pi-home) | DHCP assignment |
| vps-apps host and containers | pi-home mesh IP + 9.9.9.9 |
systemd-resolved + docker daemon.json |
| user peers (laptop, phones, handhelds) | pi-home mesh IP + 9.9.9.9 |
pushed via Netbird nameserver group |
pi-home, vps-apps, proxy-* as nodes |
no resolver push | pi-home is the resolver itself |
Upstreams: 1.1.1.1 primary, 9.9.9.9 fallback. Ad/tracker filtering
applies to every consumer pointing at pi-hole.
Public ingress¶
- Exactly one public path: the cloudflared tunnel on pi-home — token-managed, routes defined in the Cloudflare dashboard. A wildcard CNAME on the public domain routes into the tunnel.
- The Netbird reverse proxy (
proxy-*) fronts selected services for mesh peers. - Public-facing names ride Cloudflare edge certificates; the tunnel carries
the origin leg. Renewal is automatic; manual work is limited to new routes
(
runbooks/certificate-renewal.md).
Tunnels¶
wg-direct — NFS (vps-apps ↔ pi-home)¶
- Exports (verified):
/mnt/pi-hdd/backups(nested<host>/<branch>restic repos) and/mnt/pi-hdd/share(open/temp WebDAV drop) — both restricted to the vps-apps tunnel IP. - Security:
all_squash+ fixed anon uid/gid — remote access (including root) maps to the unprivileged local user. - vps-apps mounts appear as Docker volumes under
nfs_*.
wgr-vpsnet — admin (pi-home ↔ vps-net)¶
Static WireGuard terminating on pi-home. Carries vps-net's sshd and its beszel agent reporting. vps-net exposes no other network service.
SSH topology¶
- Direct mesh targets: vps-apps and pi-home (non-default port).
- vps-net: reachable only by jumping through pi-home over
wgr-vpsnet, and only with the dedicated restricted key that lives inside the hermes container. No node or laptop holds that credential; the account has no sudo. - Concrete aliases, users, ports and keys are environment values tracked outside these pages.
Failure blast radius¶
| outage | impact |
|---|---|
| vps-net down | mesh control plane unreachable: no new peer sessions/negotiation; established tunnels keep passing traffic |
| pi-home down | public ingress, LAN DNS/DHCP, NFS backups, mesh ad-blocking, and the vps-net admin path all stop; user peers still resolve via 9.9.9.9 |
| vps-apps down | application fleet unavailable; DNS, mesh, ingress and backups keep working from pi-home |