dns fix for xray(ios)
This commit is contained in:
parent
c59216b58a
commit
de20add857
3 changed files with 54 additions and 8 deletions
7
XrayConfig.swift
Normal file
7
XrayConfig.swift
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct XrayConfig: Decodable {
|
||||||
|
let dns1: String?
|
||||||
|
let dns2: String?
|
||||||
|
let config: String
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import WireGuardKitGo
|
||||||
|
|
||||||
enum XrayErrors: Error {
|
enum XrayErrors: Error {
|
||||||
case noXrayConfig
|
case noXrayConfig
|
||||||
|
case xrayConfigIsWrong
|
||||||
case cantSaveXrayConfig
|
case cantSaveXrayConfig
|
||||||
case cantParseListenAndPort
|
case cantParseListenAndPort
|
||||||
case cantSaveHevSocksConfig
|
case cantSaveHevSocksConfig
|
||||||
|
@ -26,7 +27,7 @@ extension PacketTunnelProvider {
|
||||||
// Xray configuration
|
// Xray configuration
|
||||||
guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol,
|
guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol,
|
||||||
let providerConfiguration = protocolConfiguration.providerConfiguration,
|
let providerConfiguration = protocolConfiguration.providerConfiguration,
|
||||||
let xrayConfigData = providerConfiguration[Constants.xrayConfigKey] as? Data else {
|
let configData = providerConfiguration[Constants.xrayConfigKey] as? Data else {
|
||||||
xrayLog(.error, message: "Can't get xray configuration")
|
xrayLog(.error, message: "Can't get xray configuration")
|
||||||
completionHandler(XrayErrors.noXrayConfig)
|
completionHandler(XrayErrors.noXrayConfig)
|
||||||
return
|
return
|
||||||
|
@ -57,12 +58,29 @@ extension PacketTunnelProvider {
|
||||||
return settings
|
return settings
|
||||||
}()
|
}()
|
||||||
|
|
||||||
let dns = ["8.8.4.4","1.1.1.1"]
|
|
||||||
settings.dnsSettings = NEDNSSettings(servers: dns)
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let port = 10808
|
let xrayConfig = try JSONDecoder().decode(XrayConfig.self,
|
||||||
let address = "::1"
|
from: configData)
|
||||||
|
|
||||||
|
var dnsArray = [String]()
|
||||||
|
if let dns1 = xrayConfig.dns1 {
|
||||||
|
dnsArray.append(dns1)
|
||||||
|
}
|
||||||
|
if let dns2 = xrayConfig.dns2 {
|
||||||
|
dnsArray.append(dns2)
|
||||||
|
}
|
||||||
|
|
||||||
|
settings.dnsSettings = !dnsArray.isEmpty
|
||||||
|
? NEDNSSettings(servers: dnsArray)
|
||||||
|
: NEDNSSettings(servers: ["1.1.1.1"])
|
||||||
|
|
||||||
|
let xrayConfigData = xrayConfig.config.data(using: .utf8)
|
||||||
|
|
||||||
|
guard let xrayConfigData else {
|
||||||
|
xrayLog(.error, message: "Can't encode config to data")
|
||||||
|
completionHandler(XrayErrors.xrayConfigIsWrong)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let jsonDict = try JSONSerialization.jsonObject(with: xrayConfigData,
|
let jsonDict = try JSONSerialization.jsonObject(with: xrayConfigData,
|
||||||
options: []) as? [String: Any]
|
options: []) as? [String: Any]
|
||||||
|
@ -73,6 +91,9 @@ extension PacketTunnelProvider {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let port = 10808
|
||||||
|
let address = "::1"
|
||||||
|
|
||||||
if var inboundsArray = jsonDict["inbounds"] as? [[String: Any]], !inboundsArray.isEmpty {
|
if var inboundsArray = jsonDict["inbounds"] as? [[String: Any]], !inboundsArray.isEmpty {
|
||||||
inboundsArray[0]["port"] = port
|
inboundsArray[0]["port"] = port
|
||||||
inboundsArray[0]["listen"] = address
|
inboundsArray[0]["listen"] = address
|
||||||
|
|
|
@ -511,18 +511,36 @@ bool IosController::setupXray()
|
||||||
{
|
{
|
||||||
QJsonObject config = m_rawConfig[ProtocolProps::key_proto_config_data(amnezia::Proto::Xray)].toObject();
|
QJsonObject config = m_rawConfig[ProtocolProps::key_proto_config_data(amnezia::Proto::Xray)].toObject();
|
||||||
QJsonDocument xrayConfigDoc(config);
|
QJsonDocument xrayConfigDoc(config);
|
||||||
|
|
||||||
QString xrayConfigStr(xrayConfigDoc.toJson(QJsonDocument::Compact));
|
QString xrayConfigStr(xrayConfigDoc.toJson(QJsonDocument::Compact));
|
||||||
|
|
||||||
return startXray(xrayConfigStr);
|
QJsonObject finalConfig;
|
||||||
|
finalConfig.insert(config_key::dns1, m_rawConfig[config_key::dns1].toString());
|
||||||
|
finalConfig.insert(config_key::dns2, m_rawConfig[config_key::dns2].toString());
|
||||||
|
finalConfig.insert(config_key::config, xrayConfigStr);
|
||||||
|
|
||||||
|
QJsonDocument finalConfigDoc(finalConfig);
|
||||||
|
QString finalConfigStr(finalConfigDoc.toJson(QJsonDocument::Compact));
|
||||||
|
|
||||||
|
return startXray(finalConfigStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IosController::setupSSXray()
|
bool IosController::setupSSXray()
|
||||||
{
|
{
|
||||||
QJsonObject config = m_rawConfig[ProtocolProps::key_proto_config_data(amnezia::Proto::SSXray)].toObject();
|
QJsonObject config = m_rawConfig[ProtocolProps::key_proto_config_data(amnezia::Proto::SSXray)].toObject();
|
||||||
QJsonDocument ssXrayConfigDoc(config);
|
QJsonDocument ssXrayConfigDoc(config);
|
||||||
|
|
||||||
QString ssXrayConfigStr(ssXrayConfigDoc.toJson(QJsonDocument::Compact));
|
QString ssXrayConfigStr(ssXrayConfigDoc.toJson(QJsonDocument::Compact));
|
||||||
|
|
||||||
return startXray(ssXrayConfigStr);
|
QJsonObject finalConfig;
|
||||||
|
finalConfig.insert(config_key::dns1, m_rawConfig[config_key::dns1]);
|
||||||
|
finalConfig.insert(config_key::dns2, m_rawConfig[config_key::dns2]);
|
||||||
|
finalConfig.insert(config_key::config, ssXrayConfigStr);
|
||||||
|
|
||||||
|
QJsonDocument finalConfigDoc(finalConfig);
|
||||||
|
QString finalConfigStr(finalConfigDoc.toJson(QJsonDocument::Compact));
|
||||||
|
|
||||||
|
return startXray(finalConfigStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IosController::setupAwg()
|
bool IosController::setupAwg()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue