---
# System prepended metadata

title: SIECI Warsztaty 4-6
tags: [Sieci]

---

# SIECI Warsztaty 4-6
###### tags: `Sieci`
### [-> Ćwiczenia 1-3 <-](https://hackmd.io/@lorakis/sieci2k21c1-3)
### [-> Warsztaty 1-3 <-](https://hackmd.io/@lorakis/sieci2k21w1-3)
### [-> Warsztaty 7-9 <-](https://hackmd.io/@lorakis/sieci2k21w7-9)
# Warsztaty 4
![](https://i.imgur.com/xFFHi8N.png)
![](https://i.imgur.com/293fhvp.png)
`Vi$> startx`

`V1$> sudo ip link set enp0s3 name enp-rem1 & sudo ip link set enp0s8 name enp-rem4 & sudo ip link set enp0s9 name enp-all`

`V2$> sudo ip link set enp0s3 name enp-rem1 & sudo ip link set enp0s8 name enp-rem2 & sudo ip link set enp0s9 name enp-all`

`V3$> sudo ip link set enp0s3 name enp-rem2 & sudo ip link set enp0s8 name enp-rem3 & sudo ip link set enp0s9 name enp-all`

`V4$> sudo ip link set enp0s3 name enp-rem3 & sudo ip link set enp0s8 name enp-rem4 & sudo ip link set enp0s9 name enp-all`

![](https://i.imgur.com/p7R0548.png)

* aktywacja:
`V1$> sudo ip link set up dev enp-rem1 & sudo ip link set up dev enp-rem4`
`V2$> sudo ip link set up dev enp-rem1 & sudo ip link set up dev enp-rem2`
`V3$> sudo ip link set up dev enp-rem2 & sudo ip link set up dev enp-rem3`
`V4$> sudo ip link set up dev enp-rem3 & sudo ip link set up dev enp-rem4`
 * przypisanie ip:
   `V1$> sudo ip addr add 192.168.1.1/24 dev enp-rem1 & sudo ip addr add 192.168.4.1/24 dev enp-rem4`
   `V2$> sudo ip addr add 192.168.1.2/24 dev enp-rem1 & sudo ip addr add 192.168.2.2/24 dev enp-rem2`
    `V3$> sudo ip addr add 192.168.2.3/24 dev enp-rem2 & sudo ip addr add 192.168.3.3/24 dev enp-rem3`
    `V4$> sudo ip addr add 192.168.3.4/24 dev enp-rem3 & sudo ip addr add 192.168.4.4/24 dev enp-rem4`

![](https://i.imgur.com/bg8NmRR.png)
`Vi$> ip route`
`V1$> ping -c 2 192.168.1.2`
`V1$> ping -c 2 192.168.4.4`

## Tutorial #1
![](https://i.imgur.com/89bRiPx.png)
`V1$> sudo ip route add default via 192.168.1.2`
`V2$> sudo ip route add default via 192.168.2.3`
`V3$> sudo ip route add default via 192.168.3.4`
`V4$> sudo ip route add default via 192.168.4.1`

`Vi$> ip route`
![](https://i.imgur.com/Gw7eI99.png)
`V1$> ping -c 2 192.168.3.4`
`V2$> ping -c 2 192.168.2.3`
`V3$> ping -c 2 192.168.1.2`
`V4$> ping -c 2 192.168.4.1`

Jeśli pingujemy połączone ze sobą bezpośrednio maszyny, to nie będzie żadnego cyklu.

![](https://i.imgur.com/7m2TSuq.png)

`V1$> traceroute 192.168.2.3`

![](https://i.imgur.com/M8mtGoF.png)

`Vi$> sudo ip route del default`
`Vi$> ip route`

## Tutorial #2
![](https://i.imgur.com/U15ZhKl.png)
![](https://i.imgur.com/SQHmuX1.png)

`Vi$> sudo touch /etc/quagga/ospfd.conf && sudo touch /etc/quagga/zebra.conf && sudo touch /etc/quagga/vtysh.conf &&
sleep 1 && sudo systemctl start ospfd`

`Vi$> systemctl status ospfd`

![](https://i.imgur.com/2a1IOJo.png)

`Vi$> sudo vtysh`
`virbian# show ip route`

![](https://i.imgur.com/EpYmvty.png)
`virbian# configure terminal`
`virbian(config)# router ospf`

`virbian1(config-router)# network 192.168.1.0/24 area 0`
`virbian1(config-router)# network 192.168.4.0/24 area 0`
`virbian2(config-router)# network 192.168.1.0/24 area 0`
`virbian2(config-router)# network 192.168.2.0/24 area 0`
`virbian3(config-router)# network 192.168.2.0/24 area 0`
`virbian3(config-router)# network 192.168.3.0/24 area 0`
`virbian4(config-router)# network 192.168.3.0/24 area 0`
`virbian4(config-router)# network 192.168.4.0/24 area 0`

:::danger
`virbian(config-router)# no network adres_sieci area 0`
:::

![](https://i.imgur.com/lFj0nSv.png)
`virbian(config-router)# end`
`virbian# show running-config`

![](https://i.imgur.com/C1jCmZ5.png)
Pakiety porotokoły OSPF są osadzone w pakietach IP.

![](https://i.imgur.com/HpYM5bF.png)
`virbian# show ip route`
`Vi$> ip route`

![](https://i.imgur.com/Ki9wlJY.png)

`V1$> ping -c 2 192.168.2.3`
`V1$> ping -c 2 192.168.4.4`
`V2$> ping -c 2 192.168.1.1`
`V3$> ping -c 2 192.168.3.4`
`V3$> ping -c 2 192.168.4.4`
`V3$> ping -c 2 192.168.1.1`
`V4$> ping -c 2 192.168.2.3`

`V1$> traceroute 192.168.2.2`
`V1$> traceroute 192.168.3.4`

![](https://i.imgur.com/pFkt7KS.png)

`Vi$> sudo ip link set up dev enp-all`
`V1$> sudo ip addr add 172.16.16.1/24 dev enp-all`
`V2$> sudo ip addr add 172.16.16.2/24 dev enp-all`
`V3$> sudo ip addr add 172.16.16.3/24 dev enp-all`
`V4$> sudo ip addr add 172.16.16.4/24 dev enp-all`

![](https://i.imgur.com/0pJszma.png)

`Vi$> sudo vtysh`
`virbian# configure terminal`
`virbian(config)# router ospf`
`virbian(config-router)# network 172.16.0.0/16 area 0`

`Vi$> ip route`

![](https://i.imgur.com/p7OVCmn.png)
`Vi$> sudo systemctl stop ospfd`

## Wyzwanie
![](https://i.imgur.com/H2VowU4.png)
* Skonfiguruj 4 maszyny wirtualne *Virbian1* – *Virbian4*, tak aby korzystały z sieci **local0** i **local1**, tak jak zaznaczono na rysunku powyżej. Nazwij ich interfejsy tak jak na rysunku (**enp0**, **enp1** i **enp-out**).

`V1$> sudo ip link set enp0s3 name enp0`
`V2$> sudo ip link set enp0s3 name enp0`
`V3$> sudo ip link set enp0s3 name enp0 & sudo ip link set enp0s8 name enp1`
`V4$> sudo ip link set enp0s3 name enp-out`

`V1$> sudo ip link set up dev enp0`
`V2$> sudo ip link set up dev enp0`
`V3$> sudo ip link set up dev enp0 & sudo ip link set up dev enp1`
`V4$> sudo ip link set up dev enp-out`

* Przypisz trzem interfejsom podłączonym do wirtualnej sieci local0 adresy z sieci $192.168.1.0/24$ takie jak na rysunku. Przypisz dwóm interfejsom podłączonym do wirtualnej sieci **local1** adresy z sieci $192.168.2.0/24$ takie jak na rysunku.


`V1$> sudo ip addr add 192.168.1.1/24 dev enp0`
`V2$> sudo ip addr add 192.168.1.2/24 dev enp0`
`V3$> sudo ip addr add 192.168.1.3/24 dev enp0 && sudo ip addr add 192.168.2.1/24 dev enp1`
`V4$> sudo ip addr add 192.168.2.2/24 dev enp-out`

* Poleceniem ping sprawdź wzajemną osiągalność maszyn podłączonych do tej samej sieci **local0** i maszyn podłączonych do tej samej sieci **local1**.

`V1$> ping -c 2 192.168.1.2`
`V1$> ping -c 2 192.168.1.3`
`V3$> ping -c 2 192.168.2.2`
`V4$> ping -c 2 192.168.2.1`


* Na maszynach *Virbian1, Virbian2 i Virbian4* dodaj trasy domyślne, które na rysunku powyżej zaznaczone są przerywanymi strzałkami. Przykładowo trasa domyślna z maszyny *Virbian2* powinna prowadzić przez adres $192.168.1.3$.

`V1$> sudo ip route add default via 192.168.1.2`
`V2$> sudo ip route add default via 192.168.1.3`
`V4$> sudo ip route add default via 192.168.2.1`


* Włącz Wiresharka na wszystkich maszynach. Następnie z maszyny *Virbian1* pingnij maszynę *Virbian4*. 
`V1$> ping -c 2 192.168.2.2` 
Zaobserwuj, że maszyna jest osiągalna, ale oprócz komunikatów ICMP reply maszyna *Virbian1* otrzymuje również komunikaty ICMP redirect. Są one wysyłane przez maszynę *Virbian2* i informują o tym, że routing na maszynie *Virbian1* jest prawdopodobnie źle skonfigurowany. Odpowiedz na następujące pytania:
    * Jaka jest sugerowana przez maszynę *Virbian2* modyfikacja tablicy routingu na maszynie *Virbian1*?
    :::info
    V2 sugeruje zmiane defaulta na V3
    :::
    * Dlaczego taka zmiana ma sens?
    :::info
    Bo jest krótsza trasa.
    :::
    * W jaki sposób maszyna *Virbian2* mogła wykryć powyższy problem?
    :::info
    Powrota trasa nie przechodzi przez nią.
    :::
    
    
# Warsztaty 5
![](https://i.imgur.com/snvG9mM.png)
`V0$> startx`
`V0$> sudo ip link set enp0s3 name enp0`
`V0$> sudo ip link set up dev enp0`

## Tutorial #1
![](https://i.imgur.com/WQj6HEf.png)

`V0$> sudo dhclient enp0`

* Jakie komunikaty? - DHCP Request i DHCP ACK
* Jaki jest źródłowy adres? - nie ma jeszcze przydzielonego IP, więc 0.0.0.0

![](https://i.imgur.com/Nn9Bnmi.png)

`V0$> sudo dhclient -r enp0`

![](https://i.imgur.com/AAa16kK.png)

`V0$> sudo ip link set down dev enp0`


## Tutorial #2
![](https://i.imgur.com/Aunt9gm.png)

`V1/2$> sudo ip link set enp0s3 name enp0`

![](https://i.imgur.com/61EhLfY.png)

`V1/2$> sudo ip link set up dev enp0`
`V1$> sudo ip addr add 192.168.0.1/24 dev enp0`
`V2$> sudo ip addr add 192.168.0.2/24 dev enp0`

![](https://i.imgur.com/pfQFntf.png)

`V1/2$> ip link`
`V1$> ping -c 2 192.168.0.2`

* Adresy ramek ethernetowych pokrywają się z adresami MAC maszyn wirtualnych.
* Są tam adresy IP maszyn.

![](https://i.imgur.com/1mHgabQ.png)

`V1$> ping -bc 2 192.168.0.255`
* W destination jest ff:ff:ff:ff:ff, a w source jest MAC Virbian1
* W destination jest 192.168.0.255, a w source jest IP Virbian1

![](https://i.imgur.com/9diQgyK.png)

Tablica ARP - do IP przypisany jest adres MAC 
`V1/2$> ip neigh`
`V1/2$> sudo ip neigh flush all`

![](https://i.imgur.com/pVT9wMY.png)

`V1$> ping -c 2 192.168.0.2`
status zmienia się z STALE (nieświeży) na REACHABLE

![](https://i.imgur.com/RHy3Lam.png)

* Jest tylko ramaka ethernet, nie ma ramki IP. Jest tam source(MAC Virbian1), oraz destination(brodcast sieci)
* Na adres rozgłoszeniowy.
* Do konkretnego kompa.

## Tutorial #3
![](https://i.imgur.com/xj6NVNr.png)

`V1$> ping 192.168.0.2`

![](https://i.imgur.com/zePpCrI.png)

`V2$> sudo ip addr del 192.168.0.2/24 dev enp0 && sudo ip addr add 192.168.0.123/24 dev enp0`

![](https://i.imgur.com/IDdlPfI.png)

* Virbian1 próbuje spingować 192.168.0.2, ale nie udaje mu się to. Brodcast nie odpowiada, kim jest 192.168.0.2, więc Virbian1 wie, że 192.168.0.2 jest nieosiągalny.


![](https://i.imgur.com/7W4WNdf.png)

`V1/2$> sudo ip addr flush enp0`

## Wyzwanie
![](https://i.imgur.com/qO3rTnu.png)
![](https://i.imgur.com/Gb11MRy.png)
![](https://i.imgur.com/4vpscDv.png)
`V3/4$> sudo ip link set enp0s3 name enp0`
`V3/4$> sudo ip link set up dev enp0`

`V1$> sudo ip addr add 192.168.1.1/24 dev enp0`
`V2$> sudo ip addr add 192.168.1.2/25 dev enp0`
`V3$> sudo ip addr add 192.168.1.129/24 dev enp0`
`V4$> sudo ip addr add 192.168.1.130/25 dev enp0`

![](https://i.imgur.com/4qcX9vf.png)

* V1: 
    * 192.168.1.0/24 - adres sieci
    * 192.168.1.255 - broadcast
    * HostMin:   192.168.1.1
    * HostMax:   192.168.1.254
* V2: 
    * 192.168.1.0/25 - adres sieci
    * 192.168.1.127 - broadcast
    * HostMin:   192.168.1.1
    * HostMax:   192.168.1.126
* V3: 
    * 192.168.1.0/24 - adres sieci
    * 192.168.1.255 - broadcast
    * HostMin:   192.168.1.1
    * HostMax:   192.168.1.254
* V4: 
    * 192.168.1.128/25 - adres sieci
    * 192.168.1.255 - broadcast
    * HostMin:   192.168.1.129
    * HostMax:   192.168.1.254

![](https://i.imgur.com/gBV7YsB.png)

`V1$> ping -bc 1 192.168.1.255`

* Które maszyny otrzymały komunikat *ICMP echo request*? Które nie otrzymały i dlaczego?
* Które maszyny wysłały w odpowiedzi komunikat *ICMP echo reply*? Które nie wysłały i dlaczego?
* Które odpowiedzi dotarły do maszyny *Virbian1*? Które nie dotarły i dlaczego?

Request otrzymały wszyskie Virbiany, ale odpowiedział tylko Virbian3, ponieważ tylko on jest w tej samej sieci co Virbian1. Virbian2 oraz Virbian4 otrzymuje request ale nie odpowiada na nie. Dotarły tylko te odpowiedzi które mają taki sam adres rozgłoszeniowy. IP Virbian1 nie jest w zakresie sieci Virbian4.

![](https://i.imgur.com/93iphS9.png)
* V2
`V2$> ping -bc 1 192.168.1.127`
Na wszystkich wyskakuje echo request, a na żadnej echo reply. Stało się tak ponieważ żadna z maszyn nie ma takiego samego adresu rozgłoszeniowego co Virbian2.
* V3
`V3$> ping -bc 1 192.168.1.255`
Wszystkie maszyny wykazały obecność echo request. Virbian1 oraz Virbian4 odopowiedział na zapytanie, ponieważ mają taki sam adres rozgłoszeniowy. Virbian 2 nie odpowiedział, bo ma inny adres rozgłoszeniowy.
* V4
`V4$> ping -bc 1 192.168.1.127`
Wszystkie maszyny otrzymały echo request. Ale nie odpowiedział Virbian2 ponieważ jego zakres nie obejmuje Virbian4.

![](https://i.imgur.com/mTE3iaX.png)


# Warsztaty 6

![](https://i.imgur.com/hex21hz.png)

`V0$> sudo ip link set enp0s3 name enp0`
`V0$> sudo ip link set up dev enp0`
`V0$> sudo dhclient -v enp0`
## Tutorial #1
![](https://i.imgur.com/ff4idtt.png)

`V0$> dig www.debian.org`

130.89.148.77

![](https://i.imgur.com/4E0heXs.png)

`V0$> (while true; do netstat -tan | grep 130.89.148.77; done) | tee tcp_log`

`V0$> wget http://130.89.148.77/`

`V0$> trickle -d 10 wget http://130.89.148.77/`

![](https://i.imgur.com/lC5wW3j.png)
* Jakie gniazda tworzone są do popbierania pliku przez HTTP? Jaki  jest  port  źródłowy  a  jaki  docelowy  połączenia? 

Source Port: 80
Destination Port: 36912
Gniazda połączone. Są opisane między innymi przez lokalny IP, lokalny port, zdalny IP, zdalny port.


Port serwera to 80, jest dobrze znany. U mnie system przydzielił port 42496, został losowo przydzielony, nie jest dobrze znany


* Jakie z flag SYN / ACK / FIN są włączone dla danego segmentu? Które bajty (strumienia danych protokołu HTTP) są przesyłane w segmencie? Które bajty strumienia danych są potwierdzane danym segmentem? Na podstawie diagramu stanów TCP (https://en.wikipedia.org/wiki/File:Tcp_state_diagram.png), sprawdź jak zmienia się stan połączenia TCP (po stronie klienta i po stronie serwera) w momencie wysłania i odebrania danego segmentu.

Pierwsze 3 segmenty to trójfazowe nawiązywanie połączenia. Na diagramie TCP z linku są to stany nad ESTABLISHED. Klient wysyła [SYN], dostaje [SYN, ACK] i odpowiada [ACK]. Nie ma tu wymiany danych przez HTTP.

Teraz połączenie jest nawiązane. Na diagramie stanów TCP z linku jest to stan ESTABLISHED na zielonym tle.

Kolejne segmenty to pobranie strony, po kolei:
4. Wysłanie żądanie GET pod wskazany adres IP, by pobrać stronę. Komunikacja HTTP.
5. Odpowiedź serwera [ACK], że otrzymał żądanie GET.
6. Otrzymanie strony w HTML od serwera. Komunikacja HTTP.
7. Wysłanie serwerowi potwierdzenia otrzymania strony [ACK].

Teraz następuje czterofazowe kończenie połączenia. Na diagramie TCP z linku są to stany pod ESTABLISHED w ramkach Active Close i Passive Close.

Klient wysyła [FIN, ACK], Serwer odpowiada [ACK] oraz w drugim segmencie [ACK, FIN]. Klient teraz przechodzi w stan TIME WAIT. Wysyła serwerowi [ACK] otrzymania poprzednich flag.

* Które z tych stanów są widoczne w pliku tcp log?

W pliku tcp_log są widoczne stany z diagramu TCP: TIME_WAIT, SYN_SENT, ESTABILISHED, FIN_WAIT2.

* Która strona wykonuje otwarcie aktywne, a która zamknięcie aktywne?

Klient wykonuje otwarcie aktywne i zamknięcie aktywne. To on pierwszy wysyła segmenty do serwera.

## Tutorial 2
![](https://i.imgur.com/UMMMWdW.png)
`V0$> dig www.cs.uni.wroc.pl @198.41.0.4` -> pierwsze
`V0$> dig www.cs.uni.wroc.pl @194.181.87.156` -> przez sfera pl
`V0$> dig www.cs.uni.wroc.pl @156.17.254.3` -> wroc.pl
`V0$> dig www.cs.uni.wroc.pl @156.17.93.253` -> przez uni.wroc.pl
156.17.93.253 -> cs.uni.wroc.pl
![](https://i.imgur.com/k6mmkni.png)
`V0$> dig +trace www.cs.uni.wroc.pl @198.41.0.4`


![](https://i.imgur.com/VIGdLiW.png)
`V0$> dig -t a ii.uni.wroc.pl` -> adres IP
`V0$> dig -t ns ii.uni.wroc.pl` -> serwer nazw
`V0$> dig -t mx ii.uni.wroc.pl` -> serwer obsługujący poczte

![](https://i.imgur.com/e6q5DTn.png)
`V0$> dig -t ptr 11.4.17.156.in-addr.arpa` -> ii.uni.wroc.pl

## Tutorial 3
![](https://i.imgur.com/kvYYOCd.png)

`V0$> nc -u -l -p 10053`
`V0$> dig -p 10053 www.wikipedia.pl @127.0.0.1 +tries=1`

![](https://i.imgur.com/pNMXFrx.png)
`V0$> nc -u -l -p 10053 | tee dns_request`
`V0$> hexdump -C dns_request`


![](https://i.imgur.com/KP3GV85.png)
`V0$> nc -q 1 -u 8.8.8.8 53 < dns_request`

## Wyzwanie #1

* Uruchom usługę serwera WWW wyświetlającego prostą stronę służącą do dodawania wpisów uruchamiając polecenie

`V0$> sudo systemctl start hydepark`


* Wejdź przeglądarką na stronę http://virbian:8080/ i wykorzystując rozszerzenie przeglądarki HTTP Header Live sprawdź, co dzieje się, kiedy dodajesz jakiś wpis.

Pojawiają się nowe rządania: 
1. do http://virbian:8080/add
    POST: HTTP/1.0 302 FOUND z content=twója_treść
2. do http://virbian:8080/
    POST: HTTP/1.0 200 OK
3. do virbian:8080/favicon.ico
    GET: HTTP/1.0 404 NOT FOUND

* Uruchom program *nc* w trybie serwera TCP nasłuchującego na porcie 8888 poleceniem
`V0$> nc -l -p 8888 | tee http_request`


* Z menu przeglądarki wybierz pozycję Edit | Preferences, wyszukaj w opcjach Network settings i w okienku Connection Settings wybierz Manual proxy configuration. Następnie w polu HTTP proxy wpisz localhost, a w sąsiednim polu Port wpisz 8888.



* Na stronie http://virbian:8080/ wpisz jakąś treść w polu „Dodaj jakiś komunikat” i kliknij przycisk „Wyślij”. Dlaczego przeglądarka wyświetla w pasku stanu komunikat Waiting for virbian, a odpowiedni wpis nie został dodany?

Ponieważ server proxy jest nieznany.

* Przerwij działanie programu nc. Co zapisał ten program do pliku http request? Wyłącz ustawienia serwera proxy w przeglądarce.

Zapsiał rządanie do http://virbian:8080/add

* Wyślij zapisane zapytanie do serwera WWW poleceniem `V0$> nc -q 3 virbian 8080 < http_request` i sprawdź przeglądarką, czy odpowiedni komunikat został dodany na stronie WWW

`V0$> nc -q 3 virbian 8080 < http_request`

* Zmień zawartość pliku http request, wpisując inny komunikat do umieszczenia na stronie. Odpowiednio zmodyfikuj pole Content-Length. Ponownie wyślij zapytanie do serwera WWW i upewnij się, że komunikat został dodany na stronie.

Można wpisać content=ppp i lenght=11

* Zakończ działanie serwera WWW poleceniem `V0#> systemctl stop hydepark` Dezaktywuj kartę enp0 poleceniem ip link i wyłącz maszynę wirtualną