Add explicit Android VPN LAN routes

This commit is contained in:
2026-05-15 14:14:33 +03:00
parent 64c795f233
commit 7b80dd020c
3 changed files with 31 additions and 2 deletions
+2 -2
View File
@@ -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)}\""
@@ -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;
@@ -3878,6 +3878,9 @@ public class RapVpnService extends VpnService {
LinkedHashSet<String> 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);