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.