Skip to main content

12.3 Preklad cieľovej adresy (destination NAT)

Preklad cieľovej adresy

Pri použití source NAT je obvykle celá IPv4 LAN sieť maskovaná za WAN adresu smerovača a (mimo bezprostredných sieťových susedov) nie je možné do nej pristupovať z WAN. Niekedy však potrebujeme z internetu pristupovať na niektoré zariadenie v LAN - typicky na nejaký server. Toto je možné dosiahnuť presmerovaním konkrétneho portu alebo presmerovaním celej IPv4 adresy. Ide o preklad cieľovej adresy (destination NAT - dst-nat) - smerovač nahradí cieľovú adresu a toto zaeviduje v tabuľke spojení rovnako, ako tomu bolo pri source NAT. Požiadavka smerujúca na verejnú IPv4 adresu smerovača je teda na základe cieľového portu presmerovaná na konkrétnu adresu v LAN - na domácich smerovačoch sa táto funkcia často označuje ako Port Forwarding. Lokálny cieľový port je možné aj zmeniť, nemusí sa zhodovať s verejným portom.

Konfigurácia v MikroTik RouterOS

dstnat-general.webpPravidlá destination NAT sa definujú podobne ako pravidlá source NAT - vo WinBox ponuke IP → Firewall, záložka NAT. Definovať však môžeme len vstupné sieťové rozhranie, volíme reťazec dstnat a obvyklá akcia je dst-nat. Na rozdiel od source NAT nemôžeme definovať výstupné rozhranie, pretože pri spracovaní pravidla ešte nie je známe - rozhodovanie nastane až neskôr.

Hoci nemôžeme špecifikovať cieľové rozhranie, môžeme uviesť cieľovú adresu.adresu (Dst. Address). Ide o adresu smerovača a zmysel to má, pokiaľ máme na ňom viac verejných adries. Takto dokážeme rozlíšiť, ktorá adresa bola oslovená a podľa toho reagovať. V praxi sa často používajú 2 verejné IP adresy: Jedna slúži výhradne len pre source NAT a prístupy na ňu z internetu sú blokované firewallom. Druhá slúži práve na prístupy na lokálne servery cez destination NAT a ako zdrojovú ju používajú nanajvýš len servery.

dstnat-action.webpPokiaľ máme v LAN sieti webový server a chceme naň presmerovať HTTP port verejnej IPv4 adresy, požiadavkám z WAN rozhrania adresovaných HTTP portu (TCP/80) smerovača nastavíme presmerovanie na lokálny webový server v LAN. Keďže na tom istom porte má náš smerovač svoje vlastné webové rozhranie, to sa stane z WAN rozhrania nedostupným. Požiadavka na TCP/80 už viac nie je spracovávaná v reťazireťazci input, ale v reťazireťazci forward.

Aby bolo dostupné aj webové rozhranie smerovača, môžeme mu zmeniť port z 80 napríklad na 81 (WinBox ponuka IP → Services).

Firewall a NAT

Pozor, nezabúdajme na firewall! To, že cez destination NAT presmerujeme nejaký port, ešte neznamená, že dostane aj povolenie na firewalli - musíme ho povoliť.

Pri konfigurácii firewallu pre presmerované spojenia je potrebné zamyslieť sa, ktorý port vlastne riešime. Napríklad ak verejný port 8000 presmerovávame na port 80 servera v LAN, čo treba povoliť na firewalli? Port 8000, či 80? A v reťazci input, či forward?

Vždy sa najskôr rieši destination NAT a až potom firewall. Teda hoci prístup na verejnú IP adresu smerovača sa môže spočiatku javiť ako input, prebehne destination NAT a zmení ho na forward, cieľovým rozhraním sa stane LAN, cieľová IP adresa sa zmení na adresu LAN servera a zmení sa aj cieľový port. Firewall teda musí povoľovať forward do LAN na presmerované číslo portu (80) a lokálnu IP adresu servera.

Tip pre konfiguráciu firewallu: Vždy sa zameriavajme na dôsledok prístupu a neriešime, či vznikol priamym smerovaním alebo cez NAT. Teda si vždy predstavme, že máme vo WAN sieťových susedov, ktorí majú smerovanie do našej LAN a konfigurujeme prístup pre nich.

Optimalizácia konfigurácie

V prípade presmerovávania viacerých portov je rozumné, podobne ako pri konfigurácii firewallu, vytvoriť vlastné samostatné reťazce, napríklad „presmerovanie-tcp“ a „presmerovanie-udp“. Posielať budeme do nich podľa protokolu tie požiadavky, ktoré prišli z WAN a smerujú na vlastnú adresu smerovača.

Typ cieľovej adresy

Presmerovanie portu verejnej adresy skrýva jeden nenápadný problém…

Praktická situácia: V LAN sieti sú okrem webového servera (na ktorý sme umožnili prístup z internetu presmerovaním HTTP portu) aj rôzne iné zariadenia s webovým rozhraním, napríklad Raspberry Pi. Vo WAN sieti máme okrem ISP aj sieťových susedov, ktorí majú definované smerovanie do našej LAN, aby sa dostali na naše LAN zariadenia priamo (cez ich lokálne adresy, bez NAT).

V čom je problém, ako sa prejaví?

Odpoveď na otázku

Pravidlo presmerovania HTTP portu hovorí jasné: Pokiaľ prišiel paket z WAN, je v ňom protokol TCP a smeruje na port 80, zmeň mu cieľovú adresu na lokálny webový server. Akonáhle toto pravidlo zapneme, budú presmerované prístupy na všetky LAN zariadenia (dokonca aj na neexistujúce adresy), teda sieťovým susedom sa namiesto webových rozhraní Raspberry Pi bude zobrazovať web nášho servera.

Preto je pri presmerovaní portov verejnej adresy cez destination NAT vždy potrebné špecifikovať aj typ cieľovej adresy (Dst. Address Type) - v prípade presmerovania portu WAN adresy na LAN adresu volíme typ adresy local, čo označuje vlastnú adresu smerovača.dstnat-extra.webp

Statický NAT (mapovanie celej adresy)

Okrem akcie dst-nat môžeme pre presmerovanie celej IPv4 adresy využiť akciu netmap - to sa hodí v prípade, keď máme viac IPv4 adries na vonkajšom rozhraní a niektorú chceme kompletne mapovať na niektoré LAN zariadenie (server alebo smerovač). V takom prípade volíme rovnakú akciu aj pre reťazreťazec srcnat (v opačnom smere). Dosiahneme tým statický NAT, ako sme si ho predstavili v úvodnej kapitole 12.1 Preklad sieťovej adresy (NAT).

Full-Cone NAT

Za zmienku však stojí aj akcia endpoint-independent-nat - ňou dosiahneme Full-Cone NAT pre UDP, teda umožníme prístup k lokálnym službám, pokiaľ vedia využiť STUN alebo iný spôsob prechodu cez NAT. Aby to fungovalo, je potrebné túto akciu zadať aj pre reťazreťazec srcnat (v opačnom smere) a nutné je špecifikovať protokol UDP, pretože len preň je túto akciu možné využiť.