From d1466ba4b20d75405de83ddb42be6cbdded111d7 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Fri, 24 Jul 2020 18:12:20 -0400 Subject: [PATCH] Bypass private IP at VPN service --- .../com/v2ray/ang/service/V2RayVpnService.kt | 16 ++++++++- V2rayNG/app/src/main/res/values/arrays.xml | 35 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt index 7c614210..67c4b02e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt @@ -131,6 +131,7 @@ class V2RayVpnService : VpnService() { // Configure a builder while parsing the parameters. val builder = Builder() val enableLocalDns = defaultDPreference.getPrefBoolean(SettingsActivity.PREF_LOCAL_DNS_ENABLED, false) + val routingMode = defaultDPreference.getPrefString(SettingsActivity.PREF_ROUTING_MODE, "0") parameters.split(" ") .map { it.split(",") } @@ -139,7 +140,20 @@ class V2RayVpnService : VpnService() { 'm' -> builder.setMtu(java.lang.Short.parseShort(it[1]).toInt()) 's' -> builder.addSearchDomain(it[1]) 'a' -> builder.addAddress(it[1], Integer.parseInt(it[2])) - 'r' -> builder.addRoute(it[1], Integer.parseInt(it[2])) + 'r' -> { + if (routingMode == "1" || routingMode == "3") { + if (it[1] == "::") { //not very elegant, should move Vpn setting in Kotlin, simplify go code + builder.addRoute("2000::", 3) + } else { + resources.getStringArray(R.array.bypass_private_ip_address).forEach { + val addr = it.split('/') + builder.addRoute(addr[0], addr[1].toInt()) + } + } + } else { + builder.addRoute(it[1], Integer.parseInt(it[2])) + } + } 'd' -> builder.addDnsServer(it[1]) } } diff --git a/V2rayNG/app/src/main/res/values/arrays.xml b/V2rayNG/app/src/main/res/values/arrays.xml index 03e5d437..11dfa77b 100644 --- a/V2rayNG/app/src/main/res/values/arrays.xml +++ b/V2rayNG/app/src/main/res/values/arrays.xml @@ -66,4 +66,39 @@ IPIfNonMatch IPOnDemand + + + + 0.0.0.0/5 + 8.0.0.0/7 + 11.0.0.0/8 + 12.0.0.0/6 + 16.0.0.0/4 + 32.0.0.0/3 + 64.0.0.0/2 + 128.0.0.0/3 + 160.0.0.0/5 + 168.0.0.0/6 + 172.0.0.0/12 + 172.32.0.0/11 + 172.64.0.0/10 + 172.128.0.0/9 + 173.0.0.0/8 + 174.0.0.0/7 + 176.0.0.0/4 + 192.0.0.0/9 + 192.128.0.0/11 + 192.160.0.0/13 + 192.169.0.0/16 + 192.170.0.0/15 + 192.172.0.0/14 + 192.176.0.0/12 + 192.192.0.0/10 + 193.0.0.0/8 + 194.0.0.0/7 + 196.0.0.0/6 + 200.0.0.0/5 + 208.0.0.0/4 + 224.0.0.0/3 +