diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt index 6ba30b0..7d75699 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -139,6 +139,7 @@ fun buildConfig( val uidListDNSDirect = mutableListOf() val domainListDNSRemote = mutableListOf() val domainListDNSDirect = mutableListOf() + val domainListDNSDirectForce = mutableListOf() val domainListDNSBlock = mutableListOf() val bypassDNSBeans = hashSetOf() val isVPN = DataStore.serviceMode == Key.MODE_VPN @@ -404,7 +405,7 @@ fun buildConfig( pastEntity?.requireBean()?.apply { // don't loopback if (currentDomainStrategy != "" && !serverAddress.isIpAddress()) { - domainListDNSDirect.add("full:$serverAddress") + domainListDNSDirectForce.add("full:$serverAddress") } } if (forTest) { @@ -628,7 +629,7 @@ fun buildConfig( } if (!serverAddr.isIpAddress()) { - domainListDNSDirect.add("full:${serverAddr}") + domainListDNSDirectForce.add("full:${serverAddr}") } } @@ -639,7 +640,7 @@ fun buildConfig( } "https://$address".toHttpUrlOrNull()?.apply { if (!host.isIpAddress()) { - domainListDNSDirect.add("full:$host") + domainListDNSDirectForce.add("full:$host") } } } @@ -675,6 +676,14 @@ fun buildConfig( address = "rcode://success" tag = "dns-block" }) + if (domainListDNSDirectForce.isNotEmpty()) { + dns.rules.add( + DNSRule_DefaultOptions().apply { + makeSingBoxRule(domainListDNSDirectForce.toHashSet().toList()) + server = "dns-direct" + } + ) + } // dns object user rules if (enableDnsRouting) { @@ -696,15 +705,15 @@ fun buildConfig( } ) } - } - if (domainListDNSBlock.isNotEmpty()) { - dns.rules.add( - DNSRule_DefaultOptions().apply { - makeSingBoxRule(domainListDNSBlock.toHashSet().toList()) - server = "dns-block" - disable_cache = true - } - ) + if (domainListDNSBlock.isNotEmpty()) { + dns.rules.add( + DNSRule_DefaultOptions().apply { + makeSingBoxRule(domainListDNSBlock.toHashSet().toList()) + server = "dns-block" + disable_cache = true + } + ) + } } // Disable DNS for test diff --git a/app/src/main/java/moe/matsuri/nb4a/DNS.kt b/app/src/main/java/moe/matsuri/nb4a/DNS.kt index db9902b..cea7162 100644 --- a/app/src/main/java/moe/matsuri/nb4a/DNS.kt +++ b/app/src/main/java/moe/matsuri/nb4a/DNS.kt @@ -34,6 +34,11 @@ object DNS { domain.plusAssign(it) } } + if (geosite?.isEmpty() == true) geosite = null + if (domain?.isEmpty() == true) domain = null + if (domain_suffix?.isEmpty() == true) domain_suffix = null + if (domain_regex?.isEmpty() == true) domain_regex = null + if (domain_keyword?.isEmpty() == true) domain_keyword = null } fun SingBoxOptions.Rule_DefaultOptions.makeSingBoxRule(list: List, isIP: Boolean) { @@ -70,5 +75,12 @@ object DNS { domain.plusAssign(it) } } + if (ip_cidr?.isEmpty() == true) geosite = null + if (geoip?.isEmpty() == true) geosite = null + if (geosite?.isEmpty() == true) geosite = null + if (domain?.isEmpty() == true) domain = null + if (domain_suffix?.isEmpty() == true) domain_suffix = null + if (domain_regex?.isEmpty() == true) domain_regex = null + if (domain_keyword?.isEmpty() == true) domain_keyword = null } }