Permanent WSL2 dev fix for multi-subnet source-address trap
Mirrored mode re-clones the Windows NIC's addresses each boot, so the kernel keeps picking the wrong source for stacked device subnets (10.0.10.x sourced from 192.168.1.123) — ARP resolves but ping/TCP dies, and every runtime ip-route fix is wiped by wsl --shutdown. deploy/wsl-fix-route-source.sh pins each scope-link route's src to this host's own address in that subnet (no hardcoded IPs, idempotent, preserves metric, non-fatal per route, waits for the route at boot). deploy/parking-net .service reapplies it on every boot. Dev-box only; the appliance is bare-metal Linux with static networkd config. Verified: camera pings with no -I flag; driver pulls a snapshot with no localAddress set.
This commit is contained in:
+17
@@ -338,3 +338,20 @@ guarantee. Recorded in [[dingtian-relay]] (new Hardening section).
|
||||
10.0.10.121 → healthCheck ready, captureSnapshot returned a valid 322 KB JPEG (correct magic).
|
||||
- Updated [[lpr-camera]].
|
||||
|
||||
## [2026-06-15] fix | Permanent WSL2 source-address fix (systemd hook)
|
||||
- The multi-subnet source-address trap kept recurring (every `wsl --shutdown` wipes the runtime
|
||||
`ip route` pin — mirrored mode re-clones the Windows NIC's addresses fresh each boot, and NOTHING
|
||||
inside Linux owns them: networkd/NM/netplan all inactive). Made it permanent on the dev box.
|
||||
- `deploy/wsl-fix-route-source.sh`: walks each `proto kernel scope link` route on the NIC and pins
|
||||
`src` to the host's own address in that same subnet — no hardcoded IPs (covers future device
|
||||
subnets), idempotent, preserves route metric, non-fatal per route. `deploy/parking-net.service`:
|
||||
oneshot, enabled, reapplies on every boot.
|
||||
- BUGS hit + fixed while building it: (1) `ip route change` errors `RTNETLINK: No such file` when
|
||||
the route isn't up yet at boot → use `replace`; (2) `set -e` made one failed `ip` abort the whole
|
||||
unit → dropped it, per-route warnings instead; (3) `network.target` fires before mirrored-mode
|
||||
addresses land → script waits up to 15s for a route.
|
||||
- VERIFIED: service enabled+active, journal shows `pinned 10.0.10.0/24 -> src 10.0.10.203`, camera
|
||||
pings with NO -I flag (0% loss), and the real Hikvision driver pulls a snapshot with NO
|
||||
`localAddress` set. Root cause noted as Windows-side (stray 192.168.1.x); this is the
|
||||
self-contained Linux answer.
|
||||
- Updated [[wsl-dev-networking]].
|
||||
|
||||
Reference in New Issue
Block a user