From 96f56b468ef7ad849a17e92401404836d3ff6a1f Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 1 May 2024 14:00:35 +0800 Subject: [PATCH] Adjust DNS hardcoded geoip:cn issue https://github.com/2dust/v2rayNG/issues/3061 --- .../main/kotlin/com/v2ray/ang/util/Utils.kt | 2 +- .../com/v2ray/ang/util/V2rayConfigUtil.kt | 72 ++++++++++--------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt index ccccf44f..c7492e4c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt @@ -159,7 +159,7 @@ object Utils { */ fun getDomesticDnsServers(): List { val domesticDns = settingsStorage?.decodeString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT - val ret = domesticDns.split(",").filter { isPureIpAddress(it) } + val ret = domesticDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) } if (ret.isEmpty()) { return listOf(AppConfig.DNS_DIRECT) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt index b9f24cd0..25188a33 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt @@ -158,7 +158,7 @@ object V2rayConfigUtil { private fun fakedns(v2rayConfig: V2rayConfig) { if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true - || settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true + && settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true ) { v2rayConfig.fakedns = listOf(V2rayConfig.FakednsBean()) v2rayConfig.outbounds.filter { it.protocol == PROTOCOL_FREEDOM && it.tag == TAG_DIRECT } @@ -398,12 +398,13 @@ object V2rayConfigUtil { try { val hosts = mutableMapOf() val servers = ArrayList() + + //remote Dns val remoteDns = Utils.getRemoteDnsServers() val proxyDomain = userRule2Domian( settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_AGENT) ?: "" ) - remoteDns.forEach { servers.add(it) } @@ -419,48 +420,51 @@ object V2rayConfigUtil { } // domestic DNS + val domesticDns = Utils.getDomesticDnsServers() val directDomain = userRule2Domian( settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_DIRECT) ?: "" ) val routingMode = settingsStorage?.decodeString(AppConfig.PREF_ROUTING_MODE) ?: ERoutingMode.BYPASS_LAN_MAINLAND.value - if (directDomain.size > 0 || routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value) { - val domesticDns = Utils.getDomesticDnsServers() - val geositeCn = arrayListOf("geosite:cn","geosite:geolocation-cn") - val geoipCn = arrayListOf("geoip:cn") - if (directDomain.size > 0) { - servers.add( - V2rayConfig.DnsBean.ServersBean( - domesticDns.first(), - 53, - directDomain, - geoipCn - ) + val isCnRoutingMode = + (routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value) + val geoipCn = arrayListOf("geoip:cn") + + if (directDomain.size > 0) { + servers.add( + V2rayConfig.DnsBean.ServersBean( + domesticDns.first(), + 53, + directDomain, + if (isCnRoutingMode) geoipCn else null ) - } - if (routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value) { - servers.add( - V2rayConfig.DnsBean.ServersBean( - domesticDns.first(), - 53, - geositeCn, - geoipCn - ) + ) + } + if (isCnRoutingMode) { + val geositeCn = arrayListOf("geosite:cn", "geosite:geolocation-cn") + servers.add( + V2rayConfig.DnsBean.ServersBean( + domesticDns.first(), + 53, + geositeCn, + geoipCn ) - } - if (Utils.isPureIpAddress(domesticDns.first())) { - v2rayConfig.routing.rules.add( - 0, V2rayConfig.RoutingBean.RulesBean( - outboundTag = AppConfig.TAG_DIRECT, - port = "53", - ip = arrayListOf(domesticDns.first()), - domain = null - ) - ) - } + ) } + if (Utils.isPureIpAddress(domesticDns.first())) { + v2rayConfig.routing.rules.add( + 0, V2rayConfig.RoutingBean.RulesBean( + outboundTag = AppConfig.TAG_DIRECT, + port = "53", + ip = arrayListOf(domesticDns.first()), + domain = null + ) + ) + } + + //block dns val blkDomain = userRule2Domian( settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_BLOCKED) ?: ""