Skip to content

IPv4 peer route is unreachable when tunnel starts on cellular-only #31

Description

@elyshrayber09-dot

Body:
LocalDevVPN version: 1.3.0
iOS version: 26.6.1
Device/carrier: iPhone 17 Pro / Verizon
Interface CIDR: 10.7.1.1/32
Peer CIDR: 10.7.1.1/32 (as shown in-app — note this matches the interface
CIDR rather than the 10.7.0.1/32 peer documented elsewhere; worth
double-checking this is really what 1.3.0 displays, or flag if that's
a display bug)

When LocalDevVPN starts while Wi-Fi is active, a client on the same
iPhone can reach a device-local service through the tunnel. Whe
disabled and the tunnel is started fresh on cellular, LocalDevVPN still
reports connected but the same peer endpoint is unreachable.

Reproduced with the following matrix (five conditions, each fro
tunnel stop):

# Wi-Fi Cellular Tunnel start timing Result
1 On On Start after Wi-Fi stable Works end to end (baseline)
2 Off On Start only after Wi-Fi off Tunnel connected;
3 On→Off On Tunnel kept running through the transition Same failure
4 On→Off On Tunnel stopped and restarted after transiti
5 Off Off Airplane Mode, tunnel started fresh Tunnel itself never reaches connected

Rows 2–4 fail identically regardless of restart timing relative to the
Wi-Fi→cellular transition, which suggests this isn't a reconnec
timing issue. Row 5 is a distinct failure (no interface at all prevents
the tunnel from connecting in the first place), separate from t
cellular-specific routing failure in rows 2–4.

Could the system routing table be superseding the included /32 route on
cellular? Apple documents NETunnelProviderProtocol.enforceRoute
making included routes take precedence, and LocalDevVPN currently leaves
it at its default (false). I can help test a build that sets
enforceRoutes = true, or adds packet-flow diagnostics, if that's useful —
I don't have a paid Developer Program account so can't build/si
Network Extension target myself to test it directly.

No payload inspection or remote VPN server is involved; this is the
existing device-local packet-swap use case.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions