SIK08.rs

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ą poprzez serwer lub ruter. Czasem mówimy w takim wypadku, że komputery w sieci loklanej znajdują się "za NAT-em".

Wyróżniamy trzy rodzaje NAT:

Statyczny NAT: Udostępnia odzorowanie 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 zapamietywane 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 ustwiają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 (1 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ąznych 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 pakietów nadawcy i odbiorcy 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.

Zadanie (1 pkt)

Wykonaj w terminalu linuxowym

netstat -rn

Odpowiedz czym jest Gateway i do czego służy tablica routingu.

Zadanie (1 pkt)

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

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 http://www.staff.amu.edu.pl/~mw/index.html HTTP/1.0\n\n" | nc www.staff.amu.edu.pl 80 | less

Zadanie (1 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 (1 pkt)

Podaj pełną listę metod HTTP.

Zadanie (1 pkt)

Czy są statusy HTTP? Który numer statusu odpowiada za informacje, że server nie jest dostępny, który odpowiada komunikatowi "OK"?

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 (2 pkt)

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

podając jeden parametr o nazwie indeks i wartośći 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:

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 (1 pkt)

Odpowiedz na pytanie: Czy zawsze można ufać odpowiedzi zwróconej przez serwer DNS? Dlaczego?

Zadanie (1 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?

Czy z jedną maszyną może być związane więcej niż jedna nazwa domenowa?

Plik z rozwiązaniami proszę przesłać przez stronę:

*

Wykorzystano materiały z:

http://www.tech-faq.com/nat-network-address-translation.html

https://www.pluralsight.com/blog/software-development/nat-network-address-translation-pat-port-address-translation

"Computer Networking: A Top-Down Approach", 6th ed., J.F. Kurose and K.W. Ross

https://en.wikibooks.org/wiki/Communication_Networks/NAT_and_PAT_Protocols

https://it-szkola.edu.pl/upload/kuznia/technologie_akademii_Cisco/main.html

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch18_:_Configuring_DNS