Translacja adresów sieciowych — Network address translation

Translacja adresów sieciowych między siecią prywatną a Internetem

Translacja adresów sieciowych ( NAT ) to metoda mapowania przestrzeni adresów IP na inną poprzez modyfikację informacji o adresie sieci w nagłówku IP pakietów podczas ich przesyłania przez urządzenie routingu ruchu . Technika ta była pierwotnie używana w celu uniknięcia konieczności przypisywania nowego adresu każdemu hostowi, gdy sieć została przeniesiona lub gdy zastąpiono dostawcę usług internetowych upstream , ale nie można było kierować przestrzeni adresowej sieci. Stał się popularnym i niezbędnym narzędziem do ochrony globalnej przestrzeni adresowej w obliczu wyczerpywania się adresów IPv4 . Jeden routowany przez Internet adres IP bramy NAT może być używany dla całej sieci prywatnej .

Ponieważ translacja adresów sieciowych modyfikuje informacje o adresie IP w pakietach, implementacje NAT mogą różnić się swoim specyficznym zachowaniem w różnych przypadkach adresowania i ich wpływem na ruch sieciowy. Specyfika zachowania NAT nie jest powszechnie dokumentowana przez dostawców sprzętu zawierającego implementacje NAT.

Podstawowy NAT

Najprostszy typ NAT zapewnia translację jeden do jednego adresów IP. RFC 2663 określa ten typ NAT jako podstawowy NAT ; jest również nazywany translacją NAT jeden-do-jednego . W tego typu translacji NAT zmieniane są tylko adresy IP, suma kontrolna nagłówka IP i wszelkie sumy kontrolne wyższego poziomu zawierające adres IP. Podstawowy NAT może być używany do łączenia dwóch sieci IP, które mają niezgodne adresowanie.

NAT jeden-do-wielu

Mapowanie adresów sieciowych

Większość translatorów adresów sieciowych mapuje wiele prywatnych hostów na jeden publicznie ujawniony adres IP. W typowej konfiguracji sieć lokalna korzysta z jednej z wyznaczonych prywatnych podsieci adresów IP (RFC 1918). Router w tej sieci ma prywatny adres tej przestrzeni adresowej. Router jest również połączony z Internetem za pomocą adresu publicznego , zwykle przydzielanego przez dostawcę usług internetowych . Gdy ruch przechodzi z sieci lokalnej do Internetu, adres źródłowy w każdym pakiecie jest tłumaczony na bieżąco z adresu prywatnego na adres publiczny. Router śledzi podstawowe dane o każdym aktywnym połączeniu (w szczególności adres docelowy i port ). Gdy odpowiedź wraca do routera, wykorzystuje dane śledzenia połączenia, które zostały zapisane w fazie wychodzącej, w celu określenia prywatnego adresu w sieci wewnętrznej, do którego ma zostać przekazana odpowiedź.

Wszystkie pakiety IP mają źródłowy adres IP i docelowy adres IP. Zazwyczaj pakiety przechodzące z sieci prywatnej do sieci publicznej będą miały zmodyfikowany adres źródłowy, podczas gdy pakiety przechodzące z sieci publicznej z powrotem do sieci prywatnej będą miały zmodyfikowany adres docelowy. Aby uniknąć niejednoznaczności w tłumaczeniu odpowiedzi, wymagane są dalsze modyfikacje pakietów. Ogromna większość ruchu internetowego korzysta z protokołu TCP ( Transmission Control Protocol ) lub protokołu UDP ( User Datagram Protocol ). W przypadku tych protokołów numery portów są zmieniane w taki sposób, że kombinacja adresu IP (w nagłówku IP ) i numeru portu (w nagłówku warstwy transportowej ) w zwracanym pakiecie może być jednoznacznie zmapowana do odpowiedniego miejsca docelowego sieci prywatnej. RFC 2663 używa terminu translacji adresów sieciowych i portów (NAPT) dla tego typu translacji NAT. Inne nazwy obejmują translację adresów portów (PAT), maskowanie IP , przeciążenie NAT i NAT typu wiele-do-jednego . Jest to najpopularniejszy typ NAT i stał się synonimem terminu „NAT” w powszechnym użyciu.

Ten sposób umożliwia komunikację przez router tylko wtedy, gdy konwersacja rozpoczyna się w sieci prywatnej, ponieważ początkowa transmisja inicjująca ustanawia wymagane informacje w tablicach translacji. Przeglądarka internetowa w sieci maskaradowanej może na przykład przeglądać zewnętrzną witrynę internetową, ale zewnętrzna przeglądarka internetowa nie może przeglądać witryny internetowej hostowanej w sieci maskaradowej. Protokoły nieoparte na TCP i UDP wymagają innych technik translacji.

