Linux Netfilter discussions
 help / color / mirror / Atom feed
* Routing and DNAT redux
@ 2005-06-09  0:54 Jeff Simmons
  2005-06-09 16:22 ` Matin Tamizi
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Simmons @ 2005-06-09  0:54 UTC (permalink / raw)
  To: netfilter

OK, a little more specific.

I have an iptables firewall with a server behind it. The server has a 
non-routable address (192.168) so the firewall's IP address:port is DNAT'd  
to the server's address:port.

Incoming packets to the server first encounter the firewall's external 
interface (EXT_IF), where the prerouting DNAT rule rewrites the IP layer 
destination address (EXT_ADDR) to the server's address (SERV_ADDR). The 
packet is then passed on to the routing function, which determines that the 
packet needs forwarding via the internal interface (INT_IF). The packet is 
then passed through any appropriate iptables forwarding chains, then to the 
post-routing function of iptables (which in this case does nothing), and 
finally out INT_IF to destination SERV_ADDR.

There's a nice diagram of this at:

 http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH03.web.html

down in section 3.3.2.

Now, to the reply from the server. When the packet leaves the server, its IP 
layer will show source SERV_ADDR destination REMOTE_ADDR. But when the packet 
arrives at the remote, it will show source EXT_ADDR destination REMOTE_ADDR. 
It gets rewritten somewhere.

My understanding is the rewriting is done by the state engine, which basically 
maintains a rule that any outbound packet SERV_ADDR:port -> REMOTE_ADDR:port 
gets changed to EXT_ADDR:port -> REMOTE_ADDR:port. But where in the chain 
does this happen?

Scenario one: it happens on INT_IF prerouting. If this is the case, then I can 
use source routing with iproute2.

Scenario two: it happens on EXT_IF postrouting. Then iproute2 can't do the 
kind of source routing I need to do, and I'll have to find another solution.

(Note that with standard destination routing, it doesn't matter where the 
packet gets rewritten. But with source routing it matters greatly.)

The reality is, the box I'm working on has 4 T1s coming in, a DMZ with 
routable IP addresses, and two LANS with non-routable addresses where both 
contain servers that need to be contacted by the outside world via DNAT. It's 
a big, messy, ugly project, but I need to know if I can use iproute2 to be 
sure that return packets from all the servers go out the T1 they came in on.

Any help, pointers, or FMs that I can RTFM would be GREATLY appreciated.

-- 
Jeff Simmons                                   jsimmons@goblin.punk.net
     Simmons Consulting - Network Engineering, Administration, Security

"You guys, I don't hear any noise. Are you sure you're doing it right?"
	-- My Life With The Thrill Kill Kult


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-06-10 18:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-09  0:54 Routing and DNAT redux Jeff Simmons
2005-06-09 16:22 ` Matin Tamizi
2005-06-09 17:00   ` Jeff Simmons
2005-06-10 17:55     ` Jason Opperisano
2005-06-10 18:05       ` Jeff Simmons

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox