Portál AbcLinuxu, 12. května 2025 06:23

Dotaz: iptables - zmena zdrojove adresy

marek_s avatar 22.2.2007 18:45 marek_s | skóre: 8 | Loučky
iptables - zmena zdrojove adresy
Přečteno: 314×
Odpovědět | Admin
Zdravim. Nevite nekdo jak by se pomoci iptables (nebo jinak) dala zmenit zdrojova ipadresa paketu?

Pro upresneni:
Potrebuji nektere pakety routovat jinudy nez zbyle. Muj napad tedy byl:

iptables -t mangle -A OUTPUT [popis-paketu] -j ROUTE --gw jinam

Jenze navic potrebuji zaridit, aby zdrojova adresa paketu byla ta patrici onomu sitovemu rozhrani kde sidli jinam. Defaultne se ovsem pouzije adresa patrici druhemu sitovemu rozhrani, kam se routuje vsechno ostatni...

"Consummatum est" -- Iesus Nazarenus
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.2.2007 23:24 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nějak nechápu ?

To kam se který paket pošle o to se stará tabulka route viz: ip route

Takže si tam přidejte příslušné IP a že se mají posílat na příslušné rozhraní....
23.2.2007 08:57 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Odpovědět | | Sbalit | Link | Blokovat | Admin
zmena zdrojove adresy paketu se provadi v tabulce nat v POSTROUTING pomoci -j SNAT nebo -j MASQUERADE vice v manu
23.2.2007 09:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nepomůže kromě --gw použít i --oif?
23.2.2007 09:16 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Precti si "Linux advenced routing HOWTO". To co hledas je popsano asi tady: http://lartc.org/howto/lartc.netfilter.html

iptables pouzijes pouze pro markovani paketu. O zbytek se postara routing.

J.
23.2.2007 10:07 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Nepostará, protože v době, kdy paket prochází řetězcem OUTPUT v tabulce MANGLE, už je o směrování rozhodnuto.
23.2.2007 11:12 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Ne tak uplne. Po pruchodu OUTPUT/MANGLE je znovu overen routing - prave z duvodu mozne zmeny.

Hezky je to popsano tady: http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES

J.
23.2.2007 12:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Bohužel máte pravdu také jen částečně. Zkusil jsem si nasimulovat situaci, kterou řeší tazatel, tj. odlišné směrování paketů na základě značky nastavené v mangle.OUTPUT, a pakety jsou sice směrovány správně (tj. označkované jdou jinudy než neoznačkované), ale všem zůstává původní zdrojová adresa (jako by označkované nebyly). Použití SNAT sice problém zdrojové adresy řeší, ale moc uspokojivé řešení to není, lepší by byl Fast NAT, kdyby fungoval. Také by bylo dobré zjistit, co všechno ze zvolené položky směrovací tabulky se ještě při tom "druhém průchodu" ignoruje.
23.2.2007 12:37 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Na pouziti SNATu nevidim zadny problem. Do POSTROUTING daneho adapteru bych soupl Masqueradu a je vymalovano.

Postup by byl asi takovy: iptables -A OUTPUT -t mangle ... -j MARK ... - nastaveni znacky ip route ... ip rule ... - routing na zaklade znacky iptables -A POSTROUTING ... -o ethX -j MASQUERADE

Popripade by slo resit i NATing na zaklade znacky.

J.
23.2.2007 13:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
To je spíš takový můj pocit, že stavový NAT by se měl používat jen tam, kde je potřeba, aby byl stavový. Větší problém ale vidím spíš v otázce, co všechno se ještě (kromě zdrojové adresy) v tom "druhém průchodu" ignoruje.
23.2.2007 14:12 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Hmmm. Tak hluboce jsem do toho nesel.

Dovedu si predstavit, ze pouze otestuje, zda-li se zmenily podminky pro routing (cilova adresa, mark, TOS a co ja vim). A pokud se neco z toho zmenilo, tak znovu projde routovaci pravidla. Prvni pruchod tam je hlavne kvuli zjsiteni "outgoing interface".

Nerekl bych ze se neco "ignoruje".

(Podotykam, ze jsme se dostali na tenky led a v tuto chvili spis odhaduju. Najde se nekdo, kdo ma cas to overit v kodu?)

Faktem je, ze to funguje :o)

J.

