Skip to main content

12.1 Preklad sieťovej adresy (NAT)

K pôvodným princípom internetu patrili verejné IP adresy na každom koncovom zariadení, teda napríklad každý PC v učebni mal svoju vlastnú verejnú adresu a každý sa mohol priamo spojiť s kýmkoľvek, ak tomu nebránil firewall. Ako už vieme, IPv4 adresy sa už dávno minuli a zhruba od roku 2000 situáciu zachraňuje preklad sieťovej adresy (Network Address Translation = NAT), ktorý sa stal nevyhnutným pre koncové IPv4 siete. NAT je možné uplatniť aj pre IPv6, no z praktického hľadiska tam nemá až taký zmysel.

Treba zdôrazniť, že NAT nepatrí k základným úlohám smerovača (tou je prosté preposlanie paketu do správneho sieťového rozhrania) a bežne sa na smerovačoch ani nerealizuje. Výnimkou sú hraničné smerovače - teda tie, ktoré oddeľujú vnútornú (koncovú) sieť od verejného internetu. Pri zapnutom NAT smerovač zamieňa zdrojovú alebo cieľovú IP adresu (source NAT / destination NAT), prípadne aj zdrojový alebo cieľový TCP/UDP port.

Dôvodom pre nasadenie NAT nemusí byť len nedostatok verejných IP adries, ale aj flexibilita v adresovaní LAN, nezávislá od ISP. Ak by sme v celej LAN mali použité verejné IP adresy, po zmene ISP by sme museli prečíslovať celú LAN. Navyše by v IPv4 bol problém vytvoriť nejaký prehľadný adresný plán a podsiete tak, aby spadali do prideleného bloku verejných IPv4 adries.

Pre lepšie pochopenie ďalších informácií si pripomeňme pojem soket (socket):
Ide o kombináciu IP adresa + port, napríklad 192.168.1.1:80. V problematike NAT sa zväčša bavíme o dvojici soketov - vnútorný (na LAN strane smerovača) a vonkajší (na WAN strane smerovača po preložení cez NAT).

Typy NAT

Statický NAT (1:1)

Vyžaduje veľa verejných adries - toľko, koľko je zariadení v LAN, ktoré majú mať dostupný internet. Zariadenia v LAN používajú lokálne adresy, no každé je prekladané na konkrétne stanovenú verejnú adresu. Cez konkrétnu verejnú adresu je možné z internetu pristupovať priamo na konkrétne zariadenie v LAN (ak tomu nebráni firewall).

Príklad situácie, keď máme pridelený blok 8 IPv4 adries 192.0.2.0/29:

zariadenie LAN adresa WAN adresa
router 192.168.1.1 192.0.2.1
AP 192.168.1.2 (nepotrebuje)
súborový server (NAS) 192.168.1.10 192.0.2.2
server Home Assistant 192.168.1.11 192.0.2.3
PC1 192.168.1.20 192.0.2.4
PC2 192.168.1.21 192.0.2.5
infoobrazovka 192.168.1.30 192.0.2.6

Statický NAT sa obvykle používa len pre tie zariadenia, ktoré nielenže majú mať prístup do internetu, ale majú byť aj dostupné z internetu - teda pre servery. Uplatňuje sa teda pre takzvanú demilitarizovanú zónu (DMZ). V terminológii MikroTik ide o akciu netmap, niektoré domáce smerovače používajú označenie DMZ.

Nemôžeme verejné IP adresy nasadiť priamo na zariadenia v LAN?

V podstate áno, ale stratí sa flexibilita číslovania a po zmene verejného IP bloku bude treba meniť adresy všetkých zariadení. Navyše by sme museli verejné adresy nasadiť aj na zariadenia, ktoré ich nepotrebujú.

Dynamický NAT (N:M)

Je podobný statickému, no vyžaduje „len“ toľko verejných adries, koľko zariadení v LAN pristupuje k internetu súčasne. Každé zariadenie bude mať pri prístupe do internetu preloženú lokálnu adresu na prvú voľnú verejnú adresu.

Síce to potenciálne šetrí verejné adresy, priradenie nie je predvídateľné, a teda reálne nie je možné využiť ho pre prístup z internetu do LAN. Využiteľná by mohla byť azda len kombinácia statického NAT pre severy a dynamického NAT pre príležitostné zariadenia (notebooky).

Preklad adresy portov PAT (N:1)

Označuje sa aj NAT overload, a je to ten spôsob NAT, ktorý využijeme najčastejšie a ktorý obvykle chápeme pod prostým označením „NAT“. V tejto situácii sú viaceré (alebo aj všetky) zariadenia v LAN prekladané na jedinú verejnú adresu a jednotlivé konverzácie sú rozlišované TCP/UDP portami, či inými identifikátormi protokolov.

