SIK08.rst

Sieci Komputerowe

NAT, HTTP, DNS *

NAT

Ze względu na rosnącą liczbę urządzeń w sieci oraz ograniczoną liczbę adresów najczęściej stosowanym obecnie rozwiązaniem jest tzw. translacja adresów, czyli udostępnianie jednego adresu IP dla całej podsieci oraz zarządzanie komunikacją pomiędzy siecią a światem zewnętrznym poprzez serwer lub ruter. Czasem mówimy w takim wypadku, że komputery w sieci lokalnej znajdują się "za NAT-em".

Wyróżniamy trzy rodzaje NAT:

Statyczny NAT: Udostępnia odwzorowanie 1-1 między adresami zewnętrznymi a adresami lokalnymi (czyli każdy komputer lokalny ma swoje IP, a serwer tylko pośredniczy w przekazywaniu pakietów).
Dynamiczny NAT: Serwer dysponuje pulą adresów IP, które przyporządkowuje lokalnym jednostkom dynamiczne w odpowiedzi na ich żądania skierowane do sieci zewnętrznej
PAT: Port address translation Najpopularniejsza, odwzorowuje wiele komputerów sieci lokalnej na jeden adres sieci IP poprzez kierowanie ruchu na określone porty.

a1

a2

a3

Kiedy komputer z sieci lokalnej wysyła zapytanie do sieci, urządzenie NAT zmienia adres nadawcy pakietu (i czasem numer portu) na publiczny adres IP.

W momencie, gdy wraca do nas odpowiedź na ten pakiet urządzenie NAT przypisuje pakietowi odpowiedni adres lokalnego węzła. Odwzorowania między pakietami a adresami zapamiętywane są w tablicy translacji NAT.

Na przykład: Klient o adresie IP 192.168.10.2 chce skomunikował się z serwerem o adresie 131.110.30.4. Klient ma ustawioną bramę domyślną (ujście komunikacje) na adres 192.168.1.1, czyli adres serwera obsługującego NAT. Zewnętrzny adres serwera to 131.110.5.1. Komunikacja między klientem a serwerem zachodzi w następujący sposób:

Klient przesyła pakiet do serwera. Nagłówek pakietu wskazuje, że pochodzi on z komputera o adresie 192.168.10.2 z portu 1074 i zmierza na port 80 adresu 131.110.30.4.
Serwer (ruter) podmienia nagłówek przypisując adres nadawcy jako 131.110.5.1 oraz port na 1563. Adres docelowy pozostaje bez zmian. Serwer przesyła pakiet w sieci Internet do adresata.
Adresat odbiera wiadomości i przesyła swoją odpowiedź. Nagłówek komunikatu mówi, że pochodzi on z portu 80 hosta o adresie 131.110.30.4 i zmierza na port 1563 adresu 131.110.5.1.
Serwer (ruter) odbiera komunikat z sieci i sprawdza w tabeli NAT informacje na temat węzła sieci lokalnej, który zainicjował komunikację. Serwer podmienia nagłówek komunikatu ustawiając jako cel port 1074 oraz adres 192.168.10.5 i przesyła komunikat do klienta. Adres i port nadawcy pozostają bez zmian.

W przypadku komputera w sieci lokalnej nasz adres zewnętrzny możemy poznać korzystając z serwisów takich jak https://www.whatismyip.com/ lub (w Linux) np wykorzystując serwer DNS:

dig +short myip.opendns.com @resolver1.opendns.com

Sprawdż, czy znajdujesz się w sieci lokalnej.

Komputery w sieci zewnętrznej nie są w stanie ustanowić bezpośredniego połączenia z komputerem znajdującym się w sieci lokalnej. Dostęp do komputera w sieci lokalnej możemy uzyskać poprzez ustawienia przekazywania ruchu w ustawieniach rutera, lub w przypadku serwera na linuxie poprzez zmiany w iptables:

Zadanie (20 pkt)

W pliku Plik11 znajduje się log komunikacji pomiędzy klientem w sieci lokalnej a siecią zewnętrzną

w Plik22 znajduje się ta sama komunikacja podsłuchana ze strony sieci zewnętrznej (po środku znajduje się urządzenie NAT).

W programie Wireshark użyj filtra http w celu wyfiltrowania komunikatów związanych tylko z tą komunikacją.

Odpowiedz na pytania: Jaki jest adres IP klienta (lokalny)? Przeanalizuj komunikat HTTP GET wysłany o czasie 7.109267. Podaj numery portów i adresy nadawcy i odbiorcy pakietów w tym przypadku. Znajdź ten sam komunikat w logu po stronie sieci zewnętrznej, podaj jego czas otrzymania (uwaga może on był niższy niż czas powyżej gdyż czasy są mierzone niezależnie) Podaj numery portów i adresy pakietów nadawcy i odbiorcy po stronie sieci zewnętrznej.

Które z wymienionych elementów nagłówka IP uległy zmianie pomiędzy komunikacją w sieci lokalnej a w sieci zewnętrznej: Version, Header Lenght, Flags, Checksum.

Jeżeli któryś z nich zmienił wartość, wyjaśnij dlaczego tak się stało.

VPN

VPN (wirtualna sieć prywatna) to bezpieczne, szyfrowane połączenie między dwiema sieciami lub między użytkownikiem i siecią. Twój komputer łączy się z serwerem VPN za pomocą zabezpieczonego oraz zaszyfrowanego połączenia następnie serwer VPN kontaktuje się ze stroną, z którą chcesz się połączyć. W celu utworzenia serwera VPN należy skorzystać z odpowiedniego oprogramowania lub ustawień na komputerze serwera.

