diff --git a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt index 351e401..019a8d2 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt @@ -32,6 +32,7 @@ object Key { const val TRAFFIC_SNIFFING = "trafficSniffing" const val RESOLVE_DESTINATION = "resolveDestination" + const val RESOLVE_SERVER = "resolveServer" const val BYPASS_LAN = "bypassLan" const val BYPASS_LAN_IN_CORE = "bypassLanInCore" diff --git a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt index e70b91c..8281b6f 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt @@ -84,6 +84,7 @@ object DataStore : OnPreferenceDataStoreChangeListener { var trafficSniffing by configurationStore.stringToInt(Key.TRAFFIC_SNIFFING) { 1 } var resolveDestination by configurationStore.boolean(Key.RESOLVE_DESTINATION) + var resolveServer by configurationStore.boolean(Key.RESOLVE_SERVER) // var tcpKeepAliveInterval by configurationStore.stringToInt(Key.TCP_KEEP_ALIVE_INTERVAL) { 15 } var mtu by configurationStore.stringToInt(Key.MTU) { 9000 } 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 2be6d29..53327e5 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -153,12 +153,11 @@ fun buildConfig( val externalIndexMap = ArrayList() val requireTransproxy = if (forTest) false else DataStore.requireTransproxy val ipv6Mode = if (forTest) IPv6Mode.ENABLE else DataStore.ipv6Mode - val resolveDestination = DataStore.resolveDestination val alerts = mutableListOf>() fun genDomainStrategy(noAsIs: Boolean): String { return when { - !resolveDestination && !noAsIs -> "" + !noAsIs -> "" ipv6Mode == IPv6Mode.DISABLE -> "ipv4_only" ipv6Mode == IPv6Mode.PREFER -> "prefer_ipv6" ipv6Mode == IPv6Mode.ONLY -> "ipv6_only" @@ -216,7 +215,7 @@ fun buildConfig( tag = "tun-in" stack = if (DataStore.tunImplementation == 1) "system" else "gvisor" endpoint_independent_nat = true - domain_strategy = genDomainStrategy(false) + domain_strategy = genDomainStrategy(DataStore.resolveDestination) sniff = needSniff sniff_override_destination = needSniffOverride when (ipv6Mode) { @@ -239,7 +238,7 @@ fun buildConfig( tag = TAG_MIXED listen = bind listen_port = DataStore.mixedPort - domain_strategy = genDomainStrategy(false) + domain_strategy = genDomainStrategy(DataStore.resolveDestination) sniff = needSniff sniff_override_destination = needSniffOverride }) @@ -252,7 +251,6 @@ fun buildConfig( tag = TAG_TRANS listen = bind listen_port = DataStore.transproxyPort - domain_strategy = genDomainStrategy(false) sniff = needSniff sniff_override_destination = needSniffOverride }) @@ -262,7 +260,6 @@ fun buildConfig( tag = TAG_TRANS listen = bind listen_port = DataStore.transproxyPort - domain_strategy = genDomainStrategy(false) sniff = needSniff sniff_override_destination = needSniffOverride }) @@ -300,7 +297,7 @@ fun buildConfig( val chainTag = "c-$chainId" var muxApplied = false - var currentDomainStrategy = genDomainStrategy(false) + var currentDomainStrategy = genDomainStrategy(DataStore.resolveServer) profileList.forEachIndexed { index, proxyEntity -> val bean = proxyEntity.requireBean() diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt index a0c0516..f536245 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt @@ -191,6 +191,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { val tunImplementation = findPreference(Key.TUN_IMPLEMENTATION)!! val resolveDestination = findPreference(Key.RESOLVE_DESTINATION)!! + val resolveServer = findPreference(Key.RESOLVE_SERVER)!! val acquireWakeLock = findPreference(Key.ACQUIRE_WAKE_LOCK)!! val enableClashAPI = findPreference(Key.ENABLE_CLASH_API)!! enableClashAPI.setOnPreferenceChangeListener { _, newValue -> @@ -223,6 +224,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { transproxyMode.onPreferenceChangeListener = reloadListener resolveDestination.onPreferenceChangeListener = reloadListener + resolveServer.onPreferenceChangeListener = reloadListener tunImplementation.onPreferenceChangeListener = reloadListener acquireWakeLock.onPreferenceChangeListener = reloadListener diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bc7ba9a..018fe43 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -477,4 +477,5 @@ Mux 协议 探测结果用于路由判断 探测结果用于目标地址 + 根据 IPv6 策略解析服务器地址 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 75c6d77..db063ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -518,5 +518,6 @@ Anyone can write advanced plugins, which can control NekoBox. please download an Mux protocol Sniff result for routing Sniff result for destination + Resolve the server address according to the IPv6 policy \ No newline at end of file diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 73707cc..e6f5c8d 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -116,6 +116,9 @@ app:key="resolveDestination" app:summary="@string/resolve_destination_summary" app:title="@string/resolve_destination" /> +