From 7b80dd020cf5e84ddb7e050e48f46bf2b280cda1 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Fri, 15 May 2026 14:14:33 +0300 Subject: [PATCH] Add explicit Android VPN LAN routes --- clients/android/app/build.gradle | 4 +-- .../su/cin/rapvpn/RapDiagnosticService.java | 26 +++++++++++++++++++ .../java/su/cin/rapvpn/RapVpnService.java | 3 +++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/clients/android/app/build.gradle b/clients/android/app/build.gradle index c5c0321..49af208 100644 --- a/clients/android/app/build.gradle +++ b/clients/android/app/build.gradle @@ -30,8 +30,8 @@ android { applicationId "su.cin.rapvpn" minSdk 26 targetSdk 35 - versionCode 195 - versionName "0.2.195" + versionCode 196 + versionName "0.2.196" buildConfigField "String", "DEFAULT_BACKEND_URL", "\"${normalizeGradleString(defaultBackendUrl)}\"" buildConfigField "String", "DEFAULT_CLUSTER_ID", "\"${normalizeGradleString(defaultClusterId)}\"" buildConfigField "String", "DEFAULT_ORGANIZATION_ID", "\"${normalizeGradleString(defaultOrganizationId)}\"" diff --git a/clients/android/app/src/main/java/su/cin/rapvpn/RapDiagnosticService.java b/clients/android/app/src/main/java/su/cin/rapvpn/RapDiagnosticService.java index 6f3c683..3ee17c6 100644 --- a/clients/android/app/src/main/java/su/cin/rapvpn/RapDiagnosticService.java +++ b/clients/android/app/src/main/java/su/cin/rapvpn/RapDiagnosticService.java @@ -441,6 +441,8 @@ public class RapDiagnosticService extends Service { result = runVPNPageProbe(params); } else if ("vpn_tcp_connect".equals(type) || "vpn_rdp_probe".equals(type)) { result = runVPNTCPConnect(params.optString("host", "192.168.200.95"), params.optInt("port", 3389), params.optInt("timeout_ms", 7000)); + } else if ("vpn_tcp_connect_default".equals(type)) { + result = runDefaultTCPConnect(params.optString("host", "192.168.200.95"), params.optInt("port", 3389), params.optInt("timeout_ms", 7000)); } else if ("vpn_dns_lookup".equals(type)) { result = runVPNDNSLookup(params.optString("host", "2ip.ru")); } else if ("open_url".equals(type)) { @@ -1595,6 +1597,30 @@ public class RapDiagnosticService extends Service { } } + private String runDefaultTCPConnect(String host, int port, int timeoutMs) { + if (port <= 0 || port > 65535) { + return "vpn_tcp_connect_default " + host + ":" + port + " -> invalid port"; + } + if (timeoutMs < 1000) { + timeoutMs = 1000; + } + if (timeoutMs > 30000) { + timeoutMs = 30000; + } + long started = System.currentTimeMillis(); + try { + InetAddress address = InetAddress.getByName(host); + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress(address, port), timeoutMs); + long elapsed = System.currentTimeMillis() - started; + return "vpn_tcp_connect_default " + host + ":" + port + " -> connected address=" + address.getHostAddress() + " local=" + socket.getLocalAddress().getHostAddress() + " ms=" + elapsed; + } + } catch (Exception e) { + long elapsed = System.currentTimeMillis() - started; + return "vpn_tcp_connect_default " + host + ":" + port + " -> " + e.getClass().getSimpleName() + ": " + e.getMessage() + " ms=" + elapsed; + } + } + private Network waitForVPNNetwork(int timeoutMs) { long deadline = System.currentTimeMillis() + Math.max(0, timeoutMs); Network vpn; diff --git a/clients/android/app/src/main/java/su/cin/rapvpn/RapVpnService.java b/clients/android/app/src/main/java/su/cin/rapvpn/RapVpnService.java index e42b326..471a253 100644 --- a/clients/android/app/src/main/java/su/cin/rapvpn/RapVpnService.java +++ b/clients/android/app/src/main/java/su/cin/rapvpn/RapVpnService.java @@ -3878,6 +3878,9 @@ public class RapVpnService extends VpnService { LinkedHashSet routes = new LinkedHashSet<>(); if (fullTunnel) { routes.add("0.0.0.0/0"); + routes.add("10.0.0.0/8"); + routes.add("172.16.0.0/12"); + routes.add("192.168.0.0/16"); return routes; } routes.addAll(splitRoutes);