[Bug 1501] issue with DNAT port range

bugzilla-daemon at netfilter.org bugzilla-daemon at netfilter.org
Wed Jul 26 17:36:44 CEST 2023


https://bugzilla.netfilter.org/show_bug.cgi?id=1501

Phil Sutter <phil at nwl.cc> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |phil at nwl.cc

--- Comment #7 from Phil Sutter <phil at nwl.cc> ---
Hi,

(In reply to marco.drummer from comment #5)
> Thank you for the work.
> 
> I just want to confirm that 
> 
> iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5500:5600 -j DNAT
> --to-destination 10.212.0.1:21500-21600/5500
> 
> works in so far, that is does result in a shifted port redirect, regardless
> of whether the oputput of nft list ruleset is correct in displaying
> "10.212.0.1:21500-21600;5500" or not
> (just for the benefit of anyone finding this via google etc.)
> 
> This is Ubuntu Server 22.04 with iptables 1.0.2-1ubuntu3
> 
> Now the question is, is this considered a bug that would be feasible to be
> backported into the lts kernel and iptables version that ubuntu uses? (Of
> course in the end the ubuntu maintainers may also have to decide this)
> Essentially this is a bug, that breaks the transition from iptables to
> nftables, that will otherwise remain unfixed for over a year in LTS ubuntu.

If enabled at compile-time, nft used libxtables to translate iptables
extensions into native nftables syntax. There were several issues with this:

- Some extensions' xlate callbacks did not return an error code if translation
  was not possible or supported, so nft would print incomplete or incorrect
  translations in that case.

- If translation was unavailable, nft appended  the unsupported extension's
  name to the printed rule following a pound (#) sign. In consequence, a
  typical 'nft list ruleset | nft -f -' (a short-cut of the usual save and
  restore an nftables service would do) could break the ruleset in various
  ways.

Note that both these problems stem from mixed use of iptables-nft and nftables.
This is a bad idea per se, but to avoid problems from doing it by accident a
number of changes were pushed into both iptables and nftables repos:

- Correction of iptables extensions' xlate callbacks (various commits).
- Change of how nft prints unsupported extensions, deliberately preventing a
  later restore of the dump from passing (79195a8cc9e9d ("xt: Rewrite
  unsupported compat expression dumping") and follow-ups)..

Regarding the shifted port ranges you're relying upon, there's still no support
for it in nftables and hence no translation available.

> Just to see if I understood this correctly
> 
> > Not quite.  iptables-nft uses the nft communications infrastructure to
> > communicate with the kernel.  It is still using the xtables kernel modules.
> > Basically, there's an nft kernel module (called `nft_compat`) that receives
> > messages from userspace and then hands them off to the appropriate iptables
> > kernel module.
> 
> This basically means, that right now 90% of my rules use the nft backend and
> that one particular rule actually uses the old xtables backend? (with all
> performance and compatibility drawbacks that entails) but is still printed
> by nft list ruleset?

What performance and compatibility drawbacks are you talking about in
particular?

> > because, like the more recent iptables-translation mentioned above, nft no
> > longer produces erroneous output for a rule it cannot parse.
> 
> But hold on, wouldn't that lead to a situation where I am unable to see the
> actual rule applied in the kernel??
> 
> If nft list rulesets just drops the "base port" part and iptables just
> refuses to print anything since it does not understand nft rules, how would
> I ever see this rule correctly again.

Why would iptables not print anything? Any rule created with iptables-nft will
be listed correctly by iptables-nft(-save).

Cheers, Phil

-- 
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230726/76dbbed2/attachment.html>


More information about the netfilter-buglog mailing list