iptables, portforward, DNAT, SNAT

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

 



I have a decent problem that started spreading out in an unconvinient way - for now it simply takes to much time to get solved;
like most of the time it is an simple problem
here we have it - portforwarding:

I have a small LAN at home with a cable connection. so I get my ip from the ISP thru' dhcp..

and here's a part of my script:

#!/bin/bash

EXTIF=eth0
INTIF=eth1
EXTIP=www.xxx.yyy.zzz
INTIP=192.168.0.1
WWWSRV=192.168.0.2

#here I'll make some 
echo 1 > /proc/sys/net/ipv4/* 
#to some features like ip_dynaddr, ip_forward, tcp_syncookie


#then I set the default policies
#accept everything except the FORWARD chain 
#and flush them
iptables -P INPUT -j ACCEPT
iptables -F INPUT 
iptables -P OUTPUT -j ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD -j DROP
iptables -F FORWARD
iptables -t nat -f        #flush the nat table 

# and here's my little disaster
# i try to forward port 1234 to my internal www-server
iptables -t nat -A PREROUTING -p tcp -i $EXTIF -d $EXTIP --dport 1234 -j DNAT --to-destination $WWWSRV:80 
iptables -A FORWARD -p tcp -i $EXTIF -o $INTIF -d $WWWSRV --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp -o $EXTIF -s $WWWSRV --sport 80 -j SNAT --to-source $EXTIP:1234

# for what i understand from iptables till now is
# packet comes in thru ethernet, arrives in kernel
# so packet looks like this
# ip-layer: source-ip: WWWREQUEST  destination-ip: $EXTIP
# tcp-layer: source-port: a port higher than 1024   destination-port: 1234
# and hits the PREROUTING chain
# with the DNAT rule above it changes following
# ip-layer: source-ip: WWWREQUEST   destination-ip: $WWSRV
# tcp-layer: source-port: a port higher than 1024   destination-port: 80
# then hits FORWARD chain (usually it would hit the INPUT chain,
# but we changed that with DNAT; it has to go out on $INTIF to reach
# its destination..)
# with the FORWARD rule it can bypass..
# when applying DNAT all other packets in that stream are bypassed as well  
# with this two rules it is sure that a request from a www-client from
# the inet is reaching the inner $WWWSRV, and the $WWWSRV can respond but # there is still something wrong with the reply packet:
# ip-layer: source-ip: $WWWSRV destination-ip: WWWREQUEST 
# tcp-layer: source-port: 80   destination-port: 1024:
# when the packet arrives at the WWWREQUEST-host-browser it doesn't know 
# what to do with the packet (there was no request to this host $WWWSRV)
# so here comes rule 3; it changes the source ip and port to this
# ip-layer: source-ip: $EXTIP destination-ip: WWWREQUEST 
# tcp-layer: source-port: 1234   destination-port: 1024:
# now the packet seems like the awaited reply from the request
# he has given to $EXTIP:1234

# and another few rules to complete the firewall script

# allow all connections from inside out and only related
# and established ones in
iptables -A FORWARD -p tcp -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -o $EXTIF -i $INTIF -j ACCEPT

# enable masquerading
iptables -t NAT -A POSTROUTING -o $EXTIF -j MASQUERADE

I hope anyone out there can help me..
I tried serveral permutations with the three portforwarding rules:
I changed some params or even let them away
One Variation was to ACCEPT the full FORWARD chain
I hope there aren't any spelling mistakes, cause I wrote this script
just for email purposeŽ; on my router is the original..
I've also read dozens of mailing-list entry like this and everyone seemed pausible but till now it didn't work - I've tried two days now and I'm kind of frustrated
oh yeah, modules loaded by the kernel:
ip_tables
iptable_nat
ip_conntrack 
ip_conntrack_ftp
ip_conntrack_irc
ip_nat_ftp
iptable_filter
ipt_state
ipt_LOG
ipt_MASQUERADE

it must be a kind of silly, tiny failure
one I haven't looked for yet..

thanks for any little hint!

methodaut

__________________________________________________________________
The NEW Netscape 7.0 browser is now available. Upgrade now! http://channels.netscape.com/ns/browsers/download.jsp 

Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/



[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