Istnieje ogólne nieporozumienie między NAT ( translacją adresów sieciowych) a PAT (translacją adresów portów), czego najczęściej używamy w naszych domowych routerach.
NAT
Załóżmy, że mamy sieć o następującej topologii:
Private_Network <-------> Router <-------> The_Internet
Interfejs routera podłączonego do Private_Network ma prywatny adres IP , tzn . Taki, który nie jest unikalny w The_Internet . Z drugiej strony, w przypadku NAT , router ma wiele interfejsów podłączonych do The_Internet . Każdy interfejs ma unikalny adres IP w The_Internet . Załóżmy teraz, że Host_A i Host_B znajdują się w sieci prywatnej i obaj chcą jednocześnie uzyskać dostęp do witryny WWW_X w Internecie . Adresy IP i porty Host_Apakiet będzie:
Źródło IP: Host_A 's prywatne IP
Source Port: port na Host_A
Destination IP: Website_X ' s publiczny / unikalny IP
Destination Port: port A, jeżeli Website_X serwera jest słuchanie
i w ten sam sposób dla pakietu pochodzącego z Host_B .
Jeśli źródłowy adres IP pozostanie niezmieniony, Website_X odpowie na adres IP, który jest prywatny, tj. Nie jest unikalny, a zatem pakiet nigdy nie będzie w stanie znaleźć swojej drogi powrotnej. Aby rozwiązać ten problem, router sprawdza, czy jeden z jego unikalnych adresów IP połączonych z Internetem nie jest używany. W takim przypadku wykonuje następujące mapowanie:
Host_A „s prywatne IP ======= Router's_unique_IP_K
a teraz pakiet, który zaczął się od Host_A przechodząc do Website_X i teraz opuszcza interfejs routera podłączony do The_Internet będzie miał postać:
Źródłowy adres IP: Router's_unique_IP_K
Port źródłowy: Port na Host_A
Docelowy adres IP: Publiczny / unikalny port docelowy IP witryny_X
: Port, na którym nasłuchuje serwer Website_X
W ten sposób możesz zrozumieć, że istnieje prywatne powiązanie od prywatnych adresów IP do publicznych adresów IP. Dlatego gdy pakiet przychodzi z witryny Website_X do routera , to powiązanie jest sprawdzane, a docelowy adres IP jest ponownie zmieniany na prywatny i dostarczany z powodzeniem do właściwego hosta.
Jak widać, ta metoda jest dość prosta, ale ma jedną wielką wadę: każdy prywatny host musi mieć zarezerwowany unikalny adres IP, co jest kosztowne, dlatego wybieramy mniej unikalnych adresów IP niż hosty w sieci prywatnej. Dlatego jeśli wszystkie prywatne hosty próbują uzyskać dostęp do The_Internet w tym samym czasie, tylko ich podzbiór, równy liczbie dostępnych publicznych adresów IP, które routerma, będzie miał dostęp, a reszta zostanie odrzucona.
Aby temu przeciwdziałać, stworzyliśmy PAT .
PAT
PAT jest tym, czego używa zdecydowana większość naszych domowych routerów. Podstawowym ograniczeniem jest to, że router ma jeden unikalny adres IP, z którym łączy się z The_Internet , ale nadal chcemy umożliwić wielu hostom z sieci prywatnej dostęp do The_Internet w tym samym czasie.
Sposób, w jaki to robimy, jest „podobny” do sposobu, w jaki NAT robi to z kluczową różnicą: zamiast routera przechowującego pulę adresów IP, przechowuje pulę numerów portów. Dokładniej, pakiet przybyciu na routerze z Host_A w Private_Network przeznaczone do Website_X wInternet będzie miał następujący format:
Źródło IP: Host_A 's prywatne IP
Source Port: port na Host_A
Destination IP: Website_X ' s publiczny / unikalny IP
Destination Port: port A, jeżeli Website_X serwera jest słuchanie
Teraz router wykona dwa zadania:
- Spowoduje to zmianę źródła do IP routera jest unikatowy publicznego IP AND
- Zmieni port źródłowy na port z puli utrzymywanej przez router i nieużywanej, np. Port_Z
a teraz pakiet, który zaczął się od Host_A przechodząc do Website_X i teraz opuszcza interfejs routera podłączony do The_Internet będzie miał postać:
Źródłowy adres IP: Router's_unique_IP_K
Port źródłowy: Port_Z
Docelowy adres IP: Publiczny / unikalny docelowy adres IP strony WWW
: Port, na którym nasłuchuje serwer Website_X
a router zachowa następujące mapowanie:
Prywatny adres IP Host_A ORAZ port na Host_A ======= Port_Z
Dlaczego to działa?
Teraz, gdy pakiet wraca, router po prostu sprawdza docelowy numer portu i zmienia docelowy adres IP oraz docelowy numer portu zgodnie z wcześniej wspomnianym mapowaniem i pakiet zostaje pomyślnie dostarczony.
Co się stanie, jeśli uruchomię wiele aplikacji na tym samym hoście?
Różne aplikacje będą z definicji miały różne porty, dlatego będą mapowane na inny port niż router .
Co jeśli wielu hostów próbuje uzyskać dostęp do The_Internet w tym samym czasie i wszyscy korzystają z tej samej aplikacji?
Różne hosty będą z definicji miały różne prywatne adresy IP, dlatego będą mapowane na inny port niż router .
PAT niebezpiecznie równoważy się w szarej przestrzeni między warstwami. Numery portów są częścią protokołu transportowego, a routery mogą działać do protokołu internetowego. Technicznie rzecz biorąc, jest to coś, co nie jest dozwolone w protokołach. Dlatego istnieją, przynajmniej teoretycznie, potencjalne zagrożenia: pula portów jest ograniczona. Dlatego jeśli moja prywatna sieć składa się z 1000 hostów i na każdym z nich działa port_pool / 10 aplikacji, w tabeli mapowania na routerze zabraknie dostępnych wpisów, a dostęp do aplikacji będzie zabroniony.
Ta odpowiedź znacznie przekroczyła moją zamierzoną długość, ale mam nadzieję, że była pomocna.
Router wie, gdzie należą pakiety, ponieważ
The router saves ... an address translation table.
zapamiętuje wykonane przez siebie tłumaczenia adresów wewnętrznych. W związku z tym jeden adres wewnętrzny jest równy jednemu adresowi zewnętrznemu, a miejsce docelowe poza Internetem nie ma znaczenia. To oczywiście ignoruje zaporę ogniową obecną praktycznie w każdym routerze NAT, który śledzi pełne połączenia:NAT może zmienić dowolną kombinację adresu IP i / lub portu.
# 3 to zupełnie inny temat: fałszowanie
# 4 „Statyczny NAT” lub „1-do-1” to mapa tylko adresowa. Zatem port (a nawet protokół: tcp, udp, gre itp.) Nie ma znaczenia.
źródło