Portál AbcLinuxu, 2. května 2025 07:20

Where the de-SNAT actually takes place?

22.8.2006 09:45 | Přečteno: 1288×

Následující citace z USENET skupiny gmane.comp.security.firewalls.netfilter.general vysvětluje, proč ne všechny [de-]{S,D}NATované pakety procházejí {PRE,POST}ROUTING řetězcem.

longraider a écrit :
>
> linux-2.6.14.2 with imq patch
> eth0 - iface where two inet connections are attached
> eth1 - server
> eth2 - LAN
> There is SNAT involved on one net connection. The other conn is for
> servers, and there is proxy-arp active (at eth0 and eth1).
>
> I type:
> iptables -t nat -A PREROUTING -i eth0 -j LOG
> And after that, dmesg shows something like that:
> 17:08:53 IN=eth0 OUT= SRC=some_remote_IP DST=IP_of_the_linux_box
>
> Shouldn't be there DST=10.0.0.5 for example (ie. de-SNATed)?

This packet probably does not belong to a SNAT-ed or MASQ-ed connection.
Actually, with this rule you won't see the return packets belonging to your
SNAT-ed connection. In short, the 'nat' table chains only see the first packet 
of a "connection", and only if it has the state NEW (not RELATED). All the 
subsequent valid packets belonging or related to that connection (state NEW, 
ESTABLISHED, or RELATED) don't go through theses chains. The action taken by 
these packets is automatically determined by the NAT operation applied to the 
first packet and the direction of the packet.

For instance, with this rule :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4

The first 'direct' packet of an outgoing connection on eth0 goes through the nat
POSTROUTING chains and matches this rule, so the SNAT operation is applied.
Instead of going through the POSTROUTING chain, the subsequent direct packets 
(in the same direction) of the connection will automatically be applied the
same SNAT operation. The return packets (in the opposite direction) of the 
connection will automatically be applied the de-SNAT operation instead of going 
through the nat PREROUTING chain. By the way, the subsequent packets of the 
connection don't need to go in or out eth0 (funny, huh ?) to be properly NATed.

> And all that I want to do is ingress queuing using IMQ. I want to fwmark
> packets according to their de-SNATed destination adress (and some other
> things also), and then put them into the IMQ ingress queue.
> I could use the packet matching available in the ingress queue itself
> (by ip tool), but I don't know if the packets that go into IMQ are
> de-SNATed or not.
>
> So, where the de-SNAT actually takes place?

De-SNAT takes place in the NF_IP_PRE_ROUTING Netfilter hook at the same place as
the nat PREROUTING chain, after the mangle PREROUTING chain and before the 
input routing decision.

For DNAT which occured in the PREROUTING chain, de-DNAT takes place in the 
NF_IP_POST_ROUTING Netfilter hook, at the same place as the nat POSTROUTING 
chain, after the mangle POSTROUTING chain.

For DNAT which occured in the OUTPUT chain, I observed that de-DNAT takes place 
in the NF_IP_LOCAL_IN Netfilter hook, after the mangle and filter INPUT chains.


> BTW is this diagram correct?
> http://www.docum.org/docum.org/kptd/

I think so, at least for the pure Netfilter part which matches my own diagram
http://www.plouf.fr.eu.org/bazar/netfilter/schema_netfilter.txt. I don't know
 about the IMQ and QoS parts.

> I think not, since traversing the magle PREROUTING can't occur
> simulatenously with de-MASQ.

Incoming packets traverse the mangle PREROUTING chain just before being 
de-MASQ-ed if needed.

> And is this de-MASQUERADE a de-SNAT also?

Yes. Actually MASQUERADE and SNAT are similar, the only difference being in the 
choice of the new source address.

De-MASQ and de-SNAT both are destination address rewrite operations, so it is 
consistent that they take place in the same place as the nat PREROUTING chain 
which performs DNAT. But keep in mind that they take place *instead* of 
trversing the nat PREROUTING chain, so you will never see packets being 
de-MASQ-ed or de-SNAT-ed in any nat chain.
       

Hodnocení: 56 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

22.8.2006 13:52 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: Where the de-SNAT actually takes place?
Odpovědět | Sbalit | Link | Blokovat | Admin
tohle je presne to co sem potreboval vedet

resil jsem nekolik dni padani cdma. problem byl v tom ze i pres pravidlo -A POSTROUTING -o ppp0 -j MASQUERADE dochazelo k tomu ze se na ppp0 objevovaly sem tam pakety s neprelozenou adresou a modem zavesil.

zjistil sem ze je to tim ze pakety ve stavu INVALID pres retezec POSTROUTING vubec neprochazi a je tudiz nutne je filtrovat na FORWARDu.
22.8.2006 15:15 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Where the de-SNAT actually takes place?
Ja vim, taky mi trvalo, nez jsem na to prisel :-[

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.