Bypass over a VPN server is broken for custom providers (stale config launched, iproute mechanism inert on netlink builds) #75
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found live 2026-08-19 during #68 validation: a bypass-over-VPN session with a custom provider connects but creates no
tun_aqomui_b, installs nothing into table 11, and bypassed apps keep egressing via the physical link.Two stacked defects:
The wrong config gets launched.
write_configredirectseditto "bypass" internally for a bypass dict and writesbypass.ovpn(device name,route-up, table-11 plumbing) -- butopenvpn()'s custom-provider branch then overwritespathto<provider>/temp.ovpn, the stale file from the last main connect of that provider. The bypass OpenVPN runs a copy of the main config: wrong device name (collides with a running main tunnel -- first-attempt failures), no route-up, no bypass routing. Supported providers set the bypass path upfront and are unaffected; custom+bypass was simply never exercised.The table-11 mechanism assumes the iproute2 backend.
bypass.ovpnsteers routes viaiproute scripts/bypass_route.sh, but this build uses the netlink backend (net_iface_up:/net_addr_v4_add:in the log), which never calls the iproute script -- so even the correct config would have installed the bypass tunnel's pushedredirect-gatewayinto the main table, hijacking all traffic. 2019-era mechanism, silently inert since the packaging moved off --enable-iproute2.Fix: launch
bypass.ovpnfor custom-provider bypass dicts; replace theiprouteredirect withroute-noexec(install no pushed routes;route-up=bypass_up.shgets $route_vpn_gateway/$dev either way and installs the single default into table 11).scripts/bypass_route.shbecomes dead and is removed.