diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-10-14 11:54:39 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-10-22 09:33:58 +0200 |
| commit | 14c46291a04797be58a59db556d96cc1330944ea (patch) | |
| tree | 4c5d3fc36c0f7f09283f948fb451af4e5501f2e3 | |
| parent | 6acc15839065118654334bcec763515288deab50 (diff) | |
| download | mullvadvpn-14c46291a04797be58a59db556d96cc1330944ea.tar.xz mullvadvpn-14c46291a04797be58a59db556d96cc1330944ea.zip | |
Add custom DNS setting
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 1 | ||||
| -rw-r--r-- | mullvad-daemon/src/settings.rs | 9 | ||||
| -rw-r--r-- | mullvad-types/src/settings/mod.rs | 1 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 7 | ||||
| -rw-r--r-- | talpid-types/src/net/mod.rs | 2 |
5 files changed, 20 insertions, 0 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 09f522bd81..f100befc10 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -576,6 +576,7 @@ where let tunnel_command_tx = tunnel_state_machine::spawn( settings.allow_lan, settings.block_when_disconnected, + settings.tunnel_options.generic.custom_dns.clone(), tunnel_parameters_generator, log_dir, resource_dir, diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs index c343d7c336..c0a983fe51 100644 --- a/mullvad-daemon/src/settings.rs +++ b/mullvad-daemon/src/settings.rs @@ -6,6 +6,7 @@ use mullvad_types::{ use std::{ fs::{self, File}, io, + net::IpAddr, ops::Deref, path::{Path, PathBuf}, }; @@ -210,6 +211,14 @@ impl SettingsPersister { self.update(should_save) } + pub fn set_custom_dns(&mut self, servers: Option<Vec<IpAddr>>) -> Result<bool, Error> { + let should_save = Self::update_field( + &mut self.settings.tunnel_options.generic.custom_dns, + servers, + ); + self.update(should_save) + } + pub fn set_wireguard_mtu(&mut self, mtu: Option<u16>) -> Result<bool, Error> { let should_save = Self::update_field(&mut self.settings.tunnel_options.wireguard.mtu, mtu); self.update(should_save) diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs index d32cf5fead..beb1b52256 100644 --- a/mullvad-types/src/settings/mod.rs +++ b/mullvad-types/src/settings/mod.rs @@ -177,6 +177,7 @@ impl Default for TunnelOptions { generic: GenericTunnelOptions { // Enable IPv6 be default on Android enable_ipv6: cfg!(target_os = "android"), + custom_dns: None, }, } } diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index 37a27ae58f..1793093580 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -27,6 +27,7 @@ use futures::{ use std::{ collections::HashSet, io, + net::IpAddr, path::{Path, PathBuf}, sync::{mpsc as sync_mpsc, Arc}, }; @@ -74,6 +75,7 @@ pub enum Error { pub async fn spawn( allow_lan: bool, block_when_disconnected: bool, + custom_dns: Option<Vec<IpAddr>>, tunnel_parameters_generator: impl TunnelParametersGenerator, log_dir: Option<PathBuf>, resource_dir: PathBuf, @@ -109,6 +111,7 @@ pub async fn spawn( allow_lan, block_when_disconnected, is_offline, + custom_dns, tunnel_parameters_generator, tun_provider, log_dir, @@ -184,6 +187,7 @@ impl TunnelStateMachine { allow_lan: bool, block_when_disconnected: bool, is_offline: bool, + custom_dns: Option<Vec<IpAddr>>, tunnel_parameters_generator: impl TunnelParametersGenerator, tun_provider: TunProvider, log_dir: Option<PathBuf>, @@ -208,6 +212,7 @@ impl TunnelStateMachine { allow_lan, block_when_disconnected, is_offline, + custom_dns, tunnel_parameters_generator: Box::new(tunnel_parameters_generator), tun_provider, log_dir, @@ -277,6 +282,8 @@ struct SharedTunnelStateValues { block_when_disconnected: bool, /// True when the computer is known to be offline. is_offline: bool, + /// Custom DNS servers to use. + custom_dns: Option<Vec<IpAddr>>, /// The generator of new `TunnelParameter`s tunnel_parameters_generator: Box<dyn TunnelParametersGenerator>, /// The provider of tunnel devices. diff --git a/talpid-types/src/net/mod.rs b/talpid-types/src/net/mod.rs index 15bf33a5bb..156462c3fc 100644 --- a/talpid-types/src/net/mod.rs +++ b/talpid-types/src/net/mod.rs @@ -203,6 +203,8 @@ pub struct GenericTunnelOptions { /// Enable configuration of IPv6 on the tunnel interface, allowing IPv6 communication to be /// forwarded through the tunnel. pub enable_ipv6: bool, + /// Custom DNS servers to use. + pub custom_dns: Option<Vec<IpAddr>>, } /// Returns a vector of IP networks representing all of the internet, 0.0.0.0/0. |
