starlink: dish route + status card on the Van Router page

The Starlink RTL8153 gets a declarative NM profile in 50-van-wan.yaml
(replaces the auto 'Wired connection 1') with a 192.168.100.1/32 link route,
so the dish's management address stays reachable from the router and — via
the existing !br0 masquerade — from the van LAN, regardless of which WAN
holds the default route.

New Cockpit "Starlink" card queries the dish's gRPC API (:9200, get_status
via grpcurl — not packaged in apt, deploy.sh warns when missing) inside the
existing single batched spawn: online/obstructed/outage pill, alerts,
uptime, sw version, PoP latency, down/up throughput, obstruction %.
Sentinels distinguish adapter-absent / no-grpcurl / dish-unreachable.

Gotcha captured while cutting over: a WAN profile without ipv4.route-metric
makes NM re-assert its DHCP default (metric ~101) against van-failover's
enforce_route pruning every cycle; the profile metric must match (failover's
set_profile_metric does this on health transitions).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Andreas Wrede
2026-07-12 07:06:43 -04:00
co-authored by Claude Fable 5
parent 2da97d26f4
commit 751facd511
4 changed files with 92 additions and 3 deletions
+15 -3
View File
@@ -1,7 +1,8 @@
# /etc/netplan/50-van-wan.yaml — replaces cloud-init's 50-cloud-init.yaml.
# Both onboard interfaces are WANs handed to NetworkManager so van-failover can
# steer them (mirrors wayback where NM owns all WANs): wlan0 = wifi uplink
# (Wapana at home / campsite wifi), eth0 = ethernet uplink. The AP radios and
# Both onboard interfaces plus the Starlink USB NIC are WANs handed to
# NetworkManager so van-failover can steer them (mirrors wayback where NM owns
# all WANs): wlan0 = wifi uplink (Wapana at home / campsite wifi), eth0 =
# ethernet uplink, enxd8ec5eeb3512 = Starlink. The AP radios and
# the wired LAN port (USB dongles, wlx*/enx* MAC-named) are deliberately absent:
# systemd-networkd/hostapd own them, and van-ap-unmanaged.conf hides them from NM.
# Apply once by hand: netplan generate && netplan apply (flaps both uplinks).
@@ -12,6 +13,17 @@ network:
renderer: NetworkManager
optional: true
dhcp4: true
# Starlink dish uplink (RTL8153 USB NIC, MAC-named — travels with the
# adapter). The /32 link route keeps the dish's management address reachable
# no matter which WAN holds the default route: the dish answers on
# 192.168.100.1 (gRPC :9200) even while the uplink sits behind CGNAT.
enxd8ec5eeb3512:
renderer: NetworkManager
optional: true
dhcp4: true
routes:
- to: 192.168.100.1/32
scope: link
wifis:
wlan0:
renderer: NetworkManager