Zadanie (10 pkt)

Czy można połączyć się przez VPN z podsieci o tych samych adresach co sieć docelowa? Dlaczego tak jest (może być to problem)?

HTTP

HTTP (Hyper Transfer Protocol) jest protokołem odpowiedzialnym za przesyłanie w Internecie stron WWW. Portem zarezerwowanym dla HTTP jest 80 port TCP. HTTP jest wykorzystywany do przekazywania różnych zasobów, a nie tylko plików.

Zasób jest jakimś fragmentem informacji, która może był zidentyfikowana przez adres URL. Najczęstszym rodzajem zasobów jest plik, ale może był to także dynamicznie generowany wynik kwerendy, wyjście skryptu CGI, dokument, który jest dostępny w kilku językach, czy coś innego. Podobnie jak większość protokołów sieciowych, HTTP używa modelu klient-serwer: klient HTTP otwiera połączenie i wysyła komunikat żądania do serwera

HTTP, serwer następnie zwraca komunikat odpowiedzi, zwykle zawierający zasób, o który został poproszony. Po dostarczeniu odpowiedzi, serwer zamyka połączenie i co najważniejsze nie przechowuje żadnych informacji o połączeniu między transakcjami.Pozwala to znacznie zmniejszyć obciążenie serwera, jednak jest kłopotliwe w sytuacji, gdy np. trzeba zapamiętać konkretny stan dla użytkownika, który wcześniej łączył się już z serwerem. Najczęstszym rozwiązaniem tego problemu jest wprowadzenie mechanizmu ciasteczek.

Opis pól nagłówków HTTP można znaleźć np tutaj:

Przykład nagłówka:

echo -e "HEAD mw.home.amu.edu.pl/index.html HTTP/1.0\n\n" | nc mw.home.amu.edu.pl 80

Zadanie (10 pkt)

W pliku Plik2 znajduje się log komunikacji pomiędzy klientem a serwerem

Odpowiedz na pytania: Jaki jest domyślny port na którym działa protokół HTTP? Na jakim serwerze (dystrybucji) umieszczona jest strona www.staff.amu.edu.pl/~mw/index.html? Z jakiego systemu i z jakiej przeglądarki dokonywano zapytań?

Zadanie (10 pkt)

Podaj pełną listę metod HTTP.

Poniżej znajduje się kod w języku Python służący do wywoływania metod HTTP:

import httplib

conn = httplib.HTTPConnection("mw.home.amu.edu.pl")
conn.request("GET", "/students.html")
r1 = conn.getresponse()
print r1.status, r1.reason
data1 = r1.read()
print data1

conn.request("HEAD", "/students.html")
r1 = conn.getresponse()
print r1.status, r1.reason

Zapisz na dysku jako np. http.py i uruchom w terminalu (CMD) poprzez:

python http.py

Zadanie (20 pkt)

Wykonaj metodę GET z przesłaniem danych i metodę POST na adresie

podając jeden parametr o nazwie indeks i wartości Twojego numeru indeksu. Odpowiedz jaka jest różnica między przesyłaniem parametrów metodami GET/POST?

Przykład użycia GET i POST(wymaga importu urllib):

Sprawdź czy Ci się udało wchodząc na:

Uwaga możesz użyć też takich narzędzi jak Postman, czy przeglądarka do przesłania zapytań HTTP.

DNS

Domain Name System (DNS) zamienia nazwy stron i serwerów internetowych (np. amu.edu.pl) na adres IP (150.254.65.253). Jest to o tyle ważne, że w internecie to wyznaczania drogi i celu pakietów korzystamy z adresów IP.

Typy komunikatów DNS:

A - Internet address of the host hostname to IP mapping.
CNAME - canonical name of an alias, a machine may have several names (aliases) associated with it, but only one of them is the real one.
MX - mail exchanger, mail server for the domain. This is used by SMTP.
NS - nameserver, which nameserver is responsible for the domain.
PTR - Pointer to a canonical name, IP to hostname mapping.
SOA - domain's start-of-authority information, who is in charge for the administration of the domain.

Pełną listę komunikatów można znaleźć tutaj:

Narzędziem systemowym pozwalającym na odnalezienie adresu serwera za pomocą jego nazwy jest np dig.

dig amu.edu.pl

Wykonaj zapytanie i porównaj z poprzednim:

dig -t NS amu.edu.pl

Jeżeli chcemy założył własną witrynę o nazwie www.my-site.com, musimy ją zarejestrował w firmie zajmującą się hostingiem DNS.

Zadanie (10 pkt)

Odpowiedz na pytanie: Czy zawsze można ufać odpowiedzi zwróconej przez serwer DNS? Wytłumacz co oznacza Non-authoritative server. Jakie mogą być konsekwencje tak otrzymanego wpisu.

Zadanie (10 pkt)

W pliku Plik4 znajduje się log komunikacji pomiędzy komputerem a serwerem DNS.

Odpowiedz na pytania:

Czy komunikacja z serwerem DNS odbywa się poprzez TCP czy UDP? Na jakim porcie działa serwer DNS? Jakie typy zapytań DNS można odnaleźć w logu?

Zadanie (10 pkt)

Odpowiedz na pytanie, czy z jedną maszyną (adresem IP) może być związana więcej niż jedna nazwa domenowa?