From: Michael Schwartzkopff <ms@sys4.de>
To: Pascal Hambourg <pascal@plouf.fr.eu.org>, netfilter@vger.kernel.org
Subject: Re: Source NAT in POSTROUTING chain for locally generated packets
Date: Sun, 31 Aug 2014 17:42:58 +0200 [thread overview]
Message-ID: <25646646.sHMRAX5bUJ@nb003> (raw)
In-Reply-To: <54034037.8020304@plouf.fr.eu.org>
[-- Attachment #1: Type: text/plain, Size: 3836 bytes --]
Am Sonntag, 31. August 2014, 17:33:11 schrieben Sie:
> Michael Schwartzkopff a écrit :
> > Am Freitag, 29. August 2014, 00:08:38 schrieb Pascal Hambourg:
> >> Michael Schwartzkopff a écrit :
> >>> For some special reasons I want to alter the IP address of outgoing
> >>> packets
> >>> that are generated locally to a secondary IP address on my machine. For
> >>> a
> >>> test I use the udp/echo service. Without any rules a tcpdump looks like
> >>> this:
> >>>
> >>> 192.168.56.101 is the primary address of the echo server and
> >>> 192.168.56.16
> >>> is the secondary address of the interface.
> >>>
> >>> 08:24:04.063987 IP 192.168.56.1.48462 > 192.168.56.16.echo: UDP, length
> >>> 6
> >>> 08:24:04.064522 IP 192.168.56.101.echo > 192.168.56.1.48462: UDP, length
> >>> 6
> >>>
> >>> So I add the iptables rule:
> >>>
> >>> iptables -t nat -I POSTROUTING -p udp -s 192.168.56.101 --sport 7 \
> >>>
> >>> -j SNAT --to-source 192.168.56.16
> >>>
> >>> now tcpdump shows that no answer packet is sent out any more:
> >>>
> >>> 08:24:16.851095 IP 192.168.56.1.55362 > 192.168.56.16.echo: UDP, length
> >>> 6
> >>>
> >>> With iptables -t nat -L POSTROUTING I can see that the rule is hit since
> >>> the counter increases. Also a iptables TRACE shows me that the rule is
> >>> hit. No filter appears in the TRACE log.
> >>>
> >>> Any ideas where the packet vanished?
> >>
> >> Clash with an existing connection entry (the one created by the incoming
> >> packet) -> source port changed or packet dropped.
> >
> > SNAT indeed alters the source port that is why the client does not
> > recognizes the packet now. But I did not find any way not to alter the
> > source port.
> The situation is unclear. In your previous reply, you wrote :
> > Since I so not filter on existing state, the packet should not be dropped
> > anyway.
>
> The NAT table can drop the packet by itself when the clash with an
> existing connection cannot be avoided (usually by changing the source
> port automatically). Here, the existing connection is the one created by
> the incoming packet. However, the SNAT rule does not force the source
> port, this should not happen.
>
> >> What was the full tcpdump command used ?
> >
> > Yes. tcpdump should have captured the package.
> >
> >> Any filters ?
> >
> > No filters at all.
>
> If you did not set any filters in tcpdump, it should indeed have
> captured the outgoing packet. What have you changed ?
>
> What is your real goal ?
> My guess is that you want to SNAT the outgoing packet so that it looks
> like the expected reply for the client. IMO this is the wrong way of
> doing things. Instead you should consider using DNAT (or maybe REDIRECT)
> on the original request packet to redirect it to the primary address of
> the server, 192.168.56.101, so that the reply packet from that same
> address is considered as part of the same connection and is
> automatically de-NATed with the original address.
Yeah. DNAT works. Thanks.
> A better fix would be that the server sends the reply from the same
> address as the one it received the request on. If the echo service is
> part of inetd, that can be done in inetd.conf by specifying the local
> address to use.
>
> 192.168.56.16:echo dgram udp wait root internal
echo only was an example. The real service does not offer that possibilility
to bind to a single IP address. That also was max first idea.
Mit freundlichen Grüßen,
Michael Schwartzkopff
--
[*] sys4 AG
http://sys4.de, +49 (89) 30 90 46 64, +49 (162) 165 0044
Franziskanerstraße 15, 81669 München
Sitz der Gesellschaft: München, Amtsgericht München: HRB 199263
Vorstand: Patrick Ben Koetter, Marc Schiffbauer
Aufsichtsratsvorsitzender: Florian Kirstein
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 230 bytes --]
prev parent reply other threads:[~2014-08-31 15:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 6:38 Source NAT in POSTROUTING chain for locally generated packets Michael Schwartzkopff
2014-08-28 22:08 ` Pascal Hambourg
2014-08-31 12:05 ` Michael Schwartzkopff
2014-08-31 14:19 ` Michael Schwartzkopff
2014-08-31 15:33 ` Pascal Hambourg
2014-08-31 15:42 ` Michael Schwartzkopff [this message]
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=25646646.sHMRAX5bUJ@nb003 \
--to=ms@sys4.de \
--cc=netfilter@vger.kernel.org \
--cc=pascal@plouf.fr.eu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).