summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-24 14:57:53 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-24 14:57:53 -0300
commitfe896be6b01e8aa02922a3677c4927098a1a4e27 (patch)
tree4aaa06cf9d85fc09fa3465a40f4ea60394616d85
parent3c54992c343097dcdb329f02e8fc51ca4866796c (diff)
parent33d346f46b0733990d09d2432ca4e31cc4442b5c (diff)
downloadmullvadvpn-fe896be6b01e8aa02922a3677c4927098a1a4e27.tar.xz
mullvadvpn-fe896be6b01e8aa02922a3677c4927098a1a4e27.zip
Merge branch 'fix-ipv6-on-android'
-rw-r--r--CHANGELOG.md4
-rw-r--r--android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt13
-rw-r--r--mullvad-daemon/src/settings.rs8
-rw-r--r--mullvad-types/src/settings/mod.rs5
4 files changed, 27 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 70d1e6d286..373327b590 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -35,6 +35,7 @@ Line wrap the file at 100 chars. Th
- Add a reconnect button to disconnect and connect again without closing the tunnel device to avoid
leaking any data during the reconnection.
- Add quick settings tile to control the tunnel state.
+- Enable IPv6 traffic through the tunnel.
### Changed
- Prefer WireGuard when tunnel protocol is set to _auto_ on Linux and MacOS.
@@ -72,6 +73,9 @@ Line wrap the file at 100 chars. Th
- Fix issue in daemon where the `block_when_disconnected` setting was sometimes not honored when
stopping the daemon. I.e. traffic could flow freely after the daemon was stopped.
+#### Android
+- Fix issue where IPv6 traffic could leak outside of the tunnel.
+
## [2020.3] - 2020-02-20
This release is identical to 2020.3-beta1
diff --git a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
index e2ea8c5818..a36e0b1db6 100644
--- a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
@@ -1,6 +1,9 @@
package net.mullvad.talpid
import android.net.VpnService
+import java.net.Inet4Address
+import java.net.Inet6Address
+import java.net.InetAddress
import net.mullvad.talpid.tun_provider.TunConfig
open class TalpidVpnService : VpnService() {
@@ -17,7 +20,7 @@ open class TalpidVpnService : VpnService() {
fun createTun(config: TunConfig): Int {
val builder = Builder().apply {
for (address in config.addresses) {
- addAddress(address, 32)
+ addAddress(address, prefixForAddress(address))
}
for (dnsServer in config.dnsServers) {
@@ -40,4 +43,12 @@ open class TalpidVpnService : VpnService() {
fun bypass(socket: Int): Boolean {
return protect(socket)
}
+
+ private fun prefixForAddress(address: InetAddress): Int {
+ when (address) {
+ is Inet4Address -> return 32
+ is Inet6Address -> return 128
+ else -> throw RuntimeException("Invalid IP address (not IPv4 nor IPv6)")
+ }
+ }
}
diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs
index d61eb1c204..df0ee0b996 100644
--- a/mullvad-daemon/src/settings.rs
+++ b/mullvad-daemon/src/settings.rs
@@ -16,7 +16,13 @@ use talpid_core::logging::windows::log_sink;
pub fn load() -> Settings {
match Settings::load() {
- Ok(settings) => settings,
+ Ok(mut settings) => {
+ // Force IPv6 to be enabled on Android
+ if cfg!(target_os = "android") {
+ let _ = settings.set_enable_ipv6(true);
+ }
+ settings
+ }
#[cfg(windows)]
Err(SettingsError::ReadError(ref _path, ref e)) if e.kind() == ErrorKind::NotFound => {
info!(
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index 3c873ce98c..495d82739a 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -364,7 +364,10 @@ impl Default for TunnelOptions {
mtu: None,
automatic_rotation: None,
},
- generic: GenericTunnelOptions { enable_ipv6: false },
+ generic: GenericTunnelOptions {
+ // Enable IPv6 be default on Android
+ enable_ipv6: cfg!(target_os = "android"),
+ },
}
}
}