Menu Zavrieť

4.6. NAT: Network address translation

Úlohou NAT routra je sprostredkovať komunikáciu staníc v privátnej neverejnej sieti s verejnou sieťou. NAT je bežnou doplnkovou službou aj lacných routrov pre domácnosti. Typická situácia je, že provider pridelí pre domácnosť alebo malú firmu jedinú IPv4 adresu, ale tí chcú pripojiť na internet viac staníc ako jednu. Keďže každé zariadenie by malo mať pridelenú vlastnú IP adresu, tak bez NAT routra by sme si museli žiadať od providera viac IP adries (a obvykle aj za vyššiu cenu).

Takže si predstavme, že nám provider pridelil verejnú IP adresu 138.76.29.7, ale my chceme pripojiť do internetu 3 počítače. Vieme, že každé rozhranie routra musí mať tiež svoju IP adresu. Nastavíme teda pre rozhranie routra označené WAN (wide area network) IP adresu 138.76.29.7. Na LAN (local area network) rozhraní routra nastavíme nejakú neverejnú IP adresu určenú pre privátne siete (pozri predchádzajúcu prednášku, kapitolu „Špeciálne IP adresy“) napríklad 10.0.0.4/8 a počítačom v tejto našej nastavíme postupne IP adresy 10.0.0.1/8, 10.0.0.2/8 a 10.0.0.3/8 (toto nastavenie môžeme vykonať alternatívne aj v DHCP serveri a nechať počítače, nech si tieto IP adresy nastavujú dynamicky).

Keby sme použili obyčajný router bez NAT, tak by nebol problém odoslať pakety z tejto siete, keďže routre sa riadia iba cieľovými IP adresami, ale problém by bol nejaké pakety prijať. Predstavme si, že chceme z počítača s IP adresou 10.0.0.1 získať webovú stránku z webového servera na adrese 128.119.40.186. Pri pokuse o vytvorenie TCP spojenia dostane tento server paket s cieľovou IP adresou 128.119.40.186 a portom 80 (známy port pre HTTP). Zdrojová IP adresa by však bola 10.0.0.1. Keďže takáto adresa sa vo verejnom internete nenachádza, SYNACK segment z tohto servera by si nikdy nenašiel cestu k nášmu počítaču.

NAT router ukrýva za seba celú privátnu sieť tak, že sa z internetu nejaví ako router, ale ako obyčajný počítač. Ľubovoľný paket z ľubovoľného počítača v privátnej sieti, ktorý je preposlaný cez NAT router do internetu, je zmenený tak, aby to vyzeralo, že pôvodný odosielateľ je WAN rozhranie NAT routra. Keďže WAN rozhranie NAT routra má verejnú IP adresu, pakety určené pre túto IP adresu prídu správne k tomuto rozhraniu. Úlohou pre NAT router je teraz zmeniť pre pakety prichádzajúce z internetu cieľovú adresu tak, aby to bola správna IP adresa a správny port počítača v privátnej LAN sieti (teda v našom príklade adresa 10.0.0.1).

Celý proces je pekne viditeľný na nasledujúcom obrázku.

  1. Stanica v privátnej sieti s neverejnou IP adresou 10.0.0.1 vyšle paket s cieľovou adresou 128.119.40.186 a cieľovým portom 80. Táto stanica očakáva odpoveď na porte 3345, nastaví teda zdrojový port 3345 a zdrojovú IP adresu 10.0.0.1. Keďže adresa 128.119.40.186 nie je v lokálnej sieti, paket je poslaný cez default router 10.0.0.4.
  2. NAT router vezme tento paket, otvorí jeden z voľných portov pre WAN rozhranie, na našom obrázku port 5001, a zapíše si do prekladovej tabuľky, že ak príde na WAN rozhranie paket s cieľovou IP adresou 138.76.29.7 a cieľovým portom 5001, má poslať tento paket počítaču 10.0.0.1 na port 3345. Následne zmení paket tak, že zmení zdrojovú IP adresu na adresu WAN rozhrania a zdrojový port na 5001 a odošle paket smerom k cieľu 128.119.40.186.
  3. Keď príde na WAN rozhranie paket s cieľovou IP adresou 138.76.29.7 a cieľovým portom 5001, zmení cieľovú IP adresu na 10.0.0.1 a cieľový port na 3345 a odošle tento paket do privátnej siete.
  4. Z pohľadu počítača 10.0.0.1 to ani nevyzerá tak, že má neverejnú IP adresu – ani nevie, že je za NAT routrom.

Počet počítačov v privátnej sieti síce nie je limitovaný, ale keďže čísla portov môžu byť z rozsahu 0 až 65535, tak maximálne môže byť súčasne aktívnych 65535 spojení. Keďže bežný počítač máva aktívnych súčasne iba pár spojení (alebo pár stovák, ak práve intenzívne používa P2P softvéry), dá sa predpokladať, že okolo 100 počítačov v privátnej sieti by určite nemalo mať problém komfortne komunikovať s internetom.

Výhodou NATu je to, že aj v čase, keď začína byť IPv4 adries nedostatok, stále sa dá pripájať mnoho nových zariadení. Nevýhodou je to, že ak chcete otvoriť na niektorom z počítačov serverovú aplikáciu, žiadni noví klienti sa na vás nevedia priamo napojiť, lebo nemáte verejnú IP adresu. Ide o takzvaný NAT traversal problém. Týmto problémom dosť trpia P2P softvéry, ktoré predpokladajú, že každý peer je súčasne klient, ktorý sťahuje súbory, aj server, ktorý zdieľa a poskytuje stiahnuté súbory.

NAT traversal problém sa dá vyriešiť niekoľkými spôsobmi:

  • Ručné nastavenie NAT prekladovej tabuľky umožňuje špecifikovať, kam majú byť preposielané pakety pre určité porty. Dá sa napríklad nastaviť aj to, že ľubovoľné nové pripojenia majú byť preposielané k danému počítaču. Ručné nastavenie je trochu nepohodlné, ale vcelku efektívne, ak chceme nejaký server prevádzkovať dlhodobo.
  • Mnohé NAT routre poskytujú na svojom LAN rozhraní službu IGD (Internet gateway device), označovanú aj ako UPNP (universal plug and play), ktorá umožňuje stanici v lokálnej sieti zistiť verejnú IP adresu NAT routra na WAN rozhraní, zistiť aktuálny stav prekladovej tabuľky a hlavne pridávať a odoberať riadky v prekladovej tabuľke. Tým pádom, ak chceme aktuálne počúvať na nejakom svojom porte môžeme si nastaviť prekladovú tabuľku na NAT routri a navyše informovať okolie o tom, na akej IP adrese a porte bude NAT router počúvať (a odtiaľ preposielať na našu stanicu a náš port)
  • Tretie riešenie je využiť nejaký počítač s verejnou IP adresou a všetku komunikáciu daného spojenia preposielať cez neho. Toto riešenie využíva napríklad Skype. Ak je volaný účastník za NAT routrom, vyberie sa stanica s verejnou IP adresou, na ktorú sa napojí volaný aj volajúci a celý rozhovor je potom preposielaný cez túto stanicu.