summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-10-14 11:54:39 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-10-22 09:33:58 +0200
commit14c46291a04797be58a59db556d96cc1330944ea (patch)
tree4c5d3fc36c0f7f09283f948fb451af4e5501f2e3
parent6acc15839065118654334bcec763515288deab50 (diff)
downloadmullvadvpn-14c46291a04797be58a59db556d96cc1330944ea.tar.xz
mullvadvpn-14c46291a04797be58a59db556d96cc1330944ea.zip
Add custom DNS setting
-rw-r--r--mullvad-daemon/src/lib.rs1
-rw-r--r--mullvad-daemon/src/settings.rs9
-rw-r--r--mullvad-types/src/settings/mod.rs1
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs7
-rw-r--r--talpid-types/src/net/mod.rs2
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.