Jedną z dodatkowych korzyści NAT jeden-do-wielu jest to, że jest to praktyczne rozwiązanie problemu wyczerpania adresów IPv4 . Nawet duże sieci można podłączyć do Internetu za pomocą jednego publicznego adresu IP.

Metody tłumaczenia

Translację adresów sieciowych i portów można zaimplementować na kilka sposobów. Niektóre aplikacje korzystające z informacji o adresie IP mogą wymagać określenia zewnętrznego adresu translatora adresów sieciowych. Jest to adres wykrywany przez partnerów komunikacyjnych w sieci zewnętrznej. Ponadto może być konieczne zbadanie i sklasyfikowanie używanego typu mapowania, na przykład, gdy pożądane jest utworzenie bezpośredniej ścieżki komunikacyjnej między dwoma klientami, z których obaj znajdują się za oddzielnymi bramami NAT.

W tym celu, RFC 3489 określony protokół o nazwie proste przeglądanie UDP przez NAT ( STUN ) w roku 2003. Jest klasyfikowany jako NAT implementacje pełnym stożkiem NAT , (adres) ograniczonego cone NAT , port-cone NAT ograniczony lub symetryczny NAT , a zaproponował odpowiednio metodologię testowania urządzenia. Jednak od tego czasu procedury te zostały wycofane ze stanu standardów, ponieważ metody są niewystarczające do prawidłowej oceny wielu urządzeń. RFC 5389 standaryzuje nowe metody w 2008 r., a akronim STUN reprezentuje teraz nowy tytuł specyfikacji: Session Traversal Utilities for NAT .

Klasyfikacje implementacji NAT
Pełnostożkowa translacja NAT , znana również jako NAT jeden-do-jednego
  • Po zmapowaniu adresu wewnętrznego (iAddr:iPort) na adres zewnętrzny (eAddr:ePort) wszystkie pakiety z iAddr:iPort są wysyłane przez eAddr:ePort.
  • Każdy zewnętrzny host może wysyłać pakiety do iAddr:iPort, wysyłając pakiety do eAddr:ePort.
Pełny stożek NAT.svg
(Adres)-restricted-cone NAT
  • Po zmapowaniu adresu wewnętrznego (iAddr:iPort) na adres zewnętrzny (eAddr:ePort) wszystkie pakiety z iAddr:iPort są wysyłane przez eAddr:ePort.
  • Zewnętrzny host ( hAddr:any ) może wysyłać pakiety do iAddr:iPort, wysyłając je do eAddr:ePort tylko wtedy, gdy iAddr:iPort wcześniej wysłał pakiet do hAddr: any . „Dowolny” oznacza, że ​​numer portu nie ma znaczenia.
Ograniczony stożek NAT.svg
Stożkowy NAT z ograniczeniami portów Podobnie jak w przypadku stożkowego NAT z ograniczeniami adresów, ale ograniczenie obejmuje numery portów.
  • Po zmapowaniu adresu wewnętrznego (iAddr:iPort) na adres zewnętrzny (eAddr:ePort) wszystkie pakiety z iAddr:iPort są wysyłane przez eAddr:ePort.
  • Zewnętrzny host ( hAddr:hPort ) może wysyłać pakiety do iAddr:iPort, wysyłając je do eAddr:ePort tylko wtedy, gdy iAddr:iPort wcześniej wysłał pakiet do hAddr:hPort.
Stożek z ograniczeniami portów NAT.svg
Symetryczny NAT
  • Każde żądanie z tego samego wewnętrznego adresu IP i portu do określonego docelowego adresu IP i portu jest mapowane na unikalny zewnętrzny źródłowy adres IP i port; jeśli ten sam host wewnętrzny wysyła pakiet nawet z tym samym adresem źródłowym i portem, ale do innego miejsca docelowego, używane jest inne mapowanie.
  • Tylko host zewnętrzny, który odbiera pakiet od hosta wewnętrznego, może odesłać pakiet.
Symetryczny NAT.svg

