]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "netfilter: nat: force port remap to prevent shadowing well-known ports"
authorFlorian Westphal <fw@strlen.de>
Tue, 8 Mar 2022 12:52:11 +0000 (13:52 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 8 Mar 2022 12:52:11 +0000 (13:52 +0100)
commit2f73c4a021b86624f51ef70afe1eacbddf703e57
tree0ee98e723ff4d4695dac75185365806a79e2ef64
parente34456c4c16cbb1727791968c583154dea156ae7
Revert "netfilter: nat: force port remap to prevent shadowing well-known ports"

This reverts commit 083d758350017d472e85fa70c5c06c67e52ea5a1.

This change breaks existing setups where conntrack is used with
asymmetric paths.

In these cases, the NAT transformation occurs on the syn-ack instead of
the syn:

1. SYN    x:12345 -> y -> 443 // sent by initiator, receiverd by responder
2. SYNACK y:443 -> x:12345 // First packet seen by conntrack, as sent by responder
3. tuple_force_port_remap() gets called, sees:
  'tcp from 443 to port 12345 NAT' -> pick a new source port, inititor receives
4. SYNACK y:$RANDOM -> x:12345   // connection is never established

While its possible to avoid the breakage with NOTRACK rules, a kernel
update should not break working setups.

An alternative to the revert is to augment conntrack to tag
mid-stream connections plus more code in the nat core to skip NAT
for such connections, however, this leads to more interaction/integration
between conntrack and NAT.

Therefore, revert, users will need to add explicit nat rules to avoid
port shadowing.

Link: https://lore.kernel.org/netfilter-devel/20220302105908.GA5852@breakpoint.cc/#R
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2051413
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nf_nat_core.c
tools/testing/selftests/netfilter/nft_nat.sh