Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10cc117e81 | |||
| ce9bed2e1f | |||
| bb8f7de6eb | |||
| a1ed4836c7 |
@@ -20,7 +20,7 @@ data class V2rayConfig(
|
|||||||
val api: Any? = null,
|
val api: Any? = null,
|
||||||
val transport: Any? = null,
|
val transport: Any? = null,
|
||||||
val reverse: Any? = null,
|
val reverse: Any? = null,
|
||||||
var fakedns: FakednsBean? = null,
|
var fakedns: Any? = null,
|
||||||
val browserForwarder: Any? = null) {
|
val browserForwarder: Any? = null) {
|
||||||
companion object {
|
companion object {
|
||||||
const val DEFAULT_PORT = 443
|
const val DEFAULT_PORT = 443
|
||||||
@@ -370,7 +370,7 @@ data class V2rayConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class DnsBean(var servers: ArrayList<Any>? = null,
|
data class DnsBean(var servers: ArrayList<Any>? = null,
|
||||||
var hosts: Map<String, String>? = null,
|
var hosts: Map<String, Any>? = null,
|
||||||
val clientIp: String? = null,
|
val clientIp: String? = null,
|
||||||
val disableCache: Boolean? = null,
|
val disableCache: Boolean? = null,
|
||||||
val queryStrategy: String? = null,
|
val queryStrategy: String? = null,
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ object Utils {
|
|||||||
*/
|
*/
|
||||||
fun getRemoteDnsServers(): List<String> {
|
fun getRemoteDnsServers(): List<String> {
|
||||||
val remoteDns = settingsStorage?.decodeString(AppConfig.PREF_REMOTE_DNS) ?: AppConfig.DNS_AGENT
|
val remoteDns = settingsStorage?.decodeString(AppConfig.PREF_REMOTE_DNS) ?: AppConfig.DNS_AGENT
|
||||||
val ret = remoteDns.split(",").filter { isPureIpAddress(it) || it.startsWith("https") }
|
val ret = remoteDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) }
|
||||||
if (ret.isEmpty()) {
|
if (ret.isEmpty()) {
|
||||||
return listOf(AppConfig.DNS_AGENT)
|
return listOf(AppConfig.DNS_AGENT)
|
||||||
}
|
}
|
||||||
@@ -159,7 +159,7 @@ object Utils {
|
|||||||
*/
|
*/
|
||||||
fun getDomesticDnsServers(): List<String> {
|
fun getDomesticDnsServers(): List<String> {
|
||||||
val domesticDns = settingsStorage?.decodeString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT
|
val domesticDns = settingsStorage?.decodeString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT
|
||||||
val ret = domesticDns.split(",").filter { isPureIpAddress(it) || it.startsWith("https") }
|
val ret = domesticDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) }
|
||||||
if (ret.isEmpty()) {
|
if (ret.isEmpty()) {
|
||||||
return listOf(AppConfig.DNS_DIRECT)
|
return listOf(AppConfig.DNS_DIRECT)
|
||||||
}
|
}
|
||||||
@@ -257,6 +257,10 @@ object Utils {
|
|||||||
return regV6.matches(addr)
|
return regV6.matches(addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isCoreDNSAddress(s: String): Boolean {
|
||||||
|
return s.startsWith("https") || s.startsWith("tcp") || s.startsWith("quic")
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* is valid url
|
* is valid url
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ object V2rayConfigUtil {
|
|||||||
|
|
||||||
private fun fakedns(v2rayConfig: V2rayConfig) {
|
private fun fakedns(v2rayConfig: V2rayConfig) {
|
||||||
if (settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true) {
|
if (settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true) {
|
||||||
v2rayConfig.fakedns = V2rayConfig.FakednsBean()
|
v2rayConfig.fakedns = listOf(V2rayConfig.FakednsBean())
|
||||||
v2rayConfig.outbounds.filter { it.protocol == "freedom" }.forEach {
|
v2rayConfig.outbounds.filter { it.protocol == "freedom" }.forEach {
|
||||||
it.settings?.domainStrategy = "UseIP"
|
it.settings?.domainStrategy = "UseIP"
|
||||||
}
|
}
|
||||||
@@ -277,7 +277,7 @@ object V2rayConfigUtil {
|
|||||||
val remoteDns = Utils.getRemoteDnsServers()
|
val remoteDns = Utils.getRemoteDnsServers()
|
||||||
if (v2rayConfig.inbounds.none { e -> e.protocol == "dokodemo-door" && e.tag == "dns-in" }) {
|
if (v2rayConfig.inbounds.none { e -> e.protocol == "dokodemo-door" && e.tag == "dns-in" }) {
|
||||||
val dnsInboundSettings = V2rayConfig.InboundBean.InSettingsBean(
|
val dnsInboundSettings = V2rayConfig.InboundBean.InSettingsBean(
|
||||||
address = if (remoteDns.first().startsWith("https")) "1.1.1.1" else remoteDns.first(),
|
address = if (Utils.isPureIpAddress(remoteDns.first())) remoteDns.first() else "1.1.1.1",
|
||||||
port = 53,
|
port = 53,
|
||||||
network = "tcp,udp")
|
network = "tcp,udp")
|
||||||
|
|
||||||
@@ -346,7 +346,7 @@ object V2rayConfigUtil {
|
|||||||
if (routingMode == "2" || routingMode == "3") {
|
if (routingMode == "2" || routingMode == "3") {
|
||||||
servers.add(V2rayConfig.DnsBean.ServersBean(domesticDns.first(), 53, geositeCn, geoipCn))
|
servers.add(V2rayConfig.DnsBean.ServersBean(domesticDns.first(), 53, geositeCn, geoipCn))
|
||||||
}
|
}
|
||||||
if (!domesticDns.first().startsWith("https")) {
|
if (Utils.isPureIpAddress(domesticDns.first())) {
|
||||||
v2rayConfig.routing.rules.add(0, V2rayConfig.RoutingBean.RulesBean(
|
v2rayConfig.routing.rules.add(0, V2rayConfig.RoutingBean.RulesBean(
|
||||||
type = "field",
|
type = "field",
|
||||||
outboundTag = AppConfig.TAG_DIRECT,
|
outboundTag = AppConfig.TAG_DIRECT,
|
||||||
@@ -372,7 +372,7 @@ object V2rayConfigUtil {
|
|||||||
hosts = hosts)
|
hosts = hosts)
|
||||||
|
|
||||||
// DNS routing
|
// DNS routing
|
||||||
if (!remoteDns.first().startsWith("https")) {
|
if (Utils.isPureIpAddress(remoteDns.first())) {
|
||||||
v2rayConfig.routing.rules.add(0, V2rayConfig.RoutingBean.RulesBean(
|
v2rayConfig.routing.rules.add(0, V2rayConfig.RoutingBean.RulesBean(
|
||||||
type = "field",
|
type = "field",
|
||||||
outboundTag = AppConfig.TAG_AGENT,
|
outboundTag = AppConfig.TAG_AGENT,
|
||||||
|
|||||||
Reference in New Issue
Block a user