summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-05-24 15:54:54 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-06-14 12:38:32 +0200
commit7cde3d4e36d5bda320da6bac1ca3808325ac4b6c (patch)
treedafa861801c5aa7ba016aa07c136c0dc73062671 /talpid-core/src
parent6c8d0353aa02f0c410f1040b31f1d7cafe40a6da (diff)
downloadmullvadvpn-7cde3d4e36d5bda320da6bac1ca3808325ac4b6c.tar.xz
mullvadvpn-7cde3d4e36d5bda320da6bac1ca3808325ac4b6c.zip
Patch initial WireGuard config to block non-config-client traffic on Android
Diffstat (limited to 'talpid-core/src')
-rw-r--r--talpid-core/src/tunnel/wireguard/mod.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs
index 30ecd298dd..7806e4cdc3 100644
--- a/talpid-core/src/tunnel/wireguard/mod.rs
+++ b/talpid-core/src/tunnel/wireguard/mod.rs
@@ -214,9 +214,28 @@ impl WireguardMonitor {
#[cfg(target_os = "windows")]
let (setup_done_tx, mut setup_done_rx) = mpsc::channel(0);
+
+ // Use allowed IPs to block anything but the v4 gateway, if PSK exchange is on.
+ let patched_config_ref;
+ let mut patched_config;
+ if psk_negotiation.is_some() {
+ patched_config = config.clone();
+ let gateway_net = ipnetwork::IpNetwork::from(IpAddr::from(config.ipv4_gateway));
+ for peer in &mut patched_config.peers {
+ for allowed_ip in &mut peer.allowed_ips {
+ if allowed_ip.is_ipv4() && allowed_ip.prefix() == 0 {
+ *allowed_ip = gateway_net;
+ }
+ }
+ }
+ patched_config_ref = &patched_config;
+ } else {
+ patched_config_ref = &config;
+ }
+
let tunnel = Self::open_tunnel(
runtime.clone(),
- &config,
+ patched_config_ref,
log_path,
resource_dir,
tun_provider,