--- name: reference_tailscale_subnet_key_expiry description: "Internet OK but all of 172.16.3.x dead" = Tailscale infra-node key expiry, not a LAN outage. How to diagnose + the fallback path. metadata: type: reference --- The ACG internal subnet **172.16.3.x is reached over Tailscale**, not a local LAN — `pfsense-2` (the pfSense node) is the **subnet router** advertising **172.16.0.0/22**. Key hosts on it: Gitea/Jupiter `172.16.3.20:3000`, GuruRMM + coord `172.16.3.30:3001`/`:8001`. **Symptom → cause:** if `sync.sh` fetch fails and the WHOLE `172.16.3.x` subnet is unreachable (both .20 and .30) **while general internet is fine**, the cause is almost always a **Tailscale node KEY EXPIRY** on an infra node (the subnet router or a server) — an expired key drops that node off the tailnet, killing the route. It is NOT a "transient blip" and NOT a real LAN outage (logged as a correction 2026-06-25 after I mis-called it). Mike **disabled key expiration** on the infra node(s) 2026-06-25 so it shouldn't recur; if it does, re-auth the node + confirm expiry is off in the Tailscale admin console. **Diagnose (Windows `tailscale.exe` at `C:\Program Files\Tailscale\`):** - `tailscale status` — look for peers marked `offline`/key-expired, esp. `pfsense-2` and `gururmm-server`. - `tailscale debug prefs | grep RouteAll` — must be `true` (this machine accepts subnet routes). - `tailscale status --json` — confirm a peer advertises `172.16.0.0/22` (PrimaryRoutes) and is `Online`. - `tailscale ping ` — tests tailnet path independent of the subnet route. **Fallback:** `gururmm-server` is directly reachable at its **tailnet IP `100.86.12.15:3001`** — usable in place of `172.16.3.30:3001` if the subnet route is down but the node itself is up. See [[feedback_tmp_path_windows]].