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
+