Question about using "nat" table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Greetings -
I setup iptables to NAT certain UDP traffic from 85.141.210.22:9000 
to another IP (in the example below it is 212.113.111.225:21650). 
This is what I am doing:
 
1. I setup NAT table using iptables-restore program as follows:
[root@ast-mv ~/Work/AsteriskPilot/asterisk/cpp/tests]# /sbin/iptables-save -c -t nat
# Generated by iptables-save v1.3.5 on Mon Aug  7 06:57:27 2006
*nat
:PREROUTING ACCEPT [1502:275921]
:POSTROUTING ACCEPT [406:45653]
:OUTPUT ACCEPT [406:45653]
:pbxpilot_postrouting - [0:0]
:pbxpilot_prerouting - [0:0]
[12:1247] -A PREROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_prerouting
[7:511] -A POSTROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_postrouting
[0:0] -A pbxpilot_postrouting -d 212.113.111.225 -p udp -m udp --dport 21650 -j SNAT --to-source 204.147.182.200:18056
[0:0] -A pbxpilot_postrouting -d 85.141.210.22 -p udp -m udp --dport 9000 -j SNAT --to-source 204.147.182.200:18298
[0:0] -A pbxpilot_prerouting -s 85.141.210.22 -p udp -m udp --sport 9000 -j DNAT --to-destination 212.113.111.225:21650
[0:0] -A pbxpilot_prerouting -s 212.113.111.225 -p udp -m udp --sport 21650 -j DNAT --to-destination 85.141.210.22:9000
COMMIT
Please check out the bytes and packet counters in [] - they are all zeroes
 
2. The UPD traffic from 85.141.210.22:9000 keeps coming in:
# cat /proc/net/ip_conntrack | grep src=85.141.210.22 | grep ^udp
udp      17 179 src=204.147.182.200 dst=85.141.210.22 sport=18298 dport=9000 
packets=22736 bytes=1659728 src=85.141.210.22 dst=204.147.182.200 sport=9000 
dport=18298 packets=22826 bytes=1666298 [ASSURED] mark=0 use=1
# cat /proc/net/ip_conntrack | grep src=85.141.210.22 | grep ^udp
udp      17 179 src=204.147.182.200 dst=85.141.210.22 sport=18298 dport=9000 
packets=22821 bytes=1665933 src=85.141.210.22 dst=204.147.182.200 sport=9000 
dport=18298 packets=22911 bytes=1672503 [ASSURED] mark=0 use=1
 
3. However the counts of NATed packets are unchanged:
[root@ast-mv ~/Work/AsteriskPilot/asterisk/cpp/tests]# /sbin/iptables-save -c -t nat
# Generated by iptables-save v1.3.5 on Mon Aug  7 06:57:48 2006
*nat
:PREROUTING ACCEPT [1502:275921]
:POSTROUTING ACCEPT [406:45653]
:OUTPUT ACCEPT [406:45653]
:pbxpilot_postrouting - [0:0]
:pbxpilot_prerouting - [0:0]
[12:1247] -A PREROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_prerouting
[7:511] -A POSTROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_postrouting
[0:0] -A pbxpilot_postrouting -d 212.113.111.225 -p udp -m udp --dport 21650 -j SNAT --to-source 204.147.182.200:18056
[0:0] -A pbxpilot_postrouting -d 85.141.210.22 -p udp -m udp --dport 9000 -j SNAT --to-source 204.147.182.200:18298
[0:0] -A pbxpilot_prerouting -s 85.141.210.22 -p udp -m udp --sport 9000 -j DNAT --to-destination 212.113.111.225:21650
[0:0] -A pbxpilot_prerouting -s 212.113.111.225 -p udp -m udp --sport 21650 -j DNAT --to-destination 85.141.210.22:9000
COMMIT
 
4) I know that NAT table is consulted only when it sees the first packet opening up a
    connection is conntrack cache, so I used http://www.netfilter.org/projects/libnetfilter_conntrack/index.html
    to write a little utility wiping out connections from conntrack. Here I ran it:
[root@ast-mv ~/Work/AsteriskPilot/asterisk/cpp/tests]# ./delete_conntrack udp 85.141.210.22 9000 204.147.182.200 18298
TEST 6: delete conntrack (0)
The utility succeeds
 
5) Looking into the NAT counters again:
[root@ast-mv ~/Work/AsteriskPilot/asterisk/cpp/tests]# /sbin/iptables-save -c -t nat
# Generated by iptables-save v1.3.5 on Mon Aug  7 06:58:19 2006
*nat
:PREROUTING ACCEPT [1523:278443]
:POSTROUTING ACCEPT [409:45846]
:OUTPUT ACCEPT [409:45846]
:pbxpilot_postrouting - [0:0]
:pbxpilot_prerouting - [0:0]
[13:1320] -A PREROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_prerouting
[8:584] -A POSTROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_postrouting
[1:73] -A pbxpilot_postrouting -d 212.113.111.225 -p udp -m udp --dport 21650 -
j SNAT --to-source 204.147.182.200:18056
[0:0] -A pbxpilot_postrouting -d 85.141.210.22 -p udp -m udp --dport 9000 -j 
SNAT --to-source 204.147.182.200:18298
[1:73] -A pbxpilot_prerouting -s 85.141.210.22 -p udp -m udp --sport 9000 -j 
DNAT --to-destination 212.113.111.225:21650
[0:0] -A pbxpilot_prerouting -s 212.113.111.225 -p udp -m udp --sport 21650 -j 
DNAT --to-destination 85.141.210.22:9000
COMMIT
# Completed on Mon Aug  7 06:58:19 2006
Excellent, iptables NATed 1 packet of 73 bytes!
 
6) The traffic from 85.141.210.22:9000 keeps coming in, but the counters in NAT 
table do not change:
[root@ast-mv ~/Work/AsteriskPilot/asterisk/cpp/tests]# /sbin/iptables-save -c -t nat
# Generated by iptables-save v1.3.5 on Mon Aug  7 06:58:22 2006
*nat
:PREROUTING ACCEPT [1528:279437]
:POSTROUTING ACCEPT [412:46074]
:OUTPUT ACCEPT [412:46074]
:pbxpilot_postrouting - [0:0]
:pbxpilot_prerouting - [0:0]
[13:1320] -A PREROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_prerouting
[8:584] -A POSTROUTING -p udp -m udp --dport 16384:32766 -j pbxpilot_postrouting
[1:73] -A pbxpilot_postrouting -d 212.113.111.225 -p udp -m udp --dport 21650 -j SNAT --to-source 204.147.182.200:18056
[0:0] -A pbxpilot_postrouting -d 85.141.210.22 -p udp -m udp --dport 9000 -j SNAT --to-source 204.147.182.200:18298
[1:73] -A pbxpilot_prerouting -s 85.141.210.22 -p udp -m udp --sport 9000 -j DNAT --to-destination 212.113.111.225:21650
[0:0] -A pbxpilot_prerouting -s 212.113.111.225 -p udp -m udp --sport 21650 -j DNAT --to-destination 85.141.210.22:9000
COMMIT
 
Now if I delete the conntract entry again, NAT table packet counter will increment
again but I need to setup iptables so that *all* packets from 85.141.210.22:9000 
are NATed, not only the first one opening the conntrack entry.
 
Is there a way to do this with iptables? If not then what is the purpose of NAT table? 
What is the right way to use it?
 
Thanks in advance
 
Constantine
 


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux