use dhcp://auto for Tun+systemd-resolved on Linux

This commit is contained in:
Nova 2025-08-02 15:42:16 +03:30
parent 65fa1b6a8a
commit 6633ade093
2 changed files with 17 additions and 7 deletions

View File

@ -727,6 +727,14 @@ namespace Configs {
// Direct // Direct
auto directDNSAddress = dataStore->routing->direct_dns; auto directDNSAddress = dataStore->routing->direct_dns;
if (directDNSAddress == "localhost") directDNSAddress = BOX_UNDERLYING_DNS_EXPORT; if (directDNSAddress == "localhost") directDNSAddress = BOX_UNDERLYING_DNS_EXPORT;
#ifdef Q_OS_LINUX
auto usingSystemdResolved = ReadFileText("/etc/resolv.conf").contains("systemd-resolved");
if (dataStore->spmode_vpn && (directDNSAddress.startsWith("local") || directDNSAddress.startsWith("underlying")) && usingSystemdResolved)
{
MW_show_log("[Warning] Using local dns resolver with systemd-resolved enabled causes a dns loophole, using dhcp://auto as direct dns.");
directDNSAddress = "dhcp://auto";
}
#endif
QJsonObject directObj{ QJsonObject directObj{
{"tag", "dns-direct"}, {"tag", "dns-direct"},
{"address_resolver", "dns-local"}, {"address_resolver", "dns-local"},
@ -813,9 +821,17 @@ namespace Configs {
} }
// Underlying 100% Working DNS // Underlying 100% Working DNS
auto dnsLocalAddress = BOX_UNDERLYING_DNS_EXPORT;
#ifdef Q_OS_LINUX
if (dataStore->spmode_vpn && (dnsLocalAddress.startsWith("local") || dnsLocalAddress.startsWith("underlying")) && usingSystemdResolved)
{
MW_show_log("[Warning] Using local dns resolver with systemd-resolved enabled causes a dns loophole, using dhcp://auto as local dns.");
dnsLocalAddress = "dhcp://auto";
}
#endif
dnsServers += QJsonObject{ dnsServers += QJsonObject{
{"tag", "dns-local"}, {"tag", "dns-local"},
{"address", BOX_UNDERLYING_DNS_EXPORT}, {"address", dnsLocalAddress},
{"detour", "direct"}, {"detour", "direct"},
}; };

View File

@ -538,12 +538,6 @@ void MainWindow::profile_start(int _id) {
restartMsgboxTimer->cancel(); restartMsgboxTimer->cancel();
restartMsgboxTimer->deleteLater(); restartMsgboxTimer->deleteLater();
restartMsgbox->deleteLater(); restartMsgbox->deleteLater();
#ifdef Q_OS_LINUX
// Check systemd-resolved
if (Configs::dataStore->spmode_vpn && Configs::dataStore->routing->direct_dns.startsWith("local") && ReadFileText("/etc/resolv.conf").contains("systemd-resolved")) {
MW_show_log("[Warning] The default Direct DNS may not works with systemd-resolved, you may consider change your DNS settings.");
}
#endif
}); });
}); });
} }