diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-03-02 09:40:42 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-06-02 10:05:02 +0200 |
| commit | 2304fb57505aff1e6fca73c426cc24056ea136f2 (patch) | |
| tree | 185c0fe1757e64a7a38283fb555f7faf1bd530bd /talpid-core/src | |
| parent | 83f738eb9e4e070c93a2e24461ac03a3ce767269 (diff) | |
| download | mullvadvpn-2304fb57505aff1e6fca73c426cc24056ea136f2.tar.xz mullvadvpn-2304fb57505aff1e6fca73c426cc24056ea136f2.zip | |
Add function to remove split tunneling routing
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/split.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/talpid-core/src/split.rs b/talpid-core/src/split.rs index 23955d0f32..2b012f076a 100644 --- a/talpid-core/src/split.rs +++ b/talpid-core/src/split.rs @@ -104,6 +104,40 @@ pub fn route_marked_packets() -> Result<(), Error> { cmd.output().map(|_| ()).map_err(Error::RoutingTableSetup) } +/// Stop routing PID-associated packets through the physical interface. +pub fn disable_routing() -> Result<(), Error> { + // TODO: IPv6 + + let mut cmd = Command::new("ip"); + cmd.args(&[ + "-4", + "rule", + "del", + "from", + "all", + "fwmark", + &MARK.to_string(), + "lookup", + ROUTING_TABLE_NAME, + ]); + + log::trace!("running cmd - {:?}", &cmd); + let out = cmd.output(); + if out.is_err() { + log::warn!("Failed to delete routing policy: {}", out.err().unwrap()); + } else { + let out = out.unwrap(); + if !out.status.success() { + log::warn!( + "Failed to delete routing policy: {}", + String::from_utf8_lossy(&out.stderr) + ); + } + } + + Ok(()) +} + /// Route DNS requests through the tunnel interface. pub fn route_dns(tunnel_alias: &str, dns_servers: &[IpAddr]) -> Result<(), Error> { // TODO: IPv6 |
