Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:09:contents:02 [2014/12/11 16:06]
laura.gheorghe [02. [10p] Format de pachete la translatare]
rl:labs:09:contents:02 [2023/11/05 13:06] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 02. [10p] Format de pachete la translatare ​====+==== 02. [10p] Port forwarding pentru accesare serviciu web ====
  
-Ne propunem ​să analizăm antetul IP al pachetelor ce sunt generate ​de stațiile ''​red''​''​green'' ​și ''​blue'' ​și au ca destinație o rețea din Internet. Pentru acest lucru vom folosi utilitarul ​de captură ​''​tcpdump''​.+Pe stația ''​red''​ este instalat un server de HTTP pe care dorim să îl accesăm de pe stația ''​fep.grid.pub.ro''​. Pentru acest lucru trebuie trebuie să redirectați portul ​''​8080'' ​de pe stația ​''​host''​ spre portul ''​80''​ de pe stația ​''​red'' ​folosind DNAT (vezi [[rl:​labs:​08:​contents:​05|]]).
  
-Pe stația ''​red'' ​pornim comanda ​''​ping'' ​către ​''​8.8.8.8.''​:<code bash> +Pentru testare, deschideți terminal pe ''​fep.grid.pub.ro'' ​și accesați site-ul ​''​http://​10.9.X.Y:​8080'' ​(înlocuiți cu IP-ul) prin intermediul utilitarului ''​curl''​. ​Vă va apărea un cod HTML cu mesajul //​Laboratorul 10 - pe red//Exemplu: <code bash> 
-root@red:~# ping 8.8.8.8 +student@mjolnir:~$ ssh -X mihai.carabas@fep.grid.pub.ro 
-PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. +mihai.carabas@fep.grid.pub.ro's password:
-64 bytes from 8.8.8.8icmp_req=1 ttl=127 time=42.0 ms +
-[...] +
-</​code>​+
  
-<​note>​ +[your.name@fep-62-~]$ curl http://10.9.X.Y:8080
-Atunci când rulăm comanda ''​tcpdump''​ secvența de urmat este: +
-  - Se rulează comanda ''​tcpdump''​ cu opțiunile aferente într-un terminal, activând astfel captura de pacheteUtilitarul ''​tcpdump''​ așteaptă acum transmiterea de pachete pe interfețele pe care ascultă. +
-  ​Într-un alt terminal se rulează o comandă specifică unui client de rețea care generează trafic. +
-  - Se revine în terminalul în care rulează comanda ''​tcpdump''​ și se urmăresc pachetele capturate. +
-  - Când nu mai este nevoie de utilitarul ''​tcpdump''​ se întrerupe captura de pachete folosind combinația de taste ''​Ctrl+c''​. +
-</​note>​ +
- +
-Pentru a urmări traficul, pe stația ''​host''​ rulăm comanda<​code bash> +
-root@host:~# tcpdump -i eth0 ip dst host 8.8.8.8 +
-tcpdumpverbose output suppressed, use -v or -vv for full protocol decode +
-listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes +
-12:59:20.976707 IP host.local > google-public-dns-a.google.com:​ ICMP echo request, id 625, seq 6, length 64 +
-12:​59:​21.977708 IP host.local > google-public-dns-a.google.comICMP echo request, id 625, seq 7, length 64+
 </​code>​ </​code>​
  
