dinamikus IP-vel DNAT

Fórumok

Hali!

A következő problémába futottam:

Van egy host (konkrétan egy WRT54GL router OpenWRT-vel), ami ADSL-vel csatlakozik a netre, dinamikus IP-t kap.
Szeretném a 21-es portra bejövő kapcsolatokat DNAT-olni egy helyi hálón lévő gépre.

A routeren fut egy dyndns kliens, legyen mondjuk a host mindig elérhető a myhost.dynip.com címen.

A szabályok a következők

...
WAN=ppp0
...
iptables -A FORWARD -j forwarding_rule
iptables -A FORWARD -i $WAN -j forwarding_wan
...
iptables -t nat -A PREROUTING -j prerouting_rule
iptables -t nat -A PREROUTING -i $WAN -j prerouting_wan
...
iptables -t nat -A prerouting_wan -p tcp --dport 2222 -j DNAT --to :22
iptables -A forwarding_wan -p tcp --dport 22 -j ACCEPT
...

Ez szép és jó, egy külső hosztról be is tudok ftp-zni, de most jön a bibi:
ha a belső hálóról szeretném ftp-vel a myhost.dynip.com -t elérni, akkor nem fog működni, hiszen nem a WAN interfészen fog megjelenni a kapcsolat. Ha viszont szimplán a prerouting_rule-ban akarnék DNAT-olni, akkor viszont _minden_ ftp-kapcsolat dnatolva lesz, még akkor is, ha az a belső hálózatról származik, és nem a routerre menne, hanem mondjuk az ftp.fsn.hu-ra.
IP címre nem tudok matcholni, hiszen dinamikus.
Mi a megoldás? Fog egyáltalán menni az aktív/passzív ftp DNAT-on keresztül?

Hozzászólások

? saját (caching) DNS szerver (pl. MaraDNS) ?
a név pedig a belső hálós IP címre mutat...

Lehet, hogy csak én nem értem a válaszod, de a problémám abból fakad, hogy kellene egy DNAT targetű iptables szabályt írnom, ami a ppp0 interface 21-es portjára érkező kapcsolatokat (destination) NAT-olja egy belső hálón lévő IP-re.
Amit nem tudok az az, hogy mire matcholjak, ugyanis ugyanez az interface MASQUERADE-ol is, és ha tényleg minden 21-es portra irányuló csomagot DNATolok, akkor nem tudom használni az FTP-t belső hálóról kifelé.

Valami olyasmire lenne szükségem, hogy az INPUT chain-ben DNAToljak.

Biztos úgy is megoldható, ahogy te mondod (iptables), de minek?
Ha csak annyit teszel, hogy az /etc/hosts fájlba beírod a


192.168.1.2 myhost.dynip.com

sort, akkor az adott gép elérhető lesz belülről, a megadott néven. Tehát nem kell routing varázslat ahhoz, hogy bentről is a kívánt néven elérd a gépet :)

nalam is dinamikus az ip, a cronba benne van, orankent lefut es annyi.

A teljesseg kedveert az egesz script:

#!/bin/bash

iptables -F
iptables -F -t nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "1">/proc/sys/net/ipv4/ip_forward
IP=`/sbin/ifconfig eth0 |grep "inet addr"|awk '{print $2}'|cut -d ":" -f 2`

iptables -t nat -A PREROUTING -i eth0 -p tcp -d $IP --dport 32806 -j DNAT --to 192.168.1.136:22
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $IP --dport 80 -j DNAT --to 192.168.1.136:80
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $IP --dport 21 -j DNAT --to 192.168.1.136:21

kis magyarazat:

xoomi ~ # /sbin/ifconfig eth0 |grep "inet addr"|awk '{print $2}'|cut -d ":" -f 2
84.3.209.83

;)