diff --git a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java index d1f71804a..6595a6deb 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java +++ b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java @@ -803,6 +803,9 @@ else if ("vpn4".equals(name)) { getString(R.string.setting_dns, prefs.getString(name, "-"))); ServiceSinkhole.reload("changed " + name, this, false); + } else if ("custom_dns_enabled".equals(name)) { + ServiceSinkhole.reload("changed " + name, this, false); + } else if ("doh_enabled".equals(name)) { // Reset DoH client when toggled net.kollnig.missioncontrol.dns.DnsOverHttpsClient.resetInstance(); diff --git a/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java b/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java index 5869aaaad..9f9568ef8 100644 --- a/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java +++ b/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java @@ -1584,8 +1584,11 @@ public static List getDns(Context context) { // Get custom DNS servers SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean ip6 = prefs.getBoolean("ip6", true); - String vpnDns1 = prefs.getString("dns", null); - String vpnDns2 = prefs.getString("dns2", null); + // Preserve saved addresses when temporarily using the network's DNS. + // Default on so upgrades and older backups retain their DNS behaviour. + boolean customDns = prefs.getBoolean("custom_dns_enabled", true); + String vpnDns1 = customDns ? prefs.getString("dns", null) : null; + String vpnDns2 = customDns ? prefs.getString("dns2", null) : null; Log.i(TAG, "DNS system=" + TextUtils.join(",", sysDns) + " config=" + vpnDns1 + "," + vpnDns2); // First pass: IPv4 resolvers only. This reproduces the historical diff --git a/app/src/main/java/net/kollnig/missioncontrol/LocalNetworkAccess.java b/app/src/main/java/net/kollnig/missioncontrol/LocalNetworkAccess.java index 45ab416a8..921351fc4 100644 --- a/app/src/main/java/net/kollnig/missioncontrol/LocalNetworkAccess.java +++ b/app/src/main/java/net/kollnig/missioncontrol/LocalNetworkAccess.java @@ -94,7 +94,7 @@ private LocalNetworkAccess() { /** Preferences that can point TrackerControl at the local network. */ private static final String[] SETTINGS = { - "dns", "dns2", // custom VPN DNS servers + "dns", "dns2", "custom_dns_enabled", // custom VPN DNS servers "doh_enabled", "doh_endpoint", // Secure DNS "tcp_mss_clamp", // tethering compatibility mode "wg_enabled", "wg_config", // WireGuard remote egress @@ -220,8 +220,9 @@ private static boolean isConfigured(Context context) { } static boolean isConfigured(SharedPreferences prefs) { - if (isLocalAddress(prefs.getString("dns", null)) || - isLocalAddress(prefs.getString("dns2", null))) + if (prefs.getBoolean("custom_dns_enabled", true) && + (isLocalAddress(prefs.getString("dns", null)) || + isLocalAddress(prefs.getString("dns2", null)))) return true; if (prefs.getBoolean("doh_enabled", false) && diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e7aae0a28..806407ee3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -163,6 +163,8 @@ VPN IPv4: %s VPN IPv6: %s VPN DNS: %s + Use custom DNS + Turn off to use your network’s DNS without deleting the saved addresses. Secure DNS and remote VPN DNS take precedence. Validate at: %s Minimum DNS TTL: %s s Use SOCKS5 proxy diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 9115ae0b8..7e47522b3 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -145,10 +145,17 @@ android:hint="fd00:1:fd00:1:fd00:1:fd00:1" android:inputType="text" android:key="vpn6" /> +