-<spoiler (click pentru expandare) Detalii rulare masina virtuala VMware local+<hidden
-<note important+<solution
-După rularea comenzii ​de mai sus, probabil vi se va bloca terminalul. În mașina virtuală VMware apare o mini-fereastră care vă indică intrarea plăcii de rețea în modul //​promiscuous//​. Apăsați pe butonul ​''​OK'' ​al ferestrei pentru a debloca mașina virtuală și, astfel, terminalul. +Introducem regula ​de tip ''​DNAT'' ​în lanțul ​''​PREROUTING'' ​pe stația ''​host''​ și validăm introducerea acestei reguli:<code bash> 
-</​note>​ +root@host:​~# ​iptables -t nat -A PREROUTING ​-i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.2:80 
-</​spoiler>​ +root@host:~# iptables ​-t nat -L PREROUTING ​--
- +Chain PREROUTING ​(policy ACCEPT 0 packetsbytes) 
-Observăm că adresa IP sursă este ''​host.local'' ​chiar dacă stația ''​red''​ este cea care execută comanda ''​ping''​ și generează pachetele de tip ''​ICMP echo request''​. + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         
- +    2   120 DNAT       ​tcp  ​--  ​eth0 ​  ​* ​      0.0.0.0/0            0.0.0.0/​0 ​           tcp dpt:8080 to:192.168.1.2:80
-Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă ''​tcpdump''​ pe interfața ''​veth-red''​ în loc de ''​eth0''​: <code bash> +
-root@host:​~# ​tcpdump ​-i veth-red ip dst host 8.8.8.8 +
-tcpdumpverbose output suppressed, use -v or -vv for full protocol decode +
-listening on veth-red, link-type EN10MB ​(Ethernet)capture size 65535 bytes +
-13:​01:​12.557692 IP red > google-public-dns-a.google.comICMP echo request, id 626, seq 6, length 64 +
-13:01:13.559726 IP red > google-public-dns-a.google.comICMP echo request, id 626, seq 7, length 64+
 </​code>​ </​code>​
-Observăm că pe interfața ''​veth-red''​ adresa IP sursă este adresa stației ''​red'',​ adică așa cum este generat de la început pachetul. Motivul este reprezentat de faptul că pachetele ce intră pe intefața ''​veth-red''​ sunt capturate înainte de rutare, iar procesul NAT este aplicat **după rutare** (vezi [[rl:labs:​09:​contents:​01|]]. +Accesăm URL-ul %%http://<adresa-ip-mv>:8080/index.html%% din browser-ul grafic (FirefoxChrome) ​de pe stația ​fizică ​și apare mesajul //​Laboratorul 10 - pe red//
- +</solution
-Pentru a vedea modul în care se translatează traficul capturăm traficul pe toate interfețele (cele de interes sunt ''​veth-red''​ și ''​eth0''​)<code bash> +</hidden>
-root@host:​~#​ tcpdump ​-i any ip dst host 8.8.8.8 +
-tcpdump: verbose output suppressed, use -v or -vv for full protocol decode +
-listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes +
-10:​23:​07.632412 IP red google-public-dns-a.google.comICMP echo request, id 707, seq 237, length 64 +
-10:23:07.632430 IP host.local > google-public-dns-a.google.com:​ ICMP echo requestid 707, seq 237, length 64 +
-10:​23:​08.633936 IP red > google-public-dns-a.google.com:​ ICMP echo request, id 707, seq 238, length 64 +
-10:​23:​08.633954 IP host.local > google-public-dns-a.google.com:​ ICMP echo request, id 707, seq 238, length 64 +
-</​code>​ +
- +
-În lista de mai sus observăm atât pachetele care sunt captuarate ​pe interfața ''​veth-red''​ (generate de stația ​''​red''​) cât și cele capturate ​pe interfața ''​eth0''​ (translatate de stația ''​host''​). +
- +
-Capturați și pachetele de reply, care au ca **sursă** adresa ''​8.8.8.8''​. Folosiți șirul de argumente ''​ip src 8.8.8.8''​ pentru ''​tcpdump''​. +
- +
-Repetați testele de mai sus pentru stația ''​green''​. +
- +
-<note> +
-Întrucât latența DNS poate fi semnificativă,​ recomandăm folosirea opțiunii ''​-n''​ a utilitarului ''​tcpdump'',​ opțiune care dezactivează rezolvarea DNS. În exemplele de mai sus, nu am folosit opțiunea ''​-n''​ a utilitarului ''​tcpdump''​ pentru a identifica mai ușor numele stațiilor implicate în conversație. +
-</note>+
rl/labs/09/contents/02.1418306772.txt.gz · Last modified: 2014/12/11 16:06 by laura.gheorghe
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0