mirror of
https://github.com/MatsuriDayo/NekoBoxForAndroid.git
synced 2025-12-20 15:10:05 +08:00
change: outbound "any"
This commit is contained in:
parent
62444de566
commit
c89637a429
@ -1,7 +1,11 @@
|
|||||||
package io.nekohasekai.sagernet.fmt
|
package io.nekohasekai.sagernet.fmt
|
||||||
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import io.nekohasekai.sagernet.*
|
import io.nekohasekai.sagernet.IPv6Mode
|
||||||
|
import io.nekohasekai.sagernet.Key
|
||||||
|
import io.nekohasekai.sagernet.R
|
||||||
|
import io.nekohasekai.sagernet.SagerNet
|
||||||
|
import io.nekohasekai.sagernet.TunImplementation
|
||||||
import io.nekohasekai.sagernet.bg.VpnService
|
import io.nekohasekai.sagernet.bg.VpnService
|
||||||
import io.nekohasekai.sagernet.database.DataStore
|
import io.nekohasekai.sagernet.database.DataStore
|
||||||
import io.nekohasekai.sagernet.database.ProxyEntity
|
import io.nekohasekai.sagernet.database.ProxyEntity
|
||||||
@ -23,11 +27,32 @@ import io.nekohasekai.sagernet.fmt.v2ray.StandardV2RayBean
|
|||||||
import io.nekohasekai.sagernet.fmt.v2ray.buildSingBoxOutboundStandardV2RayBean
|
import io.nekohasekai.sagernet.fmt.v2ray.buildSingBoxOutboundStandardV2RayBean
|
||||||
import io.nekohasekai.sagernet.fmt.wireguard.WireGuardBean
|
import io.nekohasekai.sagernet.fmt.wireguard.WireGuardBean
|
||||||
import io.nekohasekai.sagernet.fmt.wireguard.buildSingBoxOutboundWireguardBean
|
import io.nekohasekai.sagernet.fmt.wireguard.buildSingBoxOutboundWireguardBean
|
||||||
import io.nekohasekai.sagernet.ktx.isIpAddress
|
|
||||||
import io.nekohasekai.sagernet.ktx.mkPort
|
import io.nekohasekai.sagernet.ktx.mkPort
|
||||||
import io.nekohasekai.sagernet.utils.PackageCache
|
import io.nekohasekai.sagernet.utils.PackageCache
|
||||||
import moe.matsuri.nb4a.*
|
import moe.matsuri.nb4a.Protocols
|
||||||
import moe.matsuri.nb4a.SingBoxOptions.*
|
import moe.matsuri.nb4a.SingBoxOptions.CacheFile
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.ClashAPIOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.DNSFakeIPOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.DNSOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.DNSRule_DefaultOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.DNSServerOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.ExperimentalOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Inbound_DirectOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Inbound_MixedOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Inbound_TunOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.LogOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.MultiplexOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.MyOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Outbound
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Outbound_SelectorOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Outbound_SocksOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.RouteOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.RuleSet
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptions.Rule_DefaultOptions
|
||||||
|
import moe.matsuri.nb4a.SingBoxOptionsUtil
|
||||||
|
import moe.matsuri.nb4a.checkEmpty
|
||||||
|
import moe.matsuri.nb4a.generateRuleSet
|
||||||
|
import moe.matsuri.nb4a.makeSingBoxRule
|
||||||
import moe.matsuri.nb4a.plugin.Plugins
|
import moe.matsuri.nb4a.plugin.Plugins
|
||||||
import moe.matsuri.nb4a.proxy.config.ConfigBean
|
import moe.matsuri.nb4a.proxy.config.ConfigBean
|
||||||
import moe.matsuri.nb4a.proxy.shadowtls.ShadowTLSBean
|
import moe.matsuri.nb4a.proxy.shadowtls.ShadowTLSBean
|
||||||
@ -35,7 +60,6 @@ import moe.matsuri.nb4a.proxy.shadowtls.buildSingBoxOutboundShadowTLSBean
|
|||||||
import moe.matsuri.nb4a.utils.JavaUtil.gson
|
import moe.matsuri.nb4a.utils.JavaUtil.gson
|
||||||
import moe.matsuri.nb4a.utils.Util
|
import moe.matsuri.nb4a.utils.Util
|
||||||
import moe.matsuri.nb4a.utils.listByLineOrComma
|
import moe.matsuri.nb4a.utils.listByLineOrComma
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
|
||||||
|
|
||||||
const val TAG_MIXED = "mixed-in"
|
const val TAG_MIXED = "mixed-in"
|
||||||
|
|
||||||
@ -132,7 +156,6 @@ fun buildConfig(
|
|||||||
}.toHashSet().toList()).associateBy { it.id }
|
}.toHashSet().toList()).associateBy { it.id }
|
||||||
val buildSelector = !forTest && group?.isSelector == true && !forExport
|
val buildSelector = !forTest && group?.isSelector == true && !forExport
|
||||||
val userDNSRuleList = mutableListOf<DNSRule_DefaultOptions>()
|
val userDNSRuleList = mutableListOf<DNSRule_DefaultOptions>()
|
||||||
val domainListDNSDirectForce = mutableListOf<String>()
|
|
||||||
val bypassDNSBeans = hashSetOf<AbstractBean>()
|
val bypassDNSBeans = hashSetOf<AbstractBean>()
|
||||||
val isVPN = DataStore.serviceMode == Key.MODE_VPN
|
val isVPN = DataStore.serviceMode == Key.MODE_VPN
|
||||||
val bind = if (!forTest && DataStore.allowAccess) "0.0.0.0" else LOCALHOST
|
val bind = if (!forTest && DataStore.allowAccess) "0.0.0.0" else LOCALHOST
|
||||||
@ -411,12 +434,7 @@ fun buildConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// domain_strategy
|
// domain_strategy
|
||||||
pastEntity?.requireBean()?.apply {
|
|
||||||
// don't loopback
|
|
||||||
if (defaultServerDomainStrategy != "" && !serverAddress.isIpAddress()) {
|
|
||||||
domainListDNSDirectForce.add("full:$serverAddress")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
currentOutbound["domain_strategy"] =
|
currentOutbound["domain_strategy"] =
|
||||||
if (forTest) "" else defaultServerDomainStrategy
|
if (forTest) "" else defaultServerDomainStrategy
|
||||||
|
|
||||||
@ -646,35 +664,6 @@ fun buildConfig(
|
|||||||
}.asMap())
|
}.asMap())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bypass Lookup for the first profile
|
|
||||||
bypassDNSBeans.forEach {
|
|
||||||
var serverAddr = it.serverAddress
|
|
||||||
|
|
||||||
if (it is ConfigBean) {
|
|
||||||
var config = mutableMapOf<String, Any>()
|
|
||||||
config = gson.fromJson(it.config, config.javaClass)
|
|
||||||
config["server"]?.apply {
|
|
||||||
serverAddr = toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverAddr.isIpAddress()) {
|
|
||||||
domainListDNSDirectForce.add("full:${serverAddr}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
remoteDns.forEach {
|
|
||||||
var address = it
|
|
||||||
if (address.contains("://")) {
|
|
||||||
address = address.substringAfter("://")
|
|
||||||
}
|
|
||||||
"https://$address".toHttpUrlOrNull()?.apply {
|
|
||||||
if (!host.isIpAddress()) {
|
|
||||||
domainListDNSDirectForce.add("full:$host")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remote dns obj
|
// remote dns obj
|
||||||
remoteDns.firstOrNull().let {
|
remoteDns.firstOrNull().let {
|
||||||
dns.servers.add(DNSServerOptions().apply {
|
dns.servers.add(DNSServerOptions().apply {
|
||||||
@ -756,14 +745,12 @@ fun buildConfig(
|
|||||||
disable_cache = true
|
disable_cache = true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// force bypass (always top DNS rule)
|
// avoid loopback (always top DNS rule)
|
||||||
if (domainListDNSDirectForce.isNotEmpty()) {
|
|
||||||
dns.rules.add(0, DNSRule_DefaultOptions().apply {
|
dns.rules.add(0, DNSRule_DefaultOptions().apply {
|
||||||
makeSingBoxRule(domainListDNSDirectForce.toHashSet().toList())
|
outbound = mutableListOf("any")
|
||||||
server = "dns-direct"
|
server = "dns-direct"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}.let {
|
}.let {
|
||||||
ConfigBuildResult(
|
ConfigBuildResult(
|
||||||
gson.toJson(it.asMap().apply {
|
gson.toJson(it.asMap().apply {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user