All of lore.kernel.org
 help / color / mirror / Atom feed
* Symmetric NAT for udp
@ 2005-11-17 11:51 Dmitry
  0 siblings, 0 replies; 4+ messages in thread
From: Dmitry @ 2005-11-17 11:51 UTC (permalink / raw)
  To: netfilter-devel

Hi all - i have a trouble with making netfilter nat act like symmetric 
for udp . Normally for udp  it acts like port restricted cone nat ( the 
main feature is that it doesnt mangle src port if several udp packets 
come from same src ip/port - to different dest. In case of tcp it acts 
like symmetric nat - ie each syn packet even from same src ip/port cause 
src port  mangling. What i need is to make it act like symmetric for udp 
too. So i just looked throught udp/tcp specific files 
(conntrack_proto_udp, nat_proto_udp and relative tcp ) and didnt find 
anything that makes it work different for tcp and udp. Tests revealed 
that at first time (and after timeout) each udp packets  (even from same 
src port/ip but to diff dest ) cause  new conntrack creation. But when 
it checkes before postrouting is tuple taken  - for same src/port 
somehow it says that no - so mangling doesnt occur. Can somebody give me 
a hint where to dig?


-- 

dev789@gmail.com  

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Symmetric NAT for udp
@ 2005-11-17 12:00 Dmitry
  2005-11-17 12:34 ` KOVACS Krisztian
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry @ 2005-11-17 12:00 UTC (permalink / raw)
  To: netfilter-devel

Hi all - i have a trouble with making netfilter nat act like symmetric 
for udp . Normally for udp  it acts like port restricted cone nat ( the 
main feature is that it doesnt mangle src port if several udp packets 
come from same src ip/port - to different dest. In case of tcp it acts 
like symmetric nat - ie each syn packet even from same src ip/port cause 
src port  mangling. What i need is to make it act like symmetric for udp 
too. So i just looked throught udp/tcp specific files 
(conntrack_proto_udp, nat_proto_udp and relative tcp ) and didnt find 
anything that makes it work different for tcp and udp. Tests revealed 
that at first time (and after timeout) each udp packets  (even from same 
src port/ip but to diff dest ) cause  new conntrack creation. But when 
it checkes before postrouting is tuple taken  - for same src/port 
somehow it says that no - so mangling doesnt occur. Can somebody give me 
a hint where to dig?

-- 

Sincerely,
Dmitry Gritsenko
DG@IPCB.net 

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Symmetric NAT for udp
@ 2005-11-17 15:37 Dmitry
  0 siblings, 0 replies; 4+ messages in thread
From: Dmitry @ 2005-11-17 15:37 UTC (permalink / raw)
  To: netfilter-devel, hidden


kernel 2.4.31

here is the example -

there are 2 subnets - 192.168.100.* and 192.168.101.*

there are 3 hosts  - host A - has ips - 192.168.100.56,192.168.100.92
host B - 192.168.100.59, 192.168.101,59 - (NAT box)
host C - 192.168.101.146/147

host B - has ruleset for masquerading of host A

by nmap i send 3 packets from host A to C via B

nmap -P0 -sU 192.168.101.146 -p 1232 --max_rtt_timeout 6 -g 10000 -S 
192.168.100.56                                                                           

nmap -P0 -sU 192.168.101.147 -p 1231 --max_rtt_timeout 6 -g 10000 -S 
192.168.100.56                                                                           

nmap -P0 -sU 192.168.101.146 -p 1232 --max_rtt_timeout 6 -g 10000 -S 
192.168.100.92                                                                           



on host B on different interfeaces i see this picture


BEFORE NAT

[root@nist root]# tcpdump -n -i eth0  dst port 1232 or dst port 1231
tcpdump: listening on eth0                                         
                                                                   
18:11:12.951342 192.168.100.56.10000 > 192.168.101.146.1232: udp 0 
18:11:13.460999 192.168.100.56.10000 > 192.168.101.147.1231: udp 0 
18:11:13.970699 192.168.100.92.10000 > 192.168.101.146.1232: udp 0 


AFTER NAT

[root@nist NIST_TEST]# tcpdump -n -i eth1 dst port 1231 or dst port 1232
tcpdump: listening on eth1                                              
18:11:12.951461 192.168.101.59.10000 > 192.168.101.146.1232: udp 0      
18:11:13.461121 192.168.101.59.10000 > 192.168.101.147.1231: udp 0      
18:11:13.970777 192.168.101.59.1025 > 192.168.101.146.1232: udp 0       
                                                                        
source port was changed to 1025 only for packet - which src differed 
from first one.

ie in case for udp - it allows to bind on same PUBLIC src port 
connections with different hosts if src the same - this is so called 
"cone nat"


actually i mistaken  about tcp connection - they didnt show symmetric 
nat - but anyway they show different behaviour

instead UDP packets i sent tcp SYN

BEFORE NAT
18:29:26.276521 192.168.100.56.10000 > 192.168.101.146.1232: S 
3995259052:399525
9052(0) win 
4096                                                               
18:29:26.284750 192.168.100.56.10000 > 192.168.101.147.1231: S 
3044654256:304465
4256(0) win 
4096                                                               
18:29:26.292757 192.168.100.92.10000 > 192.168.101.146.1232: S 
705399252:7053992
52(0) win 
4096                                                                 

AFTER NAT

18:29:26.276582 192.168.101.59.10000 > 192.168.101.146.1232: S 
3995259052:399525
9052(0) win 
4096                                                               
18:29:26.284824 192.168.101.59.10000 > 192.168.101.147.1231: S 
3044654256:304465
4256(0) win 
4096                                                               
18:29:26.292811 192.168.101.59.10000 > 192.168.101.146.1232: S 
705399252:7053992
52(0) win 
4096                                                                 



in all cases src port  was preserved

///////////////////////////////////////////////////////////
Its not an issue but i need to test simmetric nat

so what i need from udp is to get this picture after nat


18:11:12.951461 192.168.101.59.10000 > 192.168.101.146.1232: udp 0      
18:11:13.461121 192.168.101.59.1025 > 192.168.101.147.1231: udp 0      
18:11:13.970777 192.168.101.59.1026 > 192.168.101.146.1232: udp 0  

////////////////////////////////////////////////////////

Actually - the question is - does somebody tried to make something 
similar or
 just have an idea on making it.
 Currently im stuck on __ip_conntrack_find function .
 Just cant understand why for second udp packet it says that tuple isnt 
taken - although its must be taken by first packet

       

-- 

Sincerely,
Dmitry Gritsenko
DG@IPCB.net 

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

end of thread, other threads:[~2005-11-17 15:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-17 11:51 Symmetric NAT for udp Dmitry
  -- strict thread matches above, loose matches on Subject: below --
2005-11-17 12:00 Dmitry
2005-11-17 12:34 ` KOVACS Krisztian
2005-11-17 15:37 Dmitry

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.