mirror of
https://github.com/Qv2ray/Qv2ray.git
synced 2025-05-20 10:50:23 +08:00
add: support FakeDNS
This commit is contained in:
parent
b3ab6294be
commit
a8d99ebce0
@ -1 +1 @@
|
|||||||
6041
|
6043
|
||||||
|
@ -65,7 +65,8 @@ namespace Qv2ray::base::config
|
|||||||
bool v2rayFreedomDNS = false;
|
bool v2rayFreedomDNS = false;
|
||||||
bool withLocalDNS = true;
|
bool withLocalDNS = true;
|
||||||
bool dnsIntercept = false;
|
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
|
struct QvConfig_SystemProxy
|
||||||
@ -105,8 +106,9 @@ namespace Qv2ray::base::config
|
|||||||
int port = 12345;
|
int port = 12345;
|
||||||
bool hasTCP = true;
|
bool hasTCP = true;
|
||||||
bool hasUDP = true;
|
bool hasUDP = true;
|
||||||
|
bool sniffing = true;
|
||||||
QString mode = "tproxy";
|
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
|
struct QvConfig_Inbounds
|
||||||
|
@ -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 QString &str, const QString &outboundTag, const QString &type = "field");
|
||||||
ROUTERULE GenerateSingleRouteRule(RuleType t, const QStringList &list, 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);
|
ROUTING GenerateRoutes(bool enableProxy, bool bypassCN, bool bypassLAN, const QString &outboundTag, const QvConfig_Route &routeConfig);
|
||||||
} // namespace routing
|
} // namespace routing
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ namespace Qv2ray::core::connection::generation::inbounds
|
|||||||
networks << "udp";
|
networks << "udp";
|
||||||
const auto tproxy_network = networks.join(",");
|
const auto tproxy_network = networks.join(",");
|
||||||
const auto tProxySettings = GenerateDokodemoIN("", 0, tproxy_network, 0, true);
|
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
|
// tProxy IPv4 Settings
|
||||||
{
|
{
|
||||||
LOG("Processing tProxy IPv4 inbound");
|
LOG("Processing tProxy IPv4 inbound");
|
||||||
@ -117,7 +117,7 @@ namespace Qv2ray::core::connection::generation::inbounds
|
|||||||
INCONF.tProxySettings.tProxyIP, //
|
INCONF.tProxySettings.tProxyIP, //
|
||||||
INCONF.tProxySettings.port, //
|
INCONF.tProxySettings.port, //
|
||||||
tProxySettings, //
|
tProxySettings, //
|
||||||
sniffingSettings);
|
{ INCONF.tProxySettings.sniffing ? sniffingOn : sniffingOff });
|
||||||
tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } });
|
tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } });
|
||||||
inboundsList.append(tProxyIn);
|
inboundsList.append(tProxyIn);
|
||||||
}
|
}
|
||||||
@ -128,7 +128,7 @@ namespace Qv2ray::core::connection::generation::inbounds
|
|||||||
INCONF.tProxySettings.tProxyV6IP, //
|
INCONF.tProxySettings.tProxyV6IP, //
|
||||||
INCONF.tProxySettings.port, //
|
INCONF.tProxySettings.port, //
|
||||||
tProxySettings, //
|
tProxySettings, //
|
||||||
sniffingSettings);
|
{ INCONF.tProxySettings.sniffing ? sniffingOn : sniffingOff });
|
||||||
tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } });
|
tProxyIn.insert("streamSettings", QJsonObject{ { "sockopt", QJsonObject{ { "tproxy", INCONF.tProxySettings.mode } } } });
|
||||||
inboundsList.append(tProxyIn);
|
inboundsList.append(tProxyIn);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include "core/connection/Generation.hpp"
|
#include "core/connection/Generation.hpp"
|
||||||
namespace Qv2ray::core::connection::generation::routing
|
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();
|
QJsonObject root = dnsServer.toJson();
|
||||||
|
if (useFakeDNS)
|
||||||
|
root.insert("fake", QJsonObject());
|
||||||
QJsonArray servers;
|
QJsonArray servers;
|
||||||
for (const auto &serv : dnsServer.servers)
|
for (const auto &serv : dnsServer.servers)
|
||||||
{
|
{
|
||||||
|
@ -369,7 +369,7 @@ namespace Qv2ray::core::handler
|
|||||||
const auto hasDNS = root.contains("dns") && !root.value("dns").toObject().isEmpty();
|
const auto hasDNS = root.contains("dns") && !root.value("dns").toObject().isEmpty();
|
||||||
if (!hasDNS)
|
if (!hasDNS)
|
||||||
{
|
{
|
||||||
root.insert("dns", GenerateDNS(connConf.withLocalDNS, dnsConf));
|
root.insert("dns", GenerateDNS(connConf.withLocalDNS, connConf.fakeDNS, dnsConf));
|
||||||
LOG("Added global DNS config");
|
LOG("Added global DNS config");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ CONFIGROOT RouteEditor::OpenEditor()
|
|||||||
outboundsArray.append(outboundJsonObject);
|
outboundsArray.append(outboundJsonObject);
|
||||||
}
|
}
|
||||||
root["outbounds"] = outboundsArray;
|
root["outbounds"] = outboundsArray;
|
||||||
root["dns"] = GenerateDNS(false, dnsWidget->GetDNSObject());
|
root["dns"] = GenerateDNS(false, false, dnsWidget->GetDNSObject());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,10 +131,13 @@ PreferencesWindow::PreferencesWindow(QWidget *parent) : QvDialog("PreferenceWind
|
|||||||
tProxyPort->setValue(CurrentConfig.inboundConfig.tProxySettings.port);
|
tProxyPort->setValue(CurrentConfig.inboundConfig.tProxySettings.port);
|
||||||
tproxyEnableTCP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasTCP);
|
tproxyEnableTCP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasTCP);
|
||||||
tproxyEnableUDP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasUDP);
|
tproxyEnableUDP->setChecked(CurrentConfig.inboundConfig.tProxySettings.hasUDP);
|
||||||
|
tproxySniffingCB->setChecked(CurrentConfig.inboundConfig.tProxySettings.sniffing);
|
||||||
tproxyMode->setCurrentText(CurrentConfig.inboundConfig.tProxySettings.mode);
|
tproxyMode->setCurrentText(CurrentConfig.inboundConfig.tProxySettings.mode);
|
||||||
outboundMark->setValue(CurrentConfig.outboundConfig.mark);
|
outboundMark->setValue(CurrentConfig.outboundConfig.mark);
|
||||||
//
|
//
|
||||||
dnsIntercept->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept);
|
dnsIntercept->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept);
|
||||||
|
fakeDNSCb->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.fakeDNS);
|
||||||
|
fakeDNSCb->setEnabled(CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept);
|
||||||
DnsFreedomCb->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.v2rayFreedomDNS);
|
DnsFreedomCb->setChecked(CurrentConfig.defaultRouteConfig.connectionConfig.v2rayFreedomDNS);
|
||||||
//
|
//
|
||||||
// Kernel Settings
|
// Kernel Settings
|
||||||
@ -886,6 +889,12 @@ void PreferencesWindow::on_tproxyEnableUDP_toggled(bool checked)
|
|||||||
CurrentConfig.inboundConfig.tProxySettings.hasUDP = 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)
|
void PreferencesWindow::on_tproxyMode_currentTextChanged(const QString &arg1)
|
||||||
{
|
{
|
||||||
NEEDRESTART
|
NEEDRESTART
|
||||||
@ -937,6 +946,13 @@ void PreferencesWindow::on_dnsIntercept_toggled(bool checked)
|
|||||||
{
|
{
|
||||||
NEEDRESTART
|
NEEDRESTART
|
||||||
CurrentConfig.defaultRouteConfig.connectionConfig.dnsIntercept = checked;
|
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()
|
void PreferencesWindow::on_qvProxyCustomProxy_clicked()
|
||||||
|
@ -108,12 +108,14 @@ class PreferencesWindow
|
|||||||
void on_jumpListCountSB_valueChanged(int arg1);
|
void on_jumpListCountSB_valueChanged(int arg1);
|
||||||
void on_outboundMark_valueChanged(int arg1);
|
void on_outboundMark_valueChanged(int arg1);
|
||||||
void on_dnsIntercept_toggled(bool checked);
|
void on_dnsIntercept_toggled(bool checked);
|
||||||
|
void on_fakeDNSCb_toggled(bool checked);
|
||||||
void on_qvProxyCustomProxy_clicked();
|
void on_qvProxyCustomProxy_clicked();
|
||||||
void on_qvProxySystemProxy_clicked();
|
void on_qvProxySystemProxy_clicked();
|
||||||
void on_qvProxyNoProxy_clicked();
|
void on_qvProxyNoProxy_clicked();
|
||||||
void on_DnsFreedomCb_stateChanged(int arg1);
|
void on_DnsFreedomCb_stateChanged(int arg1);
|
||||||
void on_httpSniffingCB_stateChanged(int arg1);
|
void on_httpSniffingCB_stateChanged(int arg1);
|
||||||
void on_socksSniffingCB_stateChanged(int arg1);
|
void on_socksSniffingCB_stateChanged(int arg1);
|
||||||
|
void on_tproxySniffingCB_stateChanged(int arg1);
|
||||||
void on_pushButton_clicked();
|
void on_pushButton_clicked();
|
||||||
void on_noAutoConnectRB_clicked();
|
void on_noAutoConnectRB_clicked();
|
||||||
void on_lastConnectedRB_clicked();
|
void on_lastConnectedRB_clicked();
|
||||||
|
@ -1358,6 +1358,13 @@ Custom DNS Settings</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="tproxySniffingCB">
|
||||||
|
<property name="text">
|
||||||
|
<string>Enable Sniffing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -1610,6 +1617,23 @@ Custom DNS Settings</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QLabel" name="label_42">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use Fake DNS</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="1">
|
||||||
|
<widget class="QCheckBox" name="fakeDNSCb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Enabled</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
Reference in New Issue
Block a user