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 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.