This shows you the differences between two versions of the page.
rl:labs:08:contents:11 [2020/12/01 10:47] iulia.florea created |
rl:labs:08:contents:11 [2023/11/05 12:57] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 11. [5p] Copiere fișiere cu diverse protocoale: durată și consum de resurse ==== | + | ==== 11. [BONUS - 10p] Translatare selectivă de adrese ==== |
- | Ne propunem să măsurăm timpul de copiere și consumul de resurse pentru un transfer realizat între două stații folosind, pe rând, transfer direct, FTP și SSH. În directorul home al utilizatorului ''student'' de pe stația ''green'' există un fișier ''file-100M.dat''. Vom transfera acest fișier în directorul home al utilizatorului ''student'' de pe stația ''host''. Vom folosi transfer direct, transfer FTP și transfer SSH. Pentru fiecare caz, stația ''host'' va rula server-ul, iar stația ''green'' clientul. | + | Pentru situația în care adresa IP exterioară a gateway-ului este adresă statică (nu dinamică) se recomandă folosirea acțiunii ''SNAT'' în loc de ''MASQUERADE'' la translatarea de adrese. Pe lângă aceasta, SNAT are avantajul precizării unui spațiu de adrese care să fie noile adrese (cele substituite) și a porturilor. |
<note tip> | <note tip> | ||
- | Dați copy-paste la comenzile de mai jos ca să vă asigurați că le scrieți corect. Pentru paste folosiți, în terminal, combinația de taste ''Shift+Insert''. | + | Informații despre folosirea ''SNAT'' și diferența dintre ''SNAT'' și ''MASQUERADE'' găsiți [[http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html|aici]]. |
</note> | </note> | ||
- | **Transfer direct** | + | Ștergeți regula anterioară de tip ''MASQUERADE'' și folosiți reguli de tip ''SNAT'' pentru a face următoarele translatări: |
+ | * conexiunile TCP către Internet de la stația ''red'' să iasă prin porturi din spațiul ''45000-50000''; | ||
+ | * conexiunile TCP către Internet de la stația ''green'' să iasă prin porturi din spațiul ''50000-55000''; | ||
+ | * conexiunile TCP către Internet de la stația ''blue'' să iasă prin porturi din spațiul ''55000-60000''; | ||
+ | * toate celelalte conexiuni să fie realizate în mod obișnuit, având ca adresă sursă adresa IP de exterior a stației ''host'' (această regulă trebuie să fie ultima). | ||
- | Pentru transfer direct vom porni un server simplu TCP pe stația ''host'' și un client pe stația ''green''; vom folosi utilitarul ''netcat'', prescurtat și ''nc''. Rulați pe stația ''host'', în contul utilizatorului ''student'', comanda<code bash> | + | Verificați translatarea corectă inițiind conexiuni HTTP (folosind ''wget'') către ''cs.pub.ro'' de pe fiecare dintre cele trei stații de tip container (''red'', ''green'' și ''blue'') și folosind ''tcpdump'' pe stația ''host'' pentru a captura traficul aferent. |
- | student@host:~$ nc -l 12345 > file-100M-nc.dat | + | |
- | </code> Comanda deschide un server TCP care ascultă conexiuni pe portul ''12345''. Comanda rămâne activă în așteptarea unei conexiuni de la un client. | + | |
- | De pe stația ''green'', din contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii((În cazul unui transfer prin rețea folosind ''netcat'' nu se face verificare de integritate (//integrity check//). Există riscul (mic, dar există) ca fișierul să nu fie transferat corespunzător. De aceea e bine să verificați integritatea acestuia prin calcularea sumei de control (//checksum//) folosind, de exemplu, utilitarul ''sha512sum''.))<code bash> | + | <hidden> |
- | student@green:~$ /usr/bin/time -v cat file-100M.dat | nc host 12345 | + | <solution> |
+ | Ștergem regula de tip ''MASQUERADE'', adăugăm cele patru reguli de tip ''SNAT'' și verificăm prezența acestora în tabela ''nat'':<code bash> | ||
+ | root@host:~# iptables -t nat -F POSTROUTING | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:45000-50000 | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.2.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:50000-55000 | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.3.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:55000-60000 | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.56.101 | ||
+ | root@host:~# iptables -t nat -L POSTROUTING -n -v | ||
+ | Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 0 0 SNAT tcp -- * eth0 192.168.1.2 0.0.0.0/0 to:192.168.56.101:45000-50000 | ||
+ | 0 0 SNAT tcp -- * eth0 192.168.2.2 0.0.0.0/0 to:192.168.56.101:50000-55000 | ||
+ | 0 0 SNAT tcp -- * eth0 192.168.3.2 0.0.0.0/0 to:192.168.56.101:55000-60000 | ||
+ | 0 0 SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:192.168.56.101 | ||
</code> | </code> | ||
- | Comanda de mai sus trimite un fișier comenzii ''nc'', iar comanda ''nc'' are rolul unui client TCP care se conectează la stația ''host'' pe portul ''12345''. | + | Pornim ''tcpdump'' pentru a captura mesaje destinate ''cs.pub.ro'' pe portul ''80'', aferent HTTP:<code bash> |
- | + | root@host:~# tcpdump -n -i any ip dst host cs.pub.ro and tcp dst port 80 | |
- | **Transfer FTP** | + | [...] |
- | + | 16:43:45.683809 IP 192.168.1.2.43031 > 141.85.166.61.80: Flags [.], ack 1461, win 17520, length 0 | |
- | Pentru transfer FTP, serverul de FTP este deja pornit pe stația ''host''. De pe stația ''green'', din contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii<code bash> | + | 16:43:45.683836 IP 192.168.56.101.45000 > 141.85.166.61.80: Flags [.], ack 1461, win 17520, length 0 |
- | student@green:~$ /usr/bin/time -v curl -T file-100M.dat -u student:student ftp://host/file-100M-ftp.dat | + | 16:43:45.684033 IP 192.168.1.2.43031 > 141.85.166.61.80: Flags [.], ack 2921, win 20440, length 0 |
+ | 16:43:45.684041 IP 192.168.56.101.45000 > 141.85.166.61.80: Flags [.], ack 2921, win 20440, length 0 | ||
+ | [...] | ||
+ | 16:44:12.865807 IP 192.168.2.2.60147 > 141.85.166.61.80: Flags [.], ack 4105, win 23256, length 0 | ||
+ | 16:44:12.865811 IP 192.168.56.101.50000 > 141.85.166.61.80: Flags [.], ack 4105, win 23256, length 0 | ||
+ | 16:44:12.885166 IP 192.168.2.2.60147 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:12.885175 IP 192.168.56.101.50000 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | [...] | ||
+ | 16:44:27.929672 IP 192.168.3.2.59957 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:27.929683 IP 192.168.56.101.59957 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:27.929902 IP 192.168.3.2.59957 > 141.85.166.61.80: Flags [.], ack 6841, win 28728, length 0 | ||
+ | 16:44:27.929918 IP 192.168.56.101.59957 > 141.85.166.61.80: Flags [.], ack 6841, win 28728, length 0 | ||
</code> | </code> | ||
- | + | Observăm că translatarea TCP se face în spațiul de porturi definit prin regulile de mai sus. | |
- | **Transfer SSH** | + | </solution> |
- | + | </hidden> | |
- | Pentru transfer SSH, serverul de SSH este deja pornit și configurat pe stația ''host''. De pe stația ''green'', în contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii<code bash> | + | |
- | student@green:~$ /usr/bin/time -v scp file-100M.dat student@host:file-100M-scp.dat | + | |
- | </code> | + | |
- | + | ||
- | Urmăriți timpii de rulare și consumul de memorie și de procesor pentru cele trei cazuri de mai sus. Observați valorile ridicate pentru SSH pentru timpul utilizator (//User time//) și procentul de procesor (//Percent of CPU//). Acesta valori ridicate se datorează componentei de criptare a SSH: această componentă asigură securizarea datelor cu un cost de reducere de performanță. | + |