Linux Netfilter discussions
 help / color / mirror / Atom feed
From: Tish Best <tish.best@wichita.edu>
To: netfilter@lists.netfilter.org
Subject: Expanation needed for Connection Tracking with NAT One-Way
Date: Tue, 08 Jun 2004 22:01:33 -0500	[thread overview]
Message-ID: <40C3B3E9@webmail.wichita.edu> (raw)

I am trying to test some research ideas and am not able to perform NAT 
translation on incoming packets only.  I am trying to explain why, and am 
looking for a confirmation (or correction) of what I think is happening.  I 
have two Routers (B and C) in my network.  I am trying to send packets 
directly from A to D through B, but route the replies through C and B using 
NAT translation.

                  D
                 /  \
                /    \
         A --- B ---- C

The gateway route of Host D is to Router C.  Router C has the following 
iptables entries in the NAT PREROUTING and NAT POSTROUTING table.

iptables -t nat -A PREROUTING -s D -d A -j DNAT --to B
iptables -t nat -A POSTROUTING -s D -d B -j SNAT --to C

Router B has the following entries in its iptables NAT PREROUTING and 
POSTROUTING tables.

iptables -t nat -A PREROUTING -s C -d B -j LOG
iptables -t nat -A PREROUTING -s C -d B -j DNAT --to A
iptables -t nat -A POSTROUTING -s C -d A -j LOG
iptables -t nat -A POSTROUTING -s C -d A -j SNAT --to D

I am able to see the first TCP SYN packet travel from A through B to D.  At 
this point Router B has an ip_conntrack entry from A to D.  I then see the 
reply travel from D to C.  C successfully performs NAT translation, and the 
packet is sent to Router B with a source of C and a destination of B.  I added 
logging to the iptables entries in Router B, and I see the packet get 
translated in both the PREROUTING and the POSTROUTING tables, but the packet 
is never sent.  I never see a new conntrack entry for this packet.

I think that Router B is dropping the packet through connection tracking since 
it cannot add a new conntrack entry for this packet because it already has an 
entry for packets from A to D that do not require NAT translation.  If it 
added a new entry, then it would not know whether to translate the next packet 
from A to D or send it directly to D.

Is this analysis correct?  Is there anyway to send packets directly to D and 
router them back to A through C and B using NAT translation the way I have 
described using iptables or otherwise?  Any explanation on what criteria 
connection tracking uses to drop packets in this case would be a great help.

Thanks,
Tish Best



             reply	other threads:[~2004-06-09  3:01 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-09  3:01 Tish Best [this message]
2004-06-10 13:32 ` Expanation needed for Connection Tracking with NAT One-Way Aleksandar Milivojevic

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=40C3B3E9@webmail.wichita.edu \
    --to=tish.best@wichita.edu \
    --cc=netfilter@lists.netfilter.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