Tieto identifikátory umožňujú pakety z WAN nasmerovať na konkrétne zariadenie v LAN - nevyhnutná je samozrejme evidencia spojení (connection tracking), ktorú už poznáme z firewallu. V ďalších kapitolách budeme rozlišovať PAT podľa toho, či sa mení zdrojová alebo cieľová adresa a budeme ho označovať prosto NAT.

Na WAN rozhraní síce postačuje jedna verejná adresa, no môžeme ich mať aj viac - v takom prípade môžeme napríklad každú LAN podsieť prekladať na inú verejnú adresu. To nám umožní z WAN strany identifikovať zdrojovú sieť, ale predídeme tým aj potenciálnemu vyčerpaniu portov v prípade veľkého počtu klientov s množstvom otvorených spojení.

Samotný NAT (PAT) zo svojej podstaty bráni end-to-end spojeniu, teda priamemu spojeniu koncových zariadení. Aby sa mohli zariadenia spojiť, aspoň jedno z nich musí mať verejnú adresu (bez NAT). Toto môže byť a aj je problémom napríklad v prípade VoIP, či rôznych peer-to-peer aplikáciách (messenger, chat, multiplayer hra, server). V ďalších kapitolách sa dozvieme, ako umožniť prístup k LAN zariadeniu využitím presmerovania konkrétnych portov.

Obchádzanie obmedzenia NAT

Existujú dva štandardy, ktoré umožňujú automaticky sprístupniť LAN zariadenie pre internet - v podstate ľubovoľná aplikácia len „povie“ hraničnému smerovaču, aby na ňu nasmeroval požadovaný port:

  • NAT-PMP (NAT Port Mapping Protocol) je jednoduchší štandard od Apple, ktorý pre dohadovanie využíva UDP porty 5350 a 5351.
  • UPnP (Universal Plug and Play) je komplexnejší štandard, ktorý využíva protokol SSDP na UDP porte 1900 pre hľadanie smerovača a HTTP na komunikáciu. HTTP port pre UPnP však nie je definovaný, MikroTik používa TCP 2828.

Tieto „automatické NAT protokoly“ sú populárne obzvlášť u hráčov - umožňujú komunikovať a hrať multiplayer hry priamym spojením na IPv4, bez potreby herného servera. Podporované sú aj na bežných domácich smerovačoch.

V podnikových sieťach však tieto pomôcky predstavujú potenciálny bezpečnostný problém, preto ich nemôžeme aktivovať bez obmedzení, či ďalšieho zabezpečenia. Umožnilo by to komukoľvek presmerovať si ktorýkoľvek port verejnej adresy (v prípade UPnP dokonca na akékoľvek cieľové zariadenie) - pokiaľ by tomu nebránil firewall.

Samozrejmou požiadavkou na fungovanie je, aby hraničný smerovač mal naozaj verejnú IP adresu a nie CGNAT, teda ďalší NAT u ISP (pre pripomenutie pozri kapitolu 7.4 Adresovanie IPv4).

Implementácia UPnP na smerovači MikroTik

V MikroTik RouterOS môžeme službu UPnP konfigurovať cez WinBox ponuku IPUPnP, implicitne je vypnutá. Skôr ako službu zapneme, je potrebné najskôr definovať sieťové rozhrania (tlačidlom Interfaces) - jedno rozhranie musí byť zvolené ako externé a aspoň jedno rozhranie musí byť interné.ip-upnp.webp

Služba UPnP je na zariadení MikroTik implementovaná len na základnej úrovni, funguje nasledovne:

  • Služba je dostupná len klientom pripojeným do definovaných interných rozhraní.
  • Ktokoľvek (z interného rozhrania) môže požiadať o presmerovanie ktoréhokoľvek portu z externého rozhrania smerovača. Nie je možné nastaviť žiadne obmedzenia.
  • Cieľom presmerovania môže byť ktorékoľvek zariadenie v ktorejkoľvek sieti, dokonca aj v internete! Nie je možné nastaviť žiadne obmedzenia.
  • Prijatá požiadavka sa realizuje pridaním dynamického NAT pravidla na koniec reťazca (ako posledné pravidlo).
  • Služba neakceptuje časové obmedzenie. Ak klient pošle v požiadavke aj obmedzenie platnosti presmerovania, MikroTik smerovač ju odmietne s chybou 725.
  • Vytvorené pravidlo presmerovania zostane v NAT tabuľke, až kým (ktorýkoľvek) klient nepožiada o jeho zrušenie alebo sa nevypne služba alebo sa nereštartuje smerovač. Pravidlo nie je možné zmazať cez WinBox.