Wiele implementacji NAT łączy te typy, dlatego lepiej jest odnosić się do konkretnego zachowania NAT, zamiast używać terminologii Stożek/Symetria. RFC 4787 próbuje złagodzić zamieszanie, wprowadzając ustandaryzowaną terminologię dla obserwowanych zachowań. W przypadku pierwszego punktu w każdym wierszu powyższej tabeli, RFC scharakteryzuje translację NAT pełnego stożka, stożka z ograniczeniami i ograniczenia portów jako posiadające mapowanie niezależne od punktu końcowego , podczas gdy scharakteryzuje symetryczny NAT jako posiadający adres- i mapowanie zależne od portu . W przypadku drugiego punktu w każdym wierszu powyższej tabeli, RFC 4787 oznaczyłby również pełnostożkowy NAT jako posiadający filtrowanie niezależne od punktu końcowego , NAT z ograniczonym stożkiem jako posiadający filtrowanie zależne od adresu , a z ograniczeniami portów jako posiadający adres i filtrowanie zależne od portu oraz symetryczny NAT, które mają albo filtrowanie zależne od adresu albo filtrowanie zależne od adresu i portu . Inne klasyfikacje zachowania NAT wymienione w dokumencie RFC obejmują: czy zachowują porty, kiedy i w jaki sposób mapowania są odświeżane, czy zewnętrzne mapowania mogą być używane przez hosty wewnętrzne (tj. ich spinanie włosów ) oraz poziom determinizmu wykazywany przez NAT podczas stosowania tych wszystkich zasady. W szczególności większość translacji NAT łączy symetryczny NAT dla połączeń wychodzących ze statycznym mapowaniem portów , gdzie przychodzące pakiety adresowane do zewnętrznego adresu i portu są przekierowywane na określony wewnętrzny adres i port.

Rodzaj przechodzenia NAT i NAT, rola zachowania portów dla TCP

NAT problem powstaje, gdy rówieśnicy za różne NAT starają się komunikować. Jednym ze sposobów rozwiązania tego problemu jest użycie przekierowania portów . Innym sposobem jest użycie różnych technik przechodzenia NAT. Najpopularniejszą techniką przechodzenia przez TCP NAT jest wykrawanie otworów TCP .

Dziurkowanie TCP wymaga, aby NAT podążał za projektem zachowania portów dla TCP. Dla danej wychodzącej komunikacji TCP po obu stronach NAT używane są te same numery portów. Zachowanie portów NAT dla wychodzących połączeń TCP ma kluczowe znaczenie dla przechodzenia TCP NAT, ponieważ w TCP jeden port może być używany tylko do jednej komunikacji na raz, więc programy wiążą różne gniazda TCP z portami efemerycznymi dla każdej komunikacji TCP, uniemożliwiając przewidywanie portów NAT dla TCP.

Z drugiej strony, w przypadku protokołu UDP translacja NAT nie wymaga zachowywania portów. Rzeczywiście, wiele komunikacji UDP (każda z odrębnym punktem końcowym ) może odbywać się na tym samym porcie źródłowym, a aplikacje zwykle ponownie wykorzystują to samo gniazdo UDP do wysyłania pakietów do różnych hostów. To sprawia, że ​​przewidywanie portów jest proste, ponieważ jest to ten sam port źródłowy dla każdego pakietu.

Ponadto zachowanie portów w NAT dla TCP pozwala protokołom P2P oferować mniejszą złożoność i mniejsze opóźnienia, ponieważ nie ma potrzeby korzystania z usług innych firm (takich jak STUN) w celu wykrycia portu NAT, ponieważ sama aplikacja już zna port NAT.

Jeśli jednak dwa hosty wewnętrzne próbują komunikować się z tym samym hostem zewnętrznym przy użyciu tego samego numeru portu, NAT może próbować użyć innego zewnętrznego adresu IP dla drugiego połączenia lub może wymagać zrezygnowania z zachowania portu i ponownego zamapowania portu.

W 2006 roku około 70% klientów w sieciach P2P korzystało z jakiejś formy NAT.

Realizacja

Nawiązanie dwustronnej komunikacji

W dwukierunkowym NAT sesję można nawiązać zarówno ze świata wewnętrznego, jak i zewnętrznego.

Każdy pakiet TCP i UDP zawiera numer portu źródłowego i numer portu docelowego. Każdy z tych pakietów jest zamknięty w pakiecie IP, którego nagłówek IP zawiera źródłowy adres IP i docelowy adres IP. Potrójny adres IP/protokół/numer portu definiuje skojarzenie z gniazdem sieciowym .

W przypadku usług dostępnych publicznie, takich jak serwery WWW i pocztowe, ważny jest numer portu. Na przykład port 80 łączy się przez gniazdo z oprogramowaniem serwera WWW , a port 25 z demonem SMTP serwera poczty . Ważny jest również adres IP serwera publicznego, podobny w globalnej unikatowości do adresu pocztowego lub numeru telefonu. Zarówno adres IP, jak i numer portu muszą być poprawnie znane wszystkim hostom, które chcą pomyślnie komunikować się.

