Re: nat problem
Steve Clark <[email protected]> Wed, 26 Aug 2009 11:52:56 -0400
| Newsgroups | gmane.comp.security.firewalls.ipfilter |
|---|---|
| Message-ID | <13897_1251302009_4A955A78_13897_8302_1_4A955A58.9090302@netwolves.com> |
Jim Klimov wrote: > > What I need is to be able to specify instead of "any" only routable > > address ranges. Maybe something like: > > map eth1 from 10.254.1.0/24 to range 0.0.0.1 - 9.255.255.255 -> > > 10.0.133.102/32 > > Hi, Steve, > > You can use subnet notation, i.e. we have rules like these > on Solaris 8 x86, IPF 4.1.28: > > 1) Don't NAT to a different address (pass packets as is) when > routing to a specific destination subnet (segments of LAN): > map elxl1 from 192.168.129.0/24 to 149.49.64.0/24 -> 0.0.0.0/0 > map elxl1 from 192.168.119.0/24 to 192.168.130.0/23 -> 0.0.0.0/0 > > 2) Do NAT certain SRCs going to certain DSTs (remote partner's > office over VPN, they don't know of our 192.168.* addresses): > map elxl1 from 192.168.117.0/24 to 10.1.0.0/16 -> 195.66.181.161/32 > > 3) Do NAT certain SRCs going to "anywhere except certain DSTs": > map elxl1 from 192.168.129.128/27 ! to 192.168.42.0/24 -> 195.66.181.113/32 The above would work if I could specify multiple "! to destinations". In the specific case we have multiple non routables on the other side of the gre/vpn, like 10.0.0.0 and 172.16.0.0 so I don't want anything coming from the private network on this side that is destined to an address on the other side of the gre/vpn to be natted. With linux I can: create a new chain, iptables -t nat -N mychain add rules that either accept or masquerade depending on destination address, iptables -t nat -A mychain -d 10.0.0.0/24 -o eth1 -j ACCEPT iptables -t nat -A mychain -d 192.168.0.0/16 -o eth1 -j ACCEPT iptables -t nat -A mychain -d 172.16.0.0/20 -o eth1 -j ACCEPT iptables -t nat -A mychain -o eth1 -j MASQUERADE send all packets to mychain to decide whether to nat or not. iptables -t nat -A POSTROUTING -o eth1 -j mychain which creates a new chain that all potential packets that are passed to - if it the destination is a private address it is passed to the ACCEPT target so nothing further happens if not it hits the MASQUERADE target and is natted. Hmm... after thinking about it I might not even have to create a new chain, probably could do it in the POSTROUTING chain of the nat table. Thanks, Steve > > Hope these live examples help... > > Steve Clark пишет: >> Hi Darren, >> >> I am running into a problem with ipnat on linux when using gre over >> ipsec. I have gre tunnels >> which use non routable address endpoints which are tunneled over ipsec >> to run ospf. >> >> my normal ipnat config looks like this on FreeBSD which works but >> doesn't on linux: >> map eth1 from 10.254.1.0/24 to any port=21 -> 10.0.133.102/32 proxy port >> 21 ftp/tcp >> map eth1 from 10.254.1.0/24 to any -> 10.0.133.102/32 portmap tcp/udp >> 40000:60000 >> map eth1 from 10.254.1.0/24 to any -> 10.0.133.102/32 >> >> The problem is in linux the esp encapulation happens last so anything >> going across the gre's is being natted. >> >> What I need is to be able to specify instead of "any" only routable >> address ranges. Maybe something like: >> map eth1 from 10.254.1.0/24 to range 0.0.0.1 - 9.255.255.255 -> >> 10.0.133.102/32 >> >> Or am I missing something and there is already a way to do this? >> >> BTW if i remove the map eth1 from 10.254.1.0/24 to any -> 10.0.133.102/32 >> then my gre's work but I can't ping the internet cause the icmp is not >> mapped. >> >> Thanks for any advice, >> Steve > >