Vzhľadom na uvedené skutočnosti nemožno túto službu odporúčať zapínať bez dôsledného nastavenia firewallu (ktorý musí zakázať napríklad aj preposielanie z WAN do WAN) a časovaného reštartu služby. Inak by sa mohlo veľmi ľahko stať napríklad to, že po zadaní adresy nášho e-shopu (bežiaceho vo firemnej sieti), len s doplneným iným číslom portu, by bol klient presmerovaný na jeho falošnú kópiu inde v internete. A možno by mal aj HTTPS certifikát v poriadku, lebo presmerované by bolo aj overovanie Let's Encrypt služby cez TCP/80 (pokiaľ ho vo firme nepoužívame).

Praktický test UPnP

Pre otestovanie UPnP je možné využiť konzolovú aplikáciu upnpc. Pre Windows je dostupná na stránke projektu MiniUPnP a v Linuxe nainštalujeme balík miniupnp (apt install miniupnpc).

Prečo nejde uvedený príkaz v školskej virtuálnej sieti na virtuálnom PC?

Uvedený príkaz funguje na bežnom Linuxe založenom na Debian (ako je Ubuntu a Mint). Na virtuálnych PC je mimoriadne úsporný Alpine Linux, v ňom treba pred inštaláciou povoliť komunitný repozitár a použiť apk:

sed -i "/community/s/^#//" /etc/apk/repositories
apk update
apk add libnatpmp

Tento šikovný nástroj dokáže, okrem iného:

  • zistiť dostupnosť služby UPnP a verejnú IP adresu: upnpc -s
  • sprístupniť port vnútorného zariadenia cez vonkajší port smerovača:
    upnpc -a {IP adresa zariadenia} {port zariadenia} {vonkajší port routra} {protokol}
  • zobraziť zoznam mapovaných spojení: upnpc -l
  • odstrániť vytvorené presmerovanie portu: upnpc -d {vonkajší port} {protokol}

Príklad použitia - cez port 8080 sprístupní webový port TCP/80 zariadenia 10.110.100.80:

# zistíme, či je služba UPnP dostupná
upnpc -s
# presmerujeme webový port zariadenia 10.110.100.80 cez externý port 8080
upnpc -a 10.110.100.80 80 8080 tcp
# zobrazíme zoznam presmerovaní
upnpc -l

# a upraceme po sebe
upnpc -d 8080 tcp

Implementácia NAT-PMP na smerovači MikroTik

V MikroTik RouterOS môžeme službu NAT-PMP konfigurovať cez WinBox ponuku IP → NAT PMP úplne rovnako, ako UPnP. Implicitne je tiež vypnutá a najskôr je potrebné definovať sieťové rozhrania (tlačidlom Interfaces) - jedno externé a aspoň jedno interné.

Služba NAT-PMP na zariadení MikroTik funguje nasledovne:

  • Služba je dostupná len klientom pripojeným do definovaných interných rozhraní.
  • Ktokoľvek (z interného rozhrania) môže požiadať o presmerovanie ktoréhokoľvek portu z externého rozhrania smerovača. Nie je možné nastaviť žiadne obmedzenia.
  • Cieľom presmerovania môže byť len port klienta. Na rozdiel od UPnP, kde zadávame cieľovú adresu, NAT-PMP presmerováva vždy na adresu žiadateľa.
  • Prijatá požiadavka sa realizuje pridaním dynamického NAT pravidla na koniec reťazca (ako posledné pravidlo).
  • Služba akceptuje časové obmedzenie, no v NAT tabuľke ho nevidno. Po uplynutí času pravidlo zmizne.
  • Ak pravidlu nebolo zadané časové obmedzenie, zostane v NAT tabuľke, až kým klient nepožiada o jeho zrušenie alebo sa nevypne služba alebo sa nereštartuje smerovač. Pravidlo nie je možné zmazať cez WinBox.

Praktický test NAT-PMP

Pre otestovanie NAT-PMP je možné v Linuxe využiť konzolovú aplikáciu natpmpc. Nainštalujeme ju štandardne (apt install natpmpc), v Alpine Linux:

apk add libnatpmp --repository=https://dl-cdn.alpinelinux.org/alpine/latest-stable/community

Tento nástroj dokáže:

  • zistiť dostupnosť služby NAT-PMP na svojej bráne a verejnú IP adresu: natpmpc
  • sprístupniť svoj port cez vonkajší port smerovača (pozor na poradie), aj s časovým obmedzením v sekundách:
    natpmpc -a {vonkajší port routra} {svoj port} {protokol} {trvanie}
  • odstrániť vytvorené presmerovanie portu: rovnako ako vytvorenie, ale s trvaním 0
  • odstrániť všetky svoje presmerovania: natpmpc -a 0 0 {protokol} 0

