Jak działa NAT / PortForwarding / TCP / IP?


12

Niedawno przeczytałem artykuł zatytułowany jak działa NAT . Niektóre rzeczy wciąż pozostają dla mnie niejasne. Byłbym wdzięczny, gdyby ktoś mógł wyjaśnić.

Poniżej znajduje się najbardziej myląca część artykułu dotycząca DynamicNAT:

Komputer w domenie pośredniczącej próbuje połączyć się z komputerem spoza sieci, takim jak serwer sieci Web.

Router odbiera pakiet z komputera w domenie pośredniczącej. Router zapisuje niemożliwy do routingu adres IP komputera w tabeli translacji adresów. Router zastępuje niemożliwy do routingu adres IP komputera wysyłającego pierwszym dostępnym adresem IP z zakresu unikalnych adresów IP. W tabeli translacji znajduje się teraz mapowanie nierutowalnego adresu IP komputera dopasowanego do jednego z unikalnych adresów IP.

Gdy pakiet wraca z komputera docelowego, router sprawdza adres docelowy w pakiecie. Następnie przegląda tabelę translacji adresów, aby zobaczyć, do którego komputera w domenie kodu pośredniczącego należy pakiet.

1) Skąd NAT wie, że pakiet „wraca” do komputera docelowego?

2) Co zrobić, jeśli inne komputery w sieci LAN są podłączone do tego samego serwera? Skąd NAT wie, który pakiet powinien „wrócić”, dokąd?

3) Czy modyfikacja nagłówka pakietu pozwala na przeprowadzenie ataku internetowego, w którym „źródłowy adres IP” zostaje zastąpiony adresem IP ofiary, a serwer odpowiadający zalej ofiarę niechcianymi pakietami?

Myślę, że musiałoby być zaangażowanych wielu napastników ...

4) Czy StaticNAT jest równoważne z PortForwarding wszystkich portów?

Odpowiedzi:


11

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:

  1. Spowoduje to zmianę źródła do IP routera jest unikatowy publicznego IP AND
  2. 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.


2
Kilka uwag: Po pierwsze używasz terminu „NAT”, aby odnieść się do tego, co RFC nazywają „Basic NAT” i „PAT”, aby odnieść się do tego, co RFC nazywają „NAPT”. RFC zazwyczaj używają „NAT” jako terminu obejmującego zarówno „Podstawowy NAT”, jak i „NAPT”. Po drugie, nawet „Basic NAT” musi zmodyfikować nagłówek TCP / UDP, ponieważ nagłówek TCP / UDP zawiera sumę kontrolną obejmującą adresy IP.
— Peter Green

@PeterGreen, ale czy sedno odpowiedzi jest dokładne?
— lpydawa

6

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:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

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.


2) Co zrobić, jeśli inne komputery w sieci LAN są podłączone do tego samego serwera? Skąd NAT wie, który pakiet powinien „wrócić”, dokąd?
— user2449761

1 i 2 to ta sama odpowiedź: ponieważ śledzi połączenia / tłumaczenia. Dwa hosty wewnętrzne nie będą mapowane na ten sam adres zewnętrzny; więc każdy pakiet docierający do zmapowanego adresu zewnętrznego automatycznie ma tylko jeden cel wewnętrzny. Jeśli masz tylko jeden adres zewnętrzny (publiczny), to nie jest to „NAT”, ale PAT (tłumaczenie portu)
— Ricky Beam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.