Prywatne adresy IP opisane w RFC 1918 są dostępne tylko w sieciach prywatnych, które nie są bezpośrednio połączone z Internetem. Porty są punktami końcowymi komunikacji unikalnymi dla tego hosta, więc połączenie przez urządzenie NAT jest utrzymywane przez połączone mapowanie portu i adresu IP. Prywatny adres wewnątrz NAT jest mapowany na zewnętrzny adres publiczny. Translacja adresów portów (PAT) rozwiązuje konflikty, które powstają, gdy wiele hostów używa tego samego numeru portu źródłowego do jednoczesnego nawiązywania różnych połączeń zewnętrznych.

Analogia rozszerzenia numeru telefonu

Urządzenie NAT jest podobne do systemu telefonicznego w biurze, który ma jeden publiczny numer telefonu i wiele numerów wewnętrznych. Wszystkie połączenia wychodzące z biura wydają się pochodzić z tego samego numeru telefonu. Jednak połączenie przychodzące, które nie określa numeru wewnętrznego, nie może być automatycznie przekazane do osoby w biurze. W tym scenariuszu biuro to prywatna sieć LAN, główny numer telefonu to publiczny adres IP, a poszczególne rozszerzenia to unikalne numery portów.

Proces tłumaczenia

W przypadku NAT cała komunikacja wysyłana do hostów zewnętrznych w rzeczywistości zawiera zewnętrzny adres IP i informacje o porcie urządzenia NAT zamiast adresów IP hostów wewnętrznych lub numerów portów. NAT tłumaczy tylko adresy IP i porty swoich hostów wewnętrznych, ukrywając prawdziwy punkt końcowy hosta wewnętrznego w sieci prywatnej.

Gdy komputer w sieci prywatnej (wewnętrznej) wysyła pakiet IP do sieci zewnętrznej, urządzenie NAT zastępuje wewnętrzny źródłowy adres IP w nagłówku pakietu zewnętrznym adresem IP urządzenia NAT. PAT może następnie przypisać do połączenia numer portu z puli dostępnych portów, wstawiając ten numer portu w polu portu źródłowego. Pakiet jest następnie przekazywany do sieci zewnętrznej. Urządzenie NAT następnie dokonuje wpisu w tablicy translacji zawierającej wewnętrzny adres IP, oryginalny port źródłowy i przetłumaczony port źródłowy. Kolejne pakiety z tego samego wewnętrznego źródłowego adresu IP i numeru portu są tłumaczone na ten sam zewnętrzny źródłowy adres IP i numer portu. Komputer odbierający pakiet, który przeszedł translację NAT, nawiązuje połączenie z portem i adresem IP określonym w zmienionym pakiecie, nieświadomy faktu, że podany adres jest tłumaczony.

Po odebraniu pakietu z sieci zewnętrznej urządzenie NAT przeszukuje tablicę translacji w oparciu o port docelowy w nagłówku pakietu. Jeśli zostanie znalezione dopasowanie, docelowy adres IP i numer portu są zastępowane wartościami znalezionymi w tabeli, a pakiet jest przekazywany do sieci wewnętrznej. W przeciwnym razie, jeśli numer portu docelowego przychodzącego pakietu nie zostanie znaleziony w tablicy translacji, pakiet zostanie odrzucony lub odrzucony, ponieważ urządzenie PAT nie wie, dokąd go wysłać.

Widoczność działania

Operacja NAT jest zazwyczaj niewidoczna zarówno dla hosta wewnętrznego, jak i zewnętrznego. Urządzenie NAT może działać jako domyślna brama dla hosta wewnętrznego, który zazwyczaj zna prawdziwy adres IP i port TCP lub UDP hosta zewnętrznego. Jednak host zewnętrzny zna tylko publiczny adres IP urządzenia NAT i konkretny port używany do komunikacji w imieniu określonego hosta wewnętrznego.

Aplikacje

Rozgromienie
Translacji adresów sieciowych można użyć do ograniczenia nakładania się adresów IP. Nakładanie się adresów występuje, gdy hosty w różnych sieciach z tą samą przestrzenią adresów IP próbują dotrzeć do tego samego hosta docelowego. Najczęściej jest to błędna konfiguracja i może wynikać z połączenia dwóch sieci lub podsieci, zwłaszcza w przypadku korzystania z adresowania sieci prywatnej RFC 1918 . Host docelowy odbiera ruch najwyraźniej przychodzący z tej samej sieci, a routery pośrednie nie mają możliwości określenia, dokąd należy kierować ruch odpowiedzi. Rozwiązaniem jest zmiana numeracji w celu wyeliminowania nakładania się lub translacji adresów sieciowych.
Równoważenie obciążenia
W klient-serwer aplikacji, obciążenie Wciągarki przodu żądań klienta do zestawu komputerów Server do zarządzania obciążenie każdego serwera. Translacji adresów sieciowych można użyć do odwzorowania reprezentatywnego adresu IP klastra serwerów na określone hosty obsługujące żądanie.

