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
+
+
+