Sziasztok!
Tulajdonképpen csak segítséget szeretnék kérni megérteni az iptables működését.
Adott két gép a neten (statikus ip-vel, semmi belső háló vagy több hálókártya), és azt szerettem volna elérni, hogy
mondjuk az egyes számú gép 80-as portra beérkező összes forgalom irányítódjon át a 2-es számú gép 80-as portjára.
Rengeteg leírást találtam, magam lámaságával azt hittem, hogy meg is értettem az egészet, örültem is neki, hogy nem nehéz, stb. Az alábbi utasítást próbáltam alkalmazni:
iptables -t nat -A PREROUTING -p tcp -d egyes_gep_ip --dport 80 -j DNAT --to-destination kettes_gep_ip:80
Én a magam részéről azt gondoltam, hogy a tűzfal a fenti szabálynak megfelelő csomagokat elfogja, és máris továbbítja a megadott ip-re, majd az onnan visszaérkező választ küldi vissza a kliensnek. Azt hittem, hogy ez a láthatatlan proxyzás.
Sajnos így nem akart működni. Próbáltam elkapni a forgalmat a tshark nevű programmal, amelynek kimenete számomra sok rejtélyes dolgot tartalmazott, de annyit kivettem, hogy a két gép beszélgetett egymással, csak ez a kommunikáció vagy nem volt sikeres, vagy nem jutott vissza a kérést elindító klienshez.
Mikor böngészőből próbáltam tesztelni, az csak homokórázott, de egyéb semmi.
Mikor már 100 millió oldalt, fórumot, levelezést, miegymást átnéztem, tök véletlenül találtam egy érdekes dolgot, pont itt a hupon: két hálókártya közötti forgalom irányításánál nemcsak a PREROUTING, hanem a POSTROUTING-ot is beállították, SNAT céllal (remélem jól fogalmaztam). A különbség csak annyi, hogy belső ip címet írtak át külső ip-re.
Arra gondoltam, hogy talán nekem is állítanom kellene azt mert lehet hogy az elirányított csomagokra érkező válaszban a kettes gép ip-je van, amivel nem fog tudni mit kezdeni a kliens?
Az alábbiakat tettem:
iptables -t nat -A POSTROUTING -p tcp -j SNAT --to egyes_gep_ipje
És láss csodát, működik!
Igaz, hogy ezzel tulajdonképpen azok a csomagok is átíródnak, amelyek nem kerültek átirányításra (tök feleslegesen).
Tudna valaki segíteni nekem megmagyarázni ezt az egészet, miért is van így? Vagy mi is történik a háttérben? Egyáltalán jól gondoltam itt a vége felé, hogy a kettes gép ip-je van a csomagban, és azzal nem tud mit kezdeni a kliens (mert Ő az egyes géphez csatlakozott, aminek más az ip-je), vagy egészen más van a háttérben és csak malacom van? :)
Előre is köszönöm a választ!
- 1966 megtekintés
Hozzászólások
Egy Apache + ReverseProxy párossal nem lenne egyszerűbb?
Bár, ha nem akarod nagyon terhelni az első gépet, akkor nyilván az iptables a jobb megoldás.
- A hozzászóláshoz be kell jelentkezni
a forgalom mindig kétirányú, az első szabály csak a befelé jövő csomagokról rendelkezett, a kifelé menőkről nem. Azok a másik gép címével, mint feladóval mentek ki, ezért a kapcsolat kezdeményezője nem tudta összepárosítani az általa küldött csomagokat a rá kapott válaszokkal.
A második parancsot pontosíthatod azzal, hogy ne mindent snatoljon, csak a web szerverről kifelé menő forgalmat.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Köszönöm a linket, ez egy igen jó leírás.
Egyébként hiányos a leírásom, nem akartam fellengzős lenni, de tulajdonképpen minden olyan forgalmat, ami web, levelezés, mysql, svn akartam átirányítani, csupán a web volt az, amivel gyakorolgattam.
Azért volt erre szükség mert a kettes_gep valójában az egyes_gep helyén volt, csak fizikailag máshová került (másik szolgáltató), helyére pedig beraktam az egyes_gep-et, hogy amíg át nem veszik a névszerverek az új ip-t (a régi ip-re mennének a kliensek), addig se érezzen senki kiesést.
Látom, hogy tulajdonképpen minden PREROUTING-hoz kell egy POSTROUTING-ot is megadni, és így aztán senki nem veszi észre, mi is van a háttérben. Az FTP az egyetlen, ahol ez nem igazán akar működni. A 21-es portot még átirányítja, de
mikor mondjuk kiadom az ls -l utasítást, akkor már gond van, pedig a passzív portokat is megadtam az iptables-nek.
- A hozzászóláshoz be kell jelentkezni
Ha fizikailag máshová került a gép, akkor ott gondot okozhat, hogy hogyan tolod vissza a forgalmat a régi helyen levő tűzfal felé, hogy a snatolás megtörténhessen...
Az ftp-vel az baj, hogy a vezérlő csatornán gyakran átmegy a gép ip címe, ahol az adatkapcsolat vége van. Ott a tcp forgalomba kellene belekavarni, hogy átbuheráld a vezérlő csatornát is. Erre külön conntrack modul van a kernelben. Icq, skype, irc, egy-két voip program is a hekkelendők listáján van.
- A hozzászóláshoz be kell jelentkezni
Ez azt jelentené, hogy az eredeti, de új ip-s gépen is kellene tűzfal szabályt megadnom? Végül is működik a rendszer így is, mire gondolsz, mikor azt írod, hogy : hogyan tolod vissza a forgalmat a régi helyen levő tűzfal felé, hogy a snatolás megtörténhessen ?
A conntrack modul használatához elég csak betölteni a modulokat: ip_conntrack, ip_conntrack_ftp, ip_nat_ftp ?
Egy szösszenet idejéig rákerestem, de sehol nem találtam utalást különlegesebb iptables utasításokra, így azt szűrtem le, hogy a modulok betöltése és a 21-es sport átirányítása után ennek elméletileg működnie kell. Jól gondolom?
- A hozzászóláshoz be kell jelentkezni
bocs, de nem látom át teljesen azt, hogy mit csináltál, ezért nem tudom rendesen indokolni az állításomat...
Ha mondjuk bent volt egy tonlányos címtartományon a gép és átkerült mondjuk egy iw-sbe, akkor ezzel a snatolással vannak gondjaim.
Ha maradt ugyanazon szolgáltató címtartományán belül, csak kapott egy másik ip címet, akkor valamivel egyszerűbb a kérdés.
- A hozzászóláshoz be kell jelentkezni
Betöltöttem a modulokat, majd a 21-es port átirányítását hozzáadtam a tűzfalhoz, és működik!!
Legalábbis az ls -l már nem hibát, hanem eredményt hozott!
Na, a mai napon sikerélményes :)
- A hozzászóláshoz be kell jelentkezni
iptables-szel
t
- A hozzászóláshoz be kell jelentkezni