From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Westphal <fw@strlen.de>
Cc: Jeremy Sowden <jeremy@azazel.net>,
Netfilter Devel <netfilter-devel@vger.kernel.org>
Subject: Re: [PATCH nftables 8/8] test: py: add tests for shifted nat port-ranges
Date: Tue, 11 Apr 2023 13:43:54 +0200 [thread overview]
Message-ID: <ZDVH+puTElQrkblc@calendula> (raw)
In-Reply-To: <20230411112001.GD21051@breakpoint.cc>
On Tue, Apr 11, 2023 at 01:20:01PM +0200, Florian Westphal wrote:
> Pablo Neira Ayuso <pablo@netfilter.org> wrote:
> > > Sorry, I don't see the usecase for different deltas.
> >
> > Then, users will more than one single rule for different port-shift
> > mappings?
>
> Hmm, why? Can't the variable offset be stored in the map itself
> (instead of the new dport value)?
>
> so assuming a map that has
>
> typeof ip saddr . ip daddr : ip daddr . tcp dport
I am not sure we can use . tcp dport here, we might need a specific
datatype for offset.
> ... but the map content stores the delta to use, e.g.
>
> { 192.168.7.1 . 10.2.2.2 : 10.2.2.1 . 10000 }
>
> ... where 10000 isn't the new dport but a delta that has to be added.
>
> [ payload load 4b @ network header + 12 => reg 1 ] # saddr
> [ payload load 4b @ network header + 16 => reg 9 ] # daddr
> [ lookup reg 1 set m dreg 1 0x0 ] # now we have reg1: dnat addr, reg 9: delta to add
> [ payload load 2b @ transport header + 2 => reg 10 ]
> [ math add reg 9 + reg 10 => reg 9 ] # real port value from packet added with delta
> [ nat dnat ip addr_min reg 1 addr_max reg 1 proto_min reg 9 proto_max reg 9 flags 0x3 ]
It is very similar to my proposal, but using an explicit: payload +
math.
How are you going to express this in syntax? Maybe this:
{ 192.168.7.1 . 10.2.2.2 : 10.2.2.1 . +10000 }
or
{ 192.168.7.1 . 10.2.2.2 : 10.2.2.1 . -10000 }
so + or - tells this is an offset. Parser will need this notation, so
the evaluation step infers the map datatype from the element.
For explicit maps, we need the datatype to interpret that this is an
offset accordingly.
> add operation should probably also take a modulus (fixed immediate value)
> so we can make a defined result for things like:
>
> 65532 + 10000
>
> ... without a need to wrap implicitly back to "0 + remainder".
not sure I follow this modulus idea.
> > In my proposal, kernel would take the delta from register, the flag
> > tells the nat core how to interpret this.
>
> Yep, understood. This is mapping the existing iptables approach,
> but using register instead of immediate to pass data.
>
> > > So we need an 'add' operation in kernel to compute
> >
> > This is an 'add' operation built-in into the NAT engine.
> >
> > How would a generic 'add' operation in the kernel will work with
> > concatenations?
>
> Its not needed for concatentation case, the port value (in packet)
> is always a fixed value, so it can be (re)loaded at runtime.
>
> But maybe i'm missing something that the nat engone is already offering
> that this approach can't handle, or some other limitation.
Your proposal is not a deal breaker to me, I think it will be more
work to explore than my proposal, but this delta datatype might be
useful in the future for generic delta add/sub in other payload / meta
fields.
next prev parent reply other threads:[~2023-04-11 11:45 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-05 10:14 [PATCH nftables 0/8] Support for shifted port-ranges in NAT Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 1/8] nat: add support for shifted port-ranges Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 2/8] masq: " Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 3/8] redir: " Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 4/8] json: formatting fixes Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 5/8] json: add support for shifted nat port-ranges Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 6/8] doc: correct NAT statement description Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 7/8] doc: add shifted port-ranges to nat statements Jeremy Sowden
2023-03-05 10:14 ` [PATCH nftables 8/8] test: py: add tests for shifted nat port-ranges Jeremy Sowden
2023-03-24 22:59 ` Florian Westphal
2023-03-25 10:35 ` Phil Sutter
2023-03-25 11:10 ` Jeremy Sowden
2023-03-26 20:41 ` Pablo Neira Ayuso
2023-03-26 20:39 ` Pablo Neira Ayuso
2023-03-27 11:08 ` Jeremy Sowden
2023-04-11 12:21 ` Jeremy Sowden
2023-04-12 11:06 ` Pablo Neira Ayuso
2023-04-25 19:51 ` Jeremy Sowden
2023-05-03 20:54 ` Pablo Neira Ayuso
2023-05-08 17:58 ` Jeremy Sowden
2023-05-08 19:47 ` Pablo Neira Ayuso
2023-04-11 8:28 ` Pablo Neira Ayuso
2023-04-11 10:25 ` Florian Westphal
2023-04-11 10:53 ` Pablo Neira Ayuso
2023-04-11 11:20 ` Florian Westphal
2023-04-11 11:43 ` Pablo Neira Ayuso [this message]
2023-04-11 12:28 ` Florian Westphal
2023-04-11 12:36 ` Florian Westphal
2023-04-12 11:22 ` Pablo Neira Ayuso
2023-04-12 11:43 ` Florian Westphal
2023-04-12 12:54 ` Pablo Neira Ayuso
2023-03-24 14:18 ` [PATCH nftables 0/8] Support for shifted port-ranges in NAT Florian Westphal
2023-03-24 16:07 ` Jeremy Sowden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZDVH+puTElQrkblc@calendula \
--to=pablo@netfilter.org \
--cc=fw@strlen.de \
--cc=jeremy@azazel.net \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.