Skip to content

Commit a126fe6

Browse files
committed
Cloudflare DNS Hosts
1 parent 51eabe5 commit a126fe6

2 files changed

Lines changed: 27 additions & 18 deletions

File tree

V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,11 @@ object AppConfig {
168168
// Android Private DNS constants
169169
const val DNS_DNSPOD_DOMAIN = "dot.pub"
170170
const val DNS_ALIDNS_DOMAIN = "dns.alidns.com"
171-
const val DNS_CLOUDFLARE_DOMAIN = "one.one.one.one"
171+
const val DNS_CLOUDFLARE_ONE_DOMAIN = "one.one.one.one"
172172
const val DNS_GOOGLE_DOMAIN = "dns.google"
173173
const val DNS_QUAD9_DOMAIN = "dns.quad9.net"
174174
const val DNS_YANDEX_DOMAIN = "common.dot.dns.yandex.net"
175+
val DNS_CLOUDFLARE_DOMAIN_LIST = listOf("dns.cloudflare.com", "cloudflare-dns.com")
175176

176177
const val DEFAULT_PORT = 443
177178
const val DEFAULT_SECURITY = "auto"
@@ -182,7 +183,7 @@ object AppConfig {
182183
const val HEADER_TYPE_HTTP = "http"
183184

184185
val DNS_ALIDNS_ADDRESSES = arrayListOf("223.5.5.5", "223.6.6.6", "2400:3200::1", "2400:3200:baba::1")
185-
val DNS_CLOUDFLARE_ADDRESSES = arrayListOf("1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001")
186+
val DNS_CLOUDFLARE_ONE_ADDRESSES = arrayListOf("1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001")
186187
val DNS_DNSPOD_ADDRESSES = arrayListOf("1.12.12.12", "120.53.53.53")
187188
val DNS_GOOGLE_ADDRESSES = arrayListOf("8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", "2001:4860:4860::8844")
188189
val DNS_QUAD9_ADDRESSES = arrayListOf("9.9.9.9", "149.112.112.112", "2620:fe::fe", "2620:fe::9")

V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import com.v2ray.ang.dto.V2rayConfig.OutboundBean.StreamSettingsBean
1616
import com.v2ray.ang.dto.V2rayConfig.RoutingBean.RulesBean
1717
import com.v2ray.ang.extension.isNotNullEmpty
1818
import com.v2ray.ang.fmt.HttpFmt
19-
import com.v2ray.ang.fmt.Hysteria2Fmt
2019
import com.v2ray.ang.fmt.ShadowsocksFmt
2120
import com.v2ray.ang.fmt.SocksFmt
2221
import com.v2ray.ang.fmt.TrojanFmt
@@ -479,20 +478,6 @@ object V2rayConfigManager {
479478
)
480479
}
481480

482-
//User DNS hosts
483-
try {
484-
val userHosts = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS)
485-
if (userHosts.isNotNullEmpty()) {
486-
var userHostsMap = userHosts?.split(",")
487-
?.filter { it.isNotEmpty() }
488-
?.filter { it.contains(":") }
489-
?.associate { it.split(":").let { (k, v) -> k to v } }
490-
if (userHostsMap != null) hosts.putAll(userHostsMap)
491-
}
492-
} catch (e: Exception) {
493-
Log.e(AppConfig.TAG, "Failed to configure user DNS hosts", e)
494-
}
495-
496481
//block dns
497482
val blkDomain = getUserRule2Domain(AppConfig.TAG_BLOCKED)
498483
if (blkDomain.isNotEmpty()) {
@@ -504,12 +489,35 @@ object V2rayConfigManager {
504489

505490
// hardcode popular Android Private DNS rule to fix localhost DNS problem
506491
hosts[AppConfig.DNS_ALIDNS_DOMAIN] = AppConfig.DNS_ALIDNS_ADDRESSES
507-
hosts[AppConfig.DNS_CLOUDFLARE_DOMAIN] = AppConfig.DNS_CLOUDFLARE_ADDRESSES
492+
hosts[AppConfig.DNS_CLOUDFLARE_ONE_DOMAIN] = AppConfig.DNS_CLOUDFLARE_ONE_ADDRESSES
508493
hosts[AppConfig.DNS_DNSPOD_DOMAIN] = AppConfig.DNS_DNSPOD_ADDRESSES
509494
hosts[AppConfig.DNS_GOOGLE_DOMAIN] = AppConfig.DNS_GOOGLE_ADDRESSES
510495
hosts[AppConfig.DNS_QUAD9_DOMAIN] = AppConfig.DNS_QUAD9_ADDRESSES
511496
hosts[AppConfig.DNS_YANDEX_DOMAIN] = AppConfig.DNS_YANDEX_ADDRESSES
512497

498+
//User DNS hosts
499+
try {
500+
val userHosts = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS)
501+
if (userHosts.isNotNullEmpty()) {
502+
var userHostsMap = userHosts?.split(",")
503+
?.filter { it.isNotEmpty() }
504+
?.filter { it.contains(":") }
505+
?.associate { it.split(":").let { (k, v) -> k to v } }
506+
if (userHostsMap != null) hosts.putAll(userHostsMap)
507+
}
508+
} catch (e: Exception) {
509+
Log.e(AppConfig.TAG, "Failed to configure user DNS hosts", e)
510+
}
511+
512+
remoteDns.forEach { dns ->
513+
val matchDomain = AppConfig.DNS_CLOUDFLARE_DOMAIN_LIST.find { dns.contains(it) }
514+
if (matchDomain != null && !hosts.containsKey(matchDomain)) {
515+
val ip = HttpUtil.resolveHostToIP(matchDomain)
516+
if (!ip.isNullOrEmpty()) {
517+
hosts[matchDomain] = ip
518+
}
519+
}
520+
}
513521

514522
// DNS dns
515523
v2rayConfig.dns = V2rayConfig.DnsBean(

0 commit comments

Comments
 (0)