Powiązane techniki

IEEE Reverse Address and Port Translation (RAPT lub RAT) umożliwia hostowi, którego rzeczywisty adres IP zmienia się od czasu do czasu, pozostać dostępnym jako serwer za pośrednictwem stałego domowego adresu IP. Implementacja RAPT firmy Cisco polega na przeciążaniu PAT lub NAT i mapowaniu wielu prywatnych adresów IP na jeden publiczny adres IP. Wiele adresów można zmapować na jeden adres, ponieważ każdy adres prywatny jest śledzony przez numer portu. PAT używa unikalnych numerów portów źródłowych w wewnętrznym globalnym adresie IP, aby rozróżnić translacje. PAT próbuje zachować oryginalny port źródłowy. Jeśli ten port źródłowy jest już używany, PAT przypisuje pierwszy dostępny numer portu, zaczynając od początku odpowiedniej grupy portów 0-511, 512-1023 lub 1024-65535. Gdy nie ma więcej dostępnych portów i skonfigurowano więcej niż jeden zewnętrzny adres IP, PAT przechodzi do następnego adresu IP, aby spróbować ponownie przydzielić oryginalny port źródłowy. Ten proces trwa do momentu wyczerpania dostępnych portów i zewnętrznych adresów IP.

Mapowanie adresu i portu to propozycja firmy Cisco, która łączy translację adresu i portu z tunelowaniem pakietów IPv4 przez wewnętrzną sieć IPv6 dostawcy usług internetowych . W efekcie jest to (prawie) bezstanowa alternatywa dla NAT klasy operatorskiej i DS-Lite, która wpycha funkcję translacji adresów /portów IPv4 (a tym samym utrzymanie stanu NAT) całkowicie do istniejącej implementacji NAT sprzętu w siedzibie klienta . W ten sposób unika się NAT444 i problemów ze stanem NAT klasy operatorskiej, a także zapewnia mechanizm przejścia do wdrażania natywnego IPv6 w tym samym czasie przy bardzo niewielkiej dodatkowej złożoności.

Problemy i ograniczenia

Hosty za routerami z obsługą NAT nie mają łączności typu end-to-end i nie mogą uczestniczyć w niektórych protokołach internetowych. Usługi wymagające inicjowania połączeń TCP z sieci zewnętrznej lub korzystające z protokołów bezstanowych, takich jak UDP , mogą zostać zakłócone. O ile router NAT nie podejmie szczególnych wysiłków, aby obsługiwać takie protokoły, przychodzące pakiety nie mogą dotrzeć do miejsca przeznaczenia. Niektóre protokoły mogą uwzględniać jedną instancję NAT między uczestniczącymi hostami ( na przykład FTP w „trybie pasywnym” ), czasami przy pomocy bramy na poziomie aplikacji (patrz poniżej), ale zawodzą, gdy oba systemy są oddzielone od Internetu przez NAT. Użycie NAT również komplikuje protokoły tunelowania, takie jak IPsec, ponieważ NAT modyfikuje wartości w nagłówkach, które zakłócają kontrole integralności wykonywane przez IPsec i inne protokoły tunelowania.

Łączność typu end-to-end jest podstawową zasadą Internetu, wspieraną na przykład przez Internet Architecture Board . Obecne internetowe dokumenty architektoniczne zauważają, że NAT jest pogwałceniem zasady end-to-end , ale NAT odgrywa ważną rolę w starannym projektowaniu. Istnieje znacznie więcej obaw związanych z używaniem NAT IPv6, a wielu architektów IPv6 uważa, że ​​IPv6 miał wyeliminować potrzebę NAT.

Implementacja, która śledzi tylko porty, może zostać szybko wyczerpana przez wewnętrzne aplikacje, które używają wielu jednoczesnych połączeń (takich jak żądanie HTTP dla strony internetowej z wieloma osadzonymi obiektami). Ten problem można złagodzić, śledząc docelowy adres IP oprócz portu (w ten sposób dzieląc pojedynczy port lokalny z wieloma zdalnymi hostami), kosztem złożoności implementacji i zasobów procesora/pamięci urządzenia translacyjnego.

