summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-11-19 15:42:36 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-11-24 12:29:47 +0100
commit5229756084b3288474351bca277e9f530465afba (patch)
tree52e2716bc96f1533f4def7a9077cbb101f5fb857
parentb3bf892256b2334aac70b3714e9fb0aa6dac51cb (diff)
downloadmullvadvpn-5229756084b3288474351bca277e9f530465afba.tar.xz
mullvadvpn-5229756084b3288474351bca277e9f530465afba.zip
Fix IPv6 routing when there is no non-tunnel default route, which caused it to use the next rule
-rw-r--r--talpid-core/src/routing/linux.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/talpid-core/src/routing/linux.rs b/talpid-core/src/routing/linux.rs
index de5313f20e..7329e4b70e 100644
--- a/talpid-core/src/routing/linux.rs
+++ b/talpid-core/src/routing/linux.rs
@@ -13,7 +13,7 @@ use futures::{channel::mpsc::UnboundedReceiver, future::FutureExt, StreamExt, Tr
use ipnetwork::IpNetwork;
use lazy_static::lazy_static;
use netlink_packet_route::{
- constants::{ARPHRD_LOOPBACK, FIB_RULE_INVERT, FR_ACT_TO_TBL},
+ constants::{ARPHRD_LOOPBACK, FIB_RULE_INVERT, FR_ACT_TO_TBL, FR_ACT_UNREACHABLE},
link::{nlas::Nla as LinkNla, LinkMessage},
route::{nlas::Nla as RouteNla, RouteHeader, RouteMessage},
rtnl::{
@@ -69,6 +69,14 @@ lazy_static! {
v6_rule.header.family = AF_INET6 as u8;
v6_rule
};
+ static ref PROHIBIT_NON_DEFAULT_V6: RuleMessage = RuleMessage {
+ header: RuleHeader {
+ family: AF_INET6 as u8,
+ action: FR_ACT_UNREACHABLE,
+ ..RuleHeader::default()
+ },
+ nlas: vec![RuleNla::FwMark(split_tunnel::MARK as u32),],
+ };
static ref EXCLUSIONS_RULE_V4: RuleMessage = RuleMessage {
header: RuleHeader {
family: AF_INET as u8,
@@ -85,12 +93,12 @@ lazy_static! {
v6_rule.header.family = AF_INET6 as u8;
v6_rule
};
-
- static ref ALL_RULES: [&'static RuleMessage; 6] = [
+ static ref ALL_RULES: [&'static RuleMessage; 7] = [
&*NO_FWMARK_RULE_V4,
&*NO_FWMARK_RULE_V6,
&*SUPPRESS_RULE_V4,
&*SUPPRESS_RULE_V6,
+ &*PROHIBIT_NON_DEFAULT_V6,
&*EXCLUSIONS_RULE_V4,
&*EXCLUSIONS_RULE_V6,
];