PS: Se soucasnym HW bych nad nepouzitim stavoveho NATu zacal uvazovat az ve chvili, kdy bych mel duvod jej nepouzit (treba proto, ze nepouzivam soucasny HW ;o) ). V opacnem pripade si s tim nema smysl lamat hlavu.
23.2.2007 14:23 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Při mých testech se určitě se ignoroval parametr src té položky, a to i když jsem ho zadal explicitně při jejím přidávání pomocí 'ip route add'. Paket sice odešel přes druhou gateway, ale se zdrojovou adresou odpovídající té původní. To se u průchozích paketů, značkovaných v mangle.PREROUTING, neděje.
23.2.2007 14:55 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
src primo nemeni zdrojovou ip adresu. Pouze upravuje chovani routingu tak, jako by zdrojova adresa byla src. (Coz je uzitecne prave pro lokalne generovane pakety, ktere nemaji zadnou zdrojovou adresu).

A ted opet spekulace. V nejakem okamziku se ta zdrojova adresa musi nastavit (ve vetsine pripadu se tak deje prave na zaklade "routing decision", coz svadi k predstave ze src meni zdrojovou adresu primo). Toto nastaveni zdrojove adresy se pravdepodobne deje prave mezi temito routingy. Nicmene nemam cas to prave ted overit.

J.
23.2.2007 15:06 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
src primo nemeni zdrojovou ip adresu. Pouze upravuje chovani routingu tak, jako by zdrojova adresa byla src. (Coz je uzitecne prave pro lokalne generovane pakety, ktere nemaji zadnou zdrojovou adresu).

S takovým výkladem nemohu souhlasit, podle dokumentace (i podle mých zkušeností) parametr src určuje preferovanou zdrojovou adresu, tedy zdrojovou adresu, která se přiřadí, není-li zdrojová adresa předem určena jinak (např. u forwardovaných paketů, paketů patřících do existujícího flow nebo paketů, kde si o konkrétní zdrojovou adresu řekla aplikace). Tento parametr nemůže ovlivnit chování routingu, protože se k němu dostaneme teprve v okamžiku, kdy už routing vybral optimální směrovací položku (takže už není co ovlivňovat).

23.2.2007 15:34 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Ano. Nase vyklady se lisi pouze mirou abstrkce.

Ja rikam, ze src samo o sobe nezmeni adresu. Jen pripravi podminky k jeji zmene (lepe receno k jejimu ziskani pokud neni definovana). Toto ziskani pak probiha (pravdepodobne - zde si jisty nejsem) nekde mezi nami diskutovanymi routingy.

V nasem pripade to pak funguje asi takto: Vzhledem k tomu, ze prvni routing nema paru o tom, ze paket bude oznackovan, posle paket na defaultni interface. Podle nej dojde k prirazeni jeho IP. Nasledne je paket oznacen a znovu projde routingem kde je preroutovan - lec adresa zustava.

V pripade ze by nebylo pouzito finty s oznacenim paketu, bude se system chovat presne tak, jak popisujete a parametr src bude mit na zmenu adresy vliv.

Nas problem tedy lze elegantne resit NATingem zdrojove adresy v POSTROUTING tabulce. S tim oba souhlasime (dodavam jen pro ostatni citatele, protoze se nase diskuze stala mozna kapku zamotanou).

J.
marek_s avatar 23.2.2007 16:01 marek_s | skóre: 8 | Loučky
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky za vsechny rady. Problem jsem zatim vyresil trosku jinak, nez jsem chtel puvodne, nicmene az budu mit nekdy naladu, tak to zkusim predelat:-)

Delat NAT jsem take zkousel, nicmene to nechtel a nechtel natovat. Predpokladam proto, ze se vzdy aplikovalo pouze jedno pravidlo z iptables...

BTW, nevite nekdo tu banalni vec (ktera je asi tak banalni, ze jsem ji nikde nenasel), jak se aplikuji v iptables pravidla? Je mi jasne, ze vyhovuje-li nejake pravidlo nejakeho chainu, dalsi pravidla uz se v nem netestuji. Co ale jine chainy? A jine tabulky?

"Consummatum est" -- Iesus Nazarenus
23.2.2007 16:11 Hubik
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
Jeste jednou uvadim http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES

Je tam hezky obrazek, ktery ukazuje pruchod paketu jednotlivymi chainy a tabulkami. Kazdym oblackem na obrazku (chain) se prochazi dokud u nektere jeho polozky nedojde ke splneni vsech definovanych pravidel (nebo dokud neni aplikovano defaultni pravidlo po pruchodu vsech pravidel). Pak se pruchod chainem ukonci a presouvas se na nasledujici oblacek.

PS: Pro jednoducost zapomen na NAT a udelej maskaradu, coz je tebou pozadovany pripad NATu.
marek_s avatar 23.2.2007 17:49 marek_s | skóre: 8 | Loučky
Rozbalit Rozbalit vše Re: iptables - zmena zdrojove adresy
To je skvele, obrazky mam rad. Hnedle se na to podivam:-)
"Consummatum est" -- Iesus Nazarenus

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.