Ponieważ wszystkie adresy wewnętrzne są ukryte za jednym publicznie dostępnym adresem, nie jest możliwe, aby zewnętrzne hosty zainicjowały połączenie z konkretnym hostem wewnętrznym bez specjalnej konfiguracji zapory umożliwiającej przekazywanie połączeń do określonego portu. Aplikacje takie jak VOIP , wideokonferencje i inne aplikacje peer-to-peer muszą korzystać z technik przechodzenia przez NAT .

Fragmentacja i sumy kontrolne

Czysty NAT, działający na samym IP, może, ale nie musi poprawnie analizować protokoły, które są całkowicie związane z informacjami IP, takie jak ICMP , w zależności od tego, czy ładunek jest interpretowany przez hosta wewnątrz czy na zewnątrz translacji. Po przejściu przez stos protokołów, nawet w przypadku tak podstawowych protokołów, jak TCP i UDP , protokoły ulegną zerwaniu, chyba że NAT podejmie działania poza warstwą sieci.

Pakiety IP mają sumę kontrolną w każdym nagłówku pakietu, która zapewnia wykrywanie błędów tylko dla nagłówka. Datagramy IP mogą ulec fragmentacji i konieczne jest, aby NAT ponownie złożył te fragmenty, aby umożliwić poprawne ponowne obliczenie sum kontrolnych wyższego poziomu i prawidłowe śledzenie, które pakiety należą do którego połączenia.

Główne protokoły warstwy transportowej, TCP i UDP, mają sumę kontrolną, która obejmuje wszystkie przenoszone przez nie dane, a także nagłówek TCP lub UDP oraz pseudonagłówek, który zawiera źródłowy i docelowy adres IP pakietu przenoszącego protokół TCP lub Nagłówek UDP. Aby inicjujący NAT pomyślnie przeszedł przez TCP lub UDP, musi ponownie obliczyć sumę kontrolną nagłówka TCP lub UDP na podstawie przetłumaczonych adresów IP, a nie oryginalnych, i umieścić tę sumę kontrolną w nagłówku TCP lub UDP pierwszego pakietu pofragmentowanego zestawu pakietów. Odbierający NAT musi ponownie obliczyć sumę kontrolną IP każdego pakietu, który przekazuje do hosta docelowego, a także rozpoznać i ponownie obliczyć nagłówek TCP lub UDP przy użyciu ponownie przetłumaczonych adresów i pseudonagłówka. To nie jest do końca rozwiązany problem. Jednym z rozwiązań jest ponowne złożenie przez odbierający NAT całego segmentu, a następnie ponowne obliczenie sumy kontrolnej obliczonej dla wszystkich pakietów.

Host inicjujący może przeprowadzić Wykrywanie MTU ścieżki, aby określić rozmiar pakietu, który może być przesłany bez fragmentacji, a następnie ustawić bit nie fragmentacji (DF) w odpowiednim polu nagłówka pakietu. Oczywiście jest to rozwiązanie tylko jednokierunkowe, ponieważ odpowiadający host może wysyłać pakiety o dowolnym rozmiarze, które mogą zostać pofragmentowane przed dotarciem do NAT.

DNAT

Translacja adresów sieci docelowej (DNAT) to technika przezroczystej zmiany docelowego adresu IP pakietu trasy końcowej i wykonywania funkcji odwrotnej dla wszelkich odpowiedzi. Dowolny router znajdujący się między dwoma punktami końcowymi może wykonać tę transformację pakietu.

DNAT jest powszechnie używany do publikowania usługi zlokalizowanej w sieci prywatnej na publicznie dostępnym adresie IP. Takie użycie DNAT jest również nazywane przekierowaniem portów lub DMZ, gdy jest używane na całym serwerze , który staje się narażony na WAN, stając się analogicznym do niebronionej wojskowej strefy zdemilitaryzowanej (DMZ).

SNAT

Znaczenie terminu SNAT różni się w zależności od dostawcy. Wielu dostawców posiada własne definicje SNAT :

  • źródłowy NAT jest wspólnym rozszerzeniem, jako odpowiednik docelowego NAT ( DNAT )
  • stanowy NAT jest używany przez Cisco Systems
  • statyczny NAT jest używany przez WatchGuard
  • bezpieczny NAT jest używany przez F5 Networks i Microsoft (w odniesieniu do ISA Server )

