Jak pakiet IP ze zdalnego serwera „znajduje” komputer domowy za zaporą NAT?

2

Rozumiem komunikację między komputerem zdalnym, np. serwer WWW i domowy komputer / urządzenie użytkownika mogą wystąpić tylko wtedy, gdy komputer użytkownika zainicjuje komunikację (zakładając, że zapora sieciowa / sieć jest prawidłowo skonfigurowana).

I to

  • typowa sieć domowa składa się z wielu urządzeń o unikalnie wydanych adresach IP, np. 192.168.1.1, 192.168.1.2 itp
  • Ta sama sieć łączy się z Internetem za pomocą jednego „publicznego” adresu IP

Co ciekawe, gdy zdalny serwer wysyła odpowiedź na żądanie komputera domowego, w jaki sposób pakiety odpowiedzi są w stanie jednoznacznie zidentyfikować komputer użytkownika, gdy - i przyjmuję założenie, które może być tutaj błędne - czy zdalny serwer jest w stanie „zobaczyć” ogólny publiczny adres IP sieci?

Michael Coleman
źródło
1
To właśnie robi NAT. TCP jest protokołem połączenia z serwerem, więc jeśli wewnątrz negocjujesz połączenie z zewnętrznym serwerem, zapora pamięta, że ​​połączenie zostało nawiązane. powracające pakiety będą miały odpowiedni numer portu i SYN oraz wartości ACK dla tego konkretnego połączenia w nich, więc router wie, że pakiet jest częścią obserwowanego wcześniej połączenia i przekazuje pakiet do sieci LAN i hosta, który uruchomił połączenie. jak powiedziałeś, zewnętrzny serwer zna tylko połączenie, w tym twoje publiczne IP, numer portu i wartości SYN / ACK.
Frank Thomas
dzięki, więc lokalna zapora pamięta twoje połączenie i czeka na pakiety zawierające poprawne wartości SYN / ACK. Zrozumiałem, że SYN / ACK miało miejsce na „potrójny uścisk dłoni” . czy po uzgadnianiu wartości SYN / ACK nadal istnieją we wszystkich pakietach?
Michael Coleman
tak, i zmieniają się (przewidywalnie) z każdym pakietem, więc TCP może powiedzieć, czy dostał wszystkie pakiety, czy też nie, i czy nie trafił kilka, i musi poprosić o ponowne wysłanie konkretnego. uważaj, aby nie pomylić wartości syn / ack z flagami syn / ack. flagi są włączane lub wyłączane podczas uzgadniania, ale wartości zaczynają się od losowej wartości i stamtąd zwiększają się z każdym wysłanym pakietem. Należy zauważyć, że te wartości są przewidywalne tylko w ramach połączenia. gdyby ktoś na zewnątrz obserwował, a synody były zbyt łatwe do przewidzenia, mogliby porwać połączenie.
Frank Thomas
Spójrz tutaj: pl.wikipedia.org/wiki/… Zauważ, że nie tylko są bity flag syn / ack w 110 i 111 bitach, są także 32-bitowe pola do przechowywania wartości syn i ack. Na pierwszym pakiecie ACK jest wyłączone i nie ma żadnej wartości, ale każdy inny pakiet będzie miał jedną, i będą zwiększać się z każdą odpowiedzią.
Frank Thomas

Odpowiedzi:

3

Adres IP nie jest jedyną rzeczą, którą widzi zdalny serwer. Widzi także Port . Port jest 16-bitową liczbą całkowitą.

Pomyśl o komputerze jako budynku mieszkalnym. Adres IP jest podobny do adresu ulicy. Port określa, które mieszkanie. Tak więc przeglądarka, klient poczty i tak dalej, wszystkie działają na jednym IP należącym do komputera, ale każdy z nich, przez system operacyjny, otrzymuje jeden lub więcej unikalnych portów do użycia.

Gdy komputer lokalny wysyła pakiet do zdalnego serwera, pakiet jest wysyłany z portu na komputerze lokalnym do portu na serwerze zdalnym. Zapora odbiera ten pakiet i wysyła go na serwer zdalny, ale robi to dopiero po zmianie z Adres IP do publicznego adresu IP lokalnej sieci i prawdopodobnie zmienia z port do innego portu wybranego firewalla.

Kiedy publiczny serwer odpowiada, wysyła pakiet z powrotem do publicznego adresu IP i numeru portu, który został podany. Zapora odbiera ten pakiet i wysyła go do dowolnego komputera, który zainicjował połączenie na tym porcie.

Jeśli zapora otrzyma pakiet skierowany do portu, z którego nie korzystał żaden komputer lokalny, zadaniem firewalla jest pozostawienie tego pakietu poza siecią lokalną. Może go po cichu upuścić lub może głośno wysłać wiadomość odrzuconą z powrotem do źródła.

Niektóre wspólne numery portów

Gdy Twoja przeglądarka wysyła żądanie do jakiegoś zdalnego serwera, żądanie to najprawdopodobniej trafia do portu 80 serwera zdalnego.

  • 22 = ssh
  • 25 = smtp (poczta)
  • 53 = DNS (serwer nazw domen)
  • 80 = http
  • 194 = IRC
  • 220 = IMAP
  • 993 = POP (poczta)

Zazwyczaj porty niskiej liczby, do 1024, są zarezerwowane do użytku przez system operacyjny. Porty o wysokim numerze, może od 32000 do 65535, są używane przez aplikacje użytkownika, takie jak przeglądarki.

John1024
źródło
1
ważne jest, aby pamiętać, że zapora NAT nie zezwoli na przywrócenie tylko jednego pakietu z zewnętrznego serwera. pakiet musi być częścią tego samego połączenia, przechodząc do tego samego portu na kliencie LAN, lub w przypadku połączenia bez połączenia protokół taki jak UDP, musi wejść w bardzo wąskim przedziale czasowym. w przeciwnym razie byłoby wiele prawdopodobnych ataków na routery NAT używających wspólnych portów, takich jak 1024, ponieważ większość klientów używa 1024 jako portu pierwszego połączenia, a zatem prawie zawsze znajduje się w stanie, w którym może odebrać pakiet, jeśli NAT na to pozwala, nawet jeśli jego niechciane.
Frank Thomas
dzięki za obie fantastyczne odpowiedzi - Więc gdy lokalna zapora przepisuje port, gdy lokalne pakiety są wysyłane, nakazuje zdalnemu serwerowi odesłanie żądania z powrotem do port x. czy używa bardzo rzadkiego portu, powiedzmy port#33789 jako sposób identyfikacji odpowiedzi serwera, coś w rodzaju, „Ach, dostaję pakiet port#33789 to musi być z xyz_server ” ?
Michael Coleman
cóż, pamiętaj, jeśli nie używasz przekierowania portów, port jest tylko częścią równania, ponieważ odpowiedź musi być częścią ustanowionego połączenia. Jeśli chodzi o numery portów, klienci Windows przypisują pierwszy otwarty port powyżej 1024 podczas inicjowania połączenia z zewnętrzem. Porty serwerów są trudniejsze do przewidzenia. niektóre usługi mogą utrzymywać różne indywidualne połączenia przez ten sam port, ale inne używają portmapping do mapowania każdego połączenia klienta na inny wolny port i tylko nasłuchują NOWYCH połączeń na dobrze znanym numerze portu (na przykład TCP 80).
Frank Thomas
@MichaelColeman Tak, zapora utrzymuje tabelę tłumaczeń, aby powiązać port używany po stronie internetowej z komputerem i portem po stronie LAN.
John1024