diff --git a/makespec/BUILDVERSION b/makespec/BUILDVERSION index cf5d5ac8..7e1c8a3c 100644 --- a/makespec/BUILDVERSION +++ b/makespec/BUILDVERSION @@ -1 +1 @@ -6041 +6043 diff --git a/src/base/models/QvCoreSettings.hpp b/src/base/models/QvCoreSettings.hpp index 94f49143..1ce1a1ed 100644 --- a/src/base/models/QvCoreSettings.hpp +++ b/src/base/models/QvCoreSettings.hpp @@ -65,7 +65,8 @@ namespace Qv2ray::base::config bool v2rayFreedomDNS = false; bool withLocalDNS = true; bool dnsIntercept = false; - JSONSTRUCT_REGISTER(QvConfig_Connection, F(bypassCN, bypassBT, bypassLAN, enableProxy, v2rayFreedomDNS, withLocalDNS, dnsIntercept)) + bool fakeDNS = false; + JSONSTRUCT_REGISTER(QvConfig_Connection, F(bypassCN, bypassBT, bypassLAN, enableProxy, v2rayFreedomDNS, withLocalDNS, dnsIntercept, fakeDNS)) }; struct QvConfig_SystemProxy @@ -105,8 +106,9 @@ namespace Qv2ray::base::config int port = 12345; bool hasTCP = true; bool hasUDP = true; + bool sniffing = true; QString mode = "tproxy"; - JSONSTRUCT_REGISTER(QvConfig_TProxy, F(tProxyIP, tProxyV6IP, port, hasTCP, hasUDP, mode)) + JSONSTRUCT_REGISTER(QvConfig_TProxy, F(tProxyIP, tProxyV6IP, port, hasTCP, hasUDP, sniffing, mode)) }; struct QvConfig_Inbounds diff --git a/src/core/connection/Generation.hpp b/src/core/connection/Generation.hpp index 69ae2b80..66de147a 100644 --- a/src/core/connection/Generation.hpp +++ b/src/core/connection/Generation.hpp @@ -14,7 +14,7 @@ namespace Qv2ray::core::connection::generation }; ROUTERULE GenerateSingleRouteRule(RuleType t, const QString &str, const QString &outboundTag, const QString &type = "field"); ROUTERULE GenerateSingleRouteRule(RuleType t, const QStringList &list, const QString &outboundTag, const QString &type = "field"); - QJsonObject GenerateDNS(bool withLocalhost, const QvConfig_DNS &dnsServer); + QJsonObject GenerateDNS(bool withLocalhost, bool useFakeDNS, const QvConfig_DNS &dnsServer); ROUTING GenerateRoutes(bool enableProxy, bool bypassCN, bool bypassLAN, const QString &outboundTag, const QvConfig_Route &routeConfig); } // namespace routing diff --git a/src/core/connection/generation/inbounds.cpp b/src/core/connection/generation/inbounds.cpp index 636d29b2..39b3e03f 100644 --- a/src/core/connection/generation/inbounds.cpp +++ b/src/core/connection/generation/inbounds.cpp @@ -109,7 +109,7 @@ namespace Qv2ray::core::connection::generation::inbounds networks << "udp"; const auto tproxy_network = networks.join(","); const auto tProxySettings = GenerateDokodemoIN("", 0, tproxy_network, 0, true); - const static QJsonObject sniffingSettings = { { "enabled", true }, { "destOverride", QJsonArray{ "http", "tls" } } }; + //const static QJsonObject sniffingSettings = { { "enabled", true }, { "destOverride", QJsonArray{ "http", "tls" } } }; // tProxy IPv4 Settings { LOG("Processing tProxy IPv4 inbound"); @@ -117,7 +117,7 @@ namespace Qv2ray::core::connection::generation::inbounds INCONF.tProxySettings.tProxyIP, // INCONF.tProxySettings.port, // tProxySettings, // - sniffingSettings); + { INCONF.tProxySettings.sniffing ? sniffingOn : sniffingOff }); tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } }); inboundsList.append(tProxyIn); } @@ -128,7 +128,7 @@ namespace Qv2ray::core::connection::generation::inbounds INCONF.tProxySettings.tProxyV6IP, // INCONF.tProxySettings.port, // tProxySettings, // - sniffingSettings); + { INCONF.tProxySettings.sniffing ? sniffingOn : sniffingOff }); tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } }); inboundsList.append(tProxyIn); } diff --git a/src/core/connection/generation/routing.cpp b/src/core/connection/generation/routing.cpp index 4c90b86a..38be89f8 100644 --- a/src/core/connection/generation/routing.cpp +++ b/src/core/connection/generation/routing.cpp @@ -1,9 +1,11 @@ #include "core/connection/Generation.hpp" namespace Qv2ray::core::connection::generation::routing { - QJsonObject GenerateDNS(bool withLocalhost, const QvConfig_DNS &dnsServer) + QJsonObject GenerateDNS(bool withLocalhost, bool useFakeDNS, const QvConfig_DNS &dnsServer) { QJsonObject root = dnsServer.toJson(); + if (useFakeDNS) + root.insert("fake", QJsonObject()); QJsonArray servers; for (const auto &serv : dnsServer.servers) { diff --git a/src/core/handler/RouteHandler.cpp b/src/core/handler/RouteHandler.cpp index 86f4478e..e931249b 100644 --- a/src/core/handler/RouteHandler.cpp +++ b/src/core/handler/RouteHandler.cpp @@ -369,7 +369,7 @@ namespace Qv2ray::core::handler const auto hasDNS = root.contains("dns") && !root.value("dns").toObject().isEmpty(); if (!hasDNS) { - root.insert("dns", GenerateDNS(connConf.withLocalDNS, dnsConf)); + root.insert("dns", GenerateDNS(connConf.withLocalDNS, connConf.fakeDNS, dnsConf)); LOG("Added global DNS config"); } diff --git a/src/ui/widgets/editors/w_RoutesEditor.cpp b/src/ui/widgets/editors/w_RoutesEditor.cpp index 3f51cf75..e40fd199 100644 --- a/src/ui/widgets/editors/w_RoutesEditor.cpp +++ b/src/ui/widgets/editors/w_RoutesEditor.cpp @@ -292,7 +292,7 @@ CONFIGROOT RouteEditor::OpenEditor() outboundsArray.append(outboundJsonObject); } root["outbounds"] = outboundsArray; - root["dns"] = GenerateDNS(false, dnsWidget->GetDNSObject()); + root["dns"] = GenerateDNS(false, false, dnsWidget->GetDNSObject()); return root; } diff --git a/src/ui/widgets/windows/w_PreferencesWindow.cpp b/src/ui/widgets/windows/w_PreferencesWindow.cpp index b9dc6530..0b9f7818 100644 --- a/src/ui/widgets/windows/w_PreferencesWindow.cpp +++ b/src/ui/widgets/windows/w_PreferencesWindow.cpp @@ -131,10 +131,13 @@ PreferencesWindow::PreferencesWindow(QWidget *parent) : QvDialog("PreferenceWind tProxyPort->setValue(CurrentConfig.inboundConfig.tProxySettings.port); tproxyEnableTCP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasTCP); tproxyEnableUDP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasUDP); + tproxySniffingCB->setChecked(CurrentConfig.inboundConfig.tProxySettings.sniffing); tproxyMode->setCurrentText(CurrentConfig.inboundConfig.tProxySettings.mode); outboundMark->setValue(CurrentConfig.outboundConfig.mark); // dnsIntercept->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept); + fakeDNSCb->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.fakeDNS); + fakeDNSCb->setEnabled(CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept); DnsFreedomCb->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.v2rayFreedomDNS); // // Kernel Settings @@ -886,6 +889,12 @@ void PreferencesWindow::on_tproxyEnableUDP_toggled(bool checked) CurrentConfig.inboundConfig.tProxySettings.hasUDP = checked; } +void PreferencesWindow::on_tproxySniffingCB_stateChanged(int arg1) +{ + NEEDRESTART + CurrentConfig.inboundConfig.tProxySettings.sniffing = arg1 == Qt::Checked; +} + void PreferencesWindow::on_tproxyMode_currentTextChanged(const QString &arg1) { NEEDRESTART @@ -937,6 +946,13 @@ void PreferencesWindow::on_dnsIntercept_toggled(bool checked) { NEEDRESTART CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept = checked; + fakeDNSCb->setEnabled(checked); +} + +void PreferencesWindow::on_fakeDNSCb_toggled(bool checked) +{ + NEEDRESTART + CurrentConfig.defaultRouteConfig.connectionConfig.fakeDNS = checked; } void PreferencesWindow::on_qvProxyCustomProxy_clicked() diff --git a/src/ui/widgets/windows/w_PreferencesWindow.hpp b/src/ui/widgets/windows/w_PreferencesWindow.hpp index 99aae4da..ea9c7ae8 100644 --- a/src/ui/widgets/windows/w_PreferencesWindow.hpp +++ b/src/ui/widgets/windows/w_PreferencesWindow.hpp @@ -108,12 +108,14 @@ class PreferencesWindow void on_jumpListCountSB_valueChanged(int arg1); void on_outboundMark_valueChanged(int arg1); void on_dnsIntercept_toggled(bool checked); + void on_fakeDNSCb_toggled(bool checked); void on_qvProxyCustomProxy_clicked(); void on_qvProxySystemProxy_clicked(); void on_qvProxyNoProxy_clicked(); void on_DnsFreedomCb_stateChanged(int arg1); void on_httpSniffingCB_stateChanged(int arg1); void on_socksSniffingCB_stateChanged(int arg1); + void on_tproxySniffingCB_stateChanged(int arg1); void on_pushButton_clicked(); void on_noAutoConnectRB_clicked(); void on_lastConnectedRB_clicked(); diff --git a/src/ui/widgets/windows/w_PreferencesWindow.ui b/src/ui/widgets/windows/w_PreferencesWindow.ui index aef2ac59..f7b1e502 100644 --- a/src/ui/widgets/windows/w_PreferencesWindow.ui +++ b/src/ui/widgets/windows/w_PreferencesWindow.ui @@ -1358,6 +1358,13 @@ Custom DNS Settings + + + + Enable Sniffing + + + @@ -1610,6 +1617,23 @@ Custom DNS Settings + + + + Use Fake DNS + + + Qt::PlainText + + + + + + + Enabled + + +