Bezpieczna translacja adresów sieciowych (SNAT) firmy Microsoft jest częścią programu Internet Security and Acceleration Server firmy Microsoft i jest rozszerzeniem sterownika NAT wbudowanego w system Microsoft Windows Server . Zapewnia śledzenie i filtrowanie połączeń dla dodatkowych połączeń sieciowych wymaganych przez protokoły FTP , ICMP , H.323 i PPTP , a także możliwość skonfigurowania przezroczystego serwera proxy HTTP .

Dynamiczna translacja adresów sieciowych

Jak działa dynamiczny NAT.

Dynamiczny NAT, podobnie jak statyczny NAT, nie jest powszechny w mniejszych sieciach, ale można go znaleźć w większych korporacjach o złożonych sieciach. Sposób, w jaki dynamiczny NAT różni się od statycznego NAT, polega na tym, że tam, gdzie statyczny NAT zapewnia mapowanie jeden-do-jednego wewnętrznego na publiczny statyczny adres IP, dynamiczny NAT zwykle używa grupy dostępnych publicznych adresów IP.

Napinanie włosów NAT

NAT hairpinning , znany również jako pętla zwrotna NAT lub odbicie NAT , to funkcja wielu routerów konsumenckich, która umożliwia dostęp do usługi za pośrednictwem publicznego adresu IP z wnętrza sieci lokalnej. Eliminuje to potrzebę używania oddzielnego rozpoznawania nazw domen dla hostów w sieci niż dla sieci publicznej dla witryny internetowej.

Poniżej opisano przykładową sieć:

  • Adres publiczny: 203.0.113.1 . To jest adres interfejsu WAN na routerze.
  • Adres wewnętrzny routera: 192.168.1.1
  • Adres serwera: 192.168.1.2
  • Adres komputera lokalnego: 192.168.1.100

Jeśli pakiet zostanie wysłany na adres publiczny przez komputer o adresie 192.168.1.100 , pakiet zostanie normalnie skierowany do bramy domyślnej (routera), chyba że w tabelach routingu komputera zostanie ustawiona jawna trasa . Router z funkcją pętli zwrotnej NAT wykrywa, że 203.0.113.1 jest adresem jego interfejsu WAN i traktuje pakiet tak, jakby pochodził z tego interfejsu. Określa miejsce docelowe dla tego pakietu na podstawie reguł DNAT (przekierowania portów) dla miejsca docelowego. Jeśli dane zostały wysłane do portu 80 i istnieje reguła DNAT dla portu 80 skierowanego na adres 192.168.1.2 , host pod tym adresem odbiera pakiet.

Jeśli nie jest dostępna żadna odpowiednia reguła DNAT, router odrzuca pakiet. ICMP Destination nieosiągalny odpowiedź może być wysłana. Jeśli jakieś reguły DNAT były obecne, translacja adresów nadal obowiązuje; router nadal przepisuje źródłowy adres IP w pakiecie. Komputer lokalny ( 192.168.1.100 ) wysyła pakiet jako pochodzący z adresu 192.168.1.100 , ale serwer ( 192.168.1.2 ) odbiera go jako pochodzący z adresu 203.0.113.1 . Gdy serwer odpowiada, proces przebiega identycznie jak w przypadku nadawcy zewnętrznego. Dzięki temu możliwa jest dwukierunkowa komunikacja między hostami w sieci LAN za pośrednictwem publicznego adresu IP.

NAT w IPv6

Translacja adresów sieciowych nie jest powszechnie stosowana w protokole IPv6 , ponieważ jednym z celów projektowych protokołu IPv6 jest przywrócenie kompleksowej łączności sieciowej. Pętla zwrotna NAT nie jest powszechnie potrzebna. Chociaż nadal jest to możliwe, duża przestrzeń adresowa IPv6 eliminuje potrzebę zachowania adresów, a każdemu urządzeniu można nadać unikalny, globalnie rutowalny adres. Biorąc to pod uwagę, użycie unikalnych adresów lokalnych w połączeniu z translacją prefiksów sieciowych może osiągnąć podobne wyniki.

Aplikacje, których dotyczy NAT

Niektóre protokoły warstwy aplikacji (takie jak FTP i SIP ) wysyłają jawne adresy sieciowe w swoich danych aplikacji. Na przykład FTP w trybie aktywnym używa oddzielnych połączeń dla ruchu sterującego (polecenia) i dla ruchu danych (zawartość pliku). Podczas żądania transferu plików host wysyłający żądanie identyfikuje odpowiednie połączenie danych za pomocą adresów warstwy sieciowej i warstwy transportowej . Jeśli host wysyłający żądanie znajduje się za prostą zaporą NAT, translacja adresu IP i/lub numeru portu TCP powoduje, że informacje otrzymane przez serwer są nieważne. Protokół inicjowania sesji (SIP) kontroluje wiele połączeń Voice over IP (VoIP) i ma ten sam problem. SIP i SDP mogą używać wielu portów do nawiązywania połączenia i przesyłania strumienia głosu przez RTP . Adresy IP i numery portów są zakodowane w danych ładunku i muszą być znane przed przejściem translacji NAT. Bez specjalnych technik, takich jak STUN , zachowanie NAT jest nieprzewidywalne i komunikacja może się nie powieść.

