diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2012-11-30 12:37:26 +0000 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-12-03 15:14:20 +0100 |
commit | a0ecb85a2c3af73c63b6d44ce82aea52347ccf55 (patch) | |
tree | 41b54a39fabf0bda2bf3ea601154b36076d7b1d6 /net/ipv4 | |
parent | 6d1fafcaecaa2e66eb9861a39d22fc7380ce6f78 (diff) | |
download | linux-3.10-a0ecb85a2c3af73c63b6d44ce82aea52347ccf55.tar.gz linux-3.10-a0ecb85a2c3af73c63b6d44ce82aea52347ccf55.tar.bz2 linux-3.10-a0ecb85a2c3af73c63b6d44ce82aea52347ccf55.zip |
netfilter: nf_nat: Handle routing changes in MASQUERADE target
When the route changes (backup default route, VPNs) which affect a
masqueraded target, the packets were sent out with the outdated source
address. The patch addresses the issue by comparing the outgoing interface
directly with the masqueraded interface in the nat table.
Events are inefficient in this case, because it'd require adding route
events to the network core and then scanning the whole conntrack table
and re-checking the route for all entry.
Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/netfilter/iptable_nat.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv4/netfilter/iptable_nat.c b/net/ipv4/netfilter/iptable_nat.c index ac635a7b441..da2c8a368f6 100644 --- a/net/ipv4/netfilter/iptable_nat.c +++ b/net/ipv4/netfilter/iptable_nat.c @@ -134,6 +134,10 @@ nf_nat_ipv4_fn(unsigned int hooknum, /* ESTABLISHED */ NF_CT_ASSERT(ctinfo == IP_CT_ESTABLISHED || ctinfo == IP_CT_ESTABLISHED_REPLY); + if (nf_nat_oif_changed(hooknum, ctinfo, nat, out)) { + nf_ct_kill_acct(ct, ctinfo, skb); + return NF_DROP; + } } return nf_nat_packet(ct, ctinfo, hooknum, skb); |