IPtables - „globální“ přepis IP adresy

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
IPtables - „globální“ přepis IP adresy
« kdy: 22. 08. 2019, 08:17:19 »
Zdravím,

předem upozorňuji, že se s IPtables (zatím) moc nekamarádím, ale řeším tu jeden problém. Mám tu jednu debilně napsanou aplikaci, která se pomocí XMPP protokolu připojuje na server, ale v kódu má natvrdo zapsanou IP adresu místo domény. Na nových verzích jsem to samozřejmě přepsal a zkompiloval, ale ta aplikace běží i na starých strojích, kde je nasazení nový verze sice možný, ale lehce složitější (není tam jednoduchý přístup přes SSH). Napadlo mě, že by se třeba ta adresa dala nějak globálně přepsat na jinou IP, případně vymyslet řešení, jak zjišťovat aktuální IP dle domény. Zkoušel jsem něco jako:


Kód: [Vybrat]
iptables -t nat -I OUTPUT --dest x.x.x.x -j DNAT --to-dest y.y.y.y

nebo

Kód: [Vybrat]
iptables -t nat -A PREROUTING -p tcp -d x.x.x. -j NETMAP --to y.y.y.y

Nevím, jestli mám řešit jen OUTPUT nebo i INPUT apod. Jak říkám - jsou to spíš moje výkřiky do tmy z toho, co jsem různě načetl na netu. Zkouším to jen tak z mojí vlastní iniciativy a zajímalo by mne, jestli by někdo zkušenější neporadi, zda vůbec můj problém jde vyřešit a případně jak.

Předem díky za jakýkoliv rady :)

« Poslední změna: 22. 08. 2019, 10:04:15 od Petr Krčmář »
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript


Re:IPtables - 'globalni' prepis IP adresy
« Odpověď #1 kdy: 22. 08. 2019, 08:57:51 »
To, co řešíte, je klasický DNAT. Při použití iptables je v tabulce nat OUTPUT určené pro komunikaci lokálních procesů, PREROUTING a POSTROUTING se používá na routeru pro komunikaci, která prochází skrz router. Záleží tedy na tom, zda ten NAT nastavujete přímo na počítači s aplikací nebo na routeru.

NAT nastavujete jenom pro směr, ve kterém se navazuje TCP/IP spojení – pakety v opačném směru upraví jádro odpovídajícím způsobem samo.

iptables pracují vždy s IP adresami – i kdybyste použil doménu, přeloží se v okamžiku nastavování pravidla a pak už se IP adresa nezmění, bez ohledu na to, co se bude dít s DNS.

Re:IPtables - „globální“ přepis IP adresy
« Odpověď #2 kdy: 22. 08. 2019, 10:52:03 »
Mám tu jednu debilně napsanou aplikaci, která se pomocí XMPP protokolu připojuje na server, ale v kódu má natvrdo zapsanou IP adresu místo domény.

Sorry, uznávám že to nebyl nejlepší nápad ;)


Předpokládám že chceš překládat na serveru. V tom případě potřebuješ jak DNAT:

Kód: [Vybrat]
iptables -t nat -D PREROUTING -p tcp -d x.x.x.x --dport 5222 -j DNAT --to-destination y.y.y.y
tak i SNAT:

Kód: [Vybrat]
iptables -t nat -D POSTROUTING -p tcp -d y.y.y.y --dport 5222 -j SNAT --to-source x.x.x.x
aby se pakety vracely stejnou cestou.

Re:IPtables - „globální“ přepis IP adresy
« Odpověď #3 kdy: 22. 08. 2019, 11:17:02 »
tak i SNAT aby se pakety vracely stejnou cestou.
SNAT by byl potřeba jedině v případě, že by nová IP adresa serveru byla v jiné síti, než stará IP adresa, a cesta mezi klientem a novou sítí nevedla přes ten NATující router.

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:IPtables - „globální“ přepis IP adresy
« Odpověď #4 kdy: 22. 08. 2019, 11:37:48 »
Mám tu jednu debilně napsanou aplikaci, která se pomocí XMPP protokolu připojuje na server, ale v kódu má natvrdo zapsanou IP adresu místo domény.

Sorry, uznávám že to nebyl nejlepší nápad ;)



:D :D Nazdar! :D To samozřejmě bylo myšleno v dobrým :D Ale díky, určitě zkusím!
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript


robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:IPtables - „globální“ přepis IP adresy
« Odpověď #5 kdy: 22. 08. 2019, 11:44:45 »
Mám tu jednu debilně napsanou aplikaci, která se pomocí XMPP protokolu připojuje na server, ale v kódu má natvrdo zapsanou IP adresu místo domény.

Sorry, uznávám že to nebyl nejlepší nápad ;)



:D :D Nazdar! :D To samozřejmě bylo myšleno v dobrým :D Ale díky, určitě zkusím!



Jo jinak, na serveru prave ne. Server by se mel rusit a vsechno stehovat do Hradce. Takze jsem myslel na jednotlivych stanicich?
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Re:IPtables - „globální“ přepis IP adresy
« Odpověď #6 kdy: 22. 08. 2019, 12:00:09 »
SNAT by byl potřeba jedině v případě, že by nová IP adresa serveru byla v jiné síti, než stará IP adresa, a cesta mezi klientem a novou sítí nevedla přes ten NATující router.

Ano, ačkoliv to není v původním příspěvku uvedeno, tak to je přesně tento případ.

Jo jinak, na serveru prave ne. Server by se mel rusit a vsechno stehovat do Hradce. Takze jsem myslel na jednotlivych stanicich?

Potom stačí jen ten DNAT:

Kód: [Vybrat]
iptables -t nat -A OUTPUT -p tcp -d x.x.x.x --dport 5222 -j DNAT --to-destination y.y.y.y
Ale pokud jde o klienty, tak nechápu jaká je výhoda NATování oproti upgradu na novou verzi?

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:IPtables - „globální“ přepis IP adresy
« Odpověď #7 kdy: 22. 08. 2019, 12:15:08 »
Ale pokud jde o klienty, tak nechápu jaká je výhoda NATování oproti upgradu na novou verzi?


Diky Ti, az bude cas, zkusim to, ale praveze mi to nejak neslo, vubec se to nepripojovalo, ale zkousel jsem to chvili. Kvalitni zorganizovany fofr tu mame, vsak vis :)

Samozrejme, ze by tam sla narvat i novejsi verze. Ted jsem si zkusebne nainstalovat z archivu starsi debian. Kdyz to zkompiluju na novejsim, tak to logicky na starych systemech rve problemy s libc nebo co to bylo. A navic tam kolikrat nahrat novej soubor rozumne nejde - kdyz maji zariznuty vsechny porty krom XMPP.

BTW do rodne krajiny se nekdy nechystas?
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:IPtables - „globální“ přepis IP adresy
« Odpověď #8 kdy: 22. 08. 2019, 14:41:25 »
Ok, tak asi vyreseno tim, co poradil Nikola. Fungovalo to celou dobu, ale pocitace na sebe nevideli kvuli internimu firewallu. *facepalm*


diky :)))
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript