diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-04-23 13:10:25 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-05-17 11:08:50 +0200 |
| commit | 03bea638ea4be5b1b1faf1a173f49866d5c50d52 (patch) | |
| tree | 7e02108a034783dd1b6f544ad89e069adfbe1469 | |
| parent | 7ae1b10f47a5f5e43fda2bb94893980edc1b6865 (diff) | |
| download | mullvadvpn-03bea638ea4be5b1b1faf1a173f49866d5c50d52.tar.xz mullvadvpn-03bea638ea4be5b1b1faf1a173f49866d5c50d52.zip | |
Route exit peer via entry peer
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/mod.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs index c51fdf57f5..62ea95ce07 100644 --- a/talpid-core/src/tunnel/wireguard/mod.rs +++ b/talpid-core/src/tunnel/wireguard/mod.rs @@ -1,4 +1,5 @@ use self::config::Config; +use cfg_if::cfg_if; #[cfg(not(windows))] use super::tun_provider; use super::{tun_provider::TunProvider, TunnelEvent, TunnelMetadata}; @@ -342,9 +343,25 @@ impl WireguardMonitor { } fn get_routes(iface_name: &str, config: &Config) -> HashSet<RequiredRoute> { + #[cfg(target_os = "linux")] + use netlink_packet_route::rtnl::constants::RT_TABLE_MAIN; + let node = routing::Node::device(iface_name.to_string()); let mut routes: HashSet<RequiredRoute> = Self::get_tunnel_routes(config) - .map(|network| RequiredRoute::new(network, node.clone())) + .map(|network| { + cfg_if! { + if #[cfg(target_os = "linux")] { + if network.prefix() == 0 { + RequiredRoute::new(network, node.clone()) + } else { + RequiredRoute::new(network, node.clone()) + .table(u32::from(RT_TABLE_MAIN)) + } + } else { + RequiredRoute::new(network, node.clone()) + } + } + }) .collect(); // route endpoints with specific routes @@ -360,8 +377,6 @@ impl WireguardMonitor { // using `mullvad-exclude` #[cfg(target_os = "linux")] { - use netlink_packet_route::rtnl::constants::RT_TABLE_MAIN; - routes.insert( RequiredRoute::new( ipnetwork::Ipv4Network::from(config.ipv4_gateway).into(), |
