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?
- 1020 megtekintés
Hozzászólások
? saját (caching) DNS szerver (pl. MaraDNS) ?
a név pedig a belső hálós IP címre mutat...
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 :)
- A hozzászóláshoz be kell jelentkezni
ez szép lenne, csak ezzel meg az a baj, hogy különböző portok különböző belső gépekre vannak forwardolva
- A hozzászóláshoz be kell jelentkezni
ilyesmire gondolsz? :
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
- A hozzászóláshoz be kell jelentkezni
igen, csak mivel az IP változik (hála a szolgáltatónak), ennek a rulenak folyamatosan változnia kellene, és azt remélem talán van ennél egyszerűbb és jobb megoldás
- A hozzászóláshoz be kell jelentkezni
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
;)
- A hozzászóláshoz be kell jelentkezni