Oprogramowanie lub sprzęt Application Layer Gateway (ALG) może rozwiązać te problemy. Moduł oprogramowania ALG działający na urządzeniu zapory NAT aktualizuje wszelkie dane ładunku, które zostały unieważnione przez translację adresów. ALG muszą zrozumieć protokół wyższej warstwy, który muszą naprawić, dlatego każdy protokół z tym problemem wymaga osobnego ALG. Na przykład w wielu systemach Linux istnieją moduły jądra zwane modułami śledzenia połączeń, które służą do implementacji ALG. ALG nie działa jednak, jeśli kanał kontrolny jest zaszyfrowany (np. FTPS ).

Innym możliwym rozwiązaniem tego problemu jest użycie technik przechodzenia przez NAT przy użyciu protokołów takich jak STUN lub ICE , lub zastrzeżonych podejść w kontrolerze granic sesji . Przechodzenie przez NAT jest możliwe zarówno w aplikacjach opartych na protokole TCP, jak i UDP, ale technika oparta na UDP jest prostsza, szerzej rozumiana i bardziej kompatybilna ze starszymi translacją NAT. W obu przypadkach protokół wysokiego poziomu musi być zaprojektowany z myślą o przechodzeniu NAT i nie działa niezawodnie w przypadku symetrycznych translacji NAT lub innych słabo zachowujących się starszych translacji NAT.

Inne możliwości to UPnP Internet Gateway Device Protocol , NAT-PMP (NAT Port Mapping Protocol) lub Port Control Protocol (PCP), ale wymagają one, aby urządzenie NAT zaimplementowało ten protokół.

Większość tradycyjnych protokołów klient-serwer (FTP jest głównym wyjątkiem) nie wysyła jednak informacji kontaktowych warstwy 3 i dlatego nie wymaga specjalnego traktowania przez NAT. W rzeczywistości unikanie komplikacji związanych z NAT jest obecnie praktycznie wymogiem przy projektowaniu nowych protokołów wyższych warstw (np. użycie SFTP zamiast FTP).

Translacje NAT mogą również powodować problemy w przypadku stosowania szyfrowania IPsec oraz w przypadkach, gdy za NAT znajduje się wiele urządzeń, takich jak telefony SIP . Telefony, które szyfrują swoją sygnalizację za pomocą protokołu IPsec, enkapsulują informacje o porcie w zaszyfrowanym pakiecie, co oznacza, że ​​urządzenia NA(P)T nie mogą uzyskać dostępu do portu ani go przetłumaczyć. W takich przypadkach urządzenia NA(P)T powracają do prostej operacji NAT. Oznacza to, że cały ruch powracający do NAT jest mapowany na jednego klienta, co powoduje awarię usługi dla więcej niż jednego klienta „za” NAT. Istnieje kilka rozwiązań tego problemu: jednym jest użycie protokołu TLS , który działa na poziomie 4 w modelu odniesienia OSI i dlatego nie maskuje numeru portu; innym jest enkapsulacja IPsec w UDP – to drugie rozwiązanie wybrane przez TISPAN w celu uzyskania bezpiecznego przejścia NAT lub NAT z obsługą „IPsec Passthru” .

Interaktywne ustanawianie łączności to technika przechodzenia przez NAT, która nie opiera się na obsłudze ALG.

Na lukę w protokole DNS ogłoszoną przez Dana Kaminsky'ego 8 lipca 2008 r. pośrednio wpływa mapowanie portów NAT. Aby uniknąć zatruwania pamięci podręcznej DNS , wysoce pożądane jest, aby nie tłumaczyć numerów portów źródłowych UDP wychodzących żądań DNS z serwera DNS za zaporą, która implementuje NAT. Zalecanym obejściem luki w zabezpieczeniach DNS jest sprawienie, aby wszystkie buforujące serwery DNS korzystały z losowych portów źródłowych UDP. Jeśli funkcja NAT usuwa randomizację portów źródłowych UDP, serwer DNS staje się zagrożony.

Przykłady oprogramowania NAT

Zobacz też

Uwagi

Bibliografia

Zewnętrzne linki