Príklad použitia - cez port 8080 sprístupní svoj webový port TCP/80:

# zistíme, či je služba NAT-PMP dostupná
natpmpc
# presmerujeme svoj webový port cez externý port 8080 na 5 minút
natpmpc -a 8080 80 tcp 300

# a prípadne upraceme všetko po sebe
natpmpc -a 0 0 tcp 0

STUN

Aby bolo možné spojenie dvoch klientov s NAT prekladom, je možné využiť štandardný protokol STUN - v novšej verzii (od roku 2008, RFC 5389) sa označuje Session Traversal Utilities for NAT. Ten funguje na princípe sprostredkovateľa - STUN servera. Obaja klienti sa spoja so serverom, z neho zistia, akú majú verejnú IP adresu a z akého portu vytvorili spojenie, následne sa (ľubovoľným spôsobom) vytvorí medzi nimi spojenie. STUN server je teda len akýmsi zrkadlom, ktoré odpovie, ako vidí odosielateľa - pod akou adresou a portom prišla otázka.

STUN, resp. RFC 4787, rozlišuje:

  • mapovanie - špecifikuje, ako sa udeje preklad vnútorného a vonkajšieho soketu
  • filtrovanie - určuje kritériá, z ktorých vonkajších zariadení budú prijaté pakety.

Typy NAT z hľadiska STUN

Hlavne v súvislosti s VoIP, hrami a hernými konzolami sa môžeme stretnúť s nasledovným rozlišovaním NAT podľa typu mapovania a filtrovania - ide o 4 typy v poradí od najflexibilnejšieho a najlepšieho pre aplikácie (ale potenciálne najrizikovejšieho z hľadiska bezpečnosti) až po najproblematickejší z hľadiska spojenia (ale tým pádom aj najbezpečnejší):

  1. Mapovanie nezávislé od cieľa (Endpoint-Independent Mapping): Keď sa vytvorí spojenie z vnútorného soketu lokálneho zariadenia a namapuje sa na vonkajší port smerovača, každý paket z tohoto vnútorného soketu bude používať ten istý vonkajší port, bez ohľadu na cieľovú adresu a port externých zariadení. Rozlišujú sa 3 typy NAT:
    • Full-Cone NAT (typ 1, Endpoint-Independent Filtering): Cez vonkajší soket smerovača môže posielať pakety na lokálne zariadenie akékoľvek externé zariadenie. V MikroTik RouterOS ide o akciu endpoint-independent-nat.
    • Restricted-Cone NAT (typ 2, Address-Dependent Filtering): Cez vonkajší soket smerovača môže posielať pakety na lokálne zariadenie len to externé zariadenie, na ktorého adresu bol už odoslaný paket z tohoto soketu.
    • Port-Restricted-Cone NAT (typ 3, Address and Port-Dependent Filtering): Cez vonkajší soket smerovača môže posielať pakety na lokálne zariadenie len to externé zariadenie, na ktorého soket bol už odoslaný paket z tohoto soketu - toto sa deje automaticky v prípade PAT. V MikroTik RouterOS ide o akcie masqueradesrcnat.

  2. Mapovanie závislé od cieľa (Address- and Port-Dependent Mapping): Keď sa vytvoria viaceré spojenia z jedného vnútorného soketu lokálneho zariadenia na rôzne cieľové adresy v internete, každé jedno spojenie dostane pridelený iný vonkajší port na smerovači. Toto spôsobuje výrazné plytvanie portov na hraničnom smerovači a znemožňuje P2P spojenia cez STUN.
    • Symmetric NAT (typ 4, Address and Port-Dependent Filtering): Na rozdiel od predošlého typu 3 sa nebude používať ten istý vonkajší port, ak sa cieľ líši. Inak tiež platí, že cez vonkajší soket smerovača môže posielať pakety na lokálne zariadenie len to externé zariadenie, na ktorého soket bol už odoslaný paket z tohoto soketu.

Zjednodušené zhrnutie STUN:

  • Typ 1 (Full): Úplne otvorený (všetci môžu dnu cez vytvorenú dieru).

  • Typ 2 (Address): Len známe adresy môžu dnu.

  • Typ 3 (Port): Len známe adresy a porty môžu dnu.

  • Typ 4 (Symmetric): Každý cieľ má vlastný „kľúč“ (port), nikto iný ho nesmie použiť.

Aktuálny typ NAT je možné zistiť napríklad cez službu Check My NAT.