Differences

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

Link to this comparison view

rl:labs:09:contents:02 [2013/11/26 10:23]
razvan.deaconescu [02. Format de pachete după translatare]
rl:labs:09:contents:02 [2023/11/05 13:06] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 02. Format de pachete la translatare ​====+==== 02. [10p] Port forwarding pentru accesare serviciu web ====
  
-Ne propunem 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ț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-ulprin 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.856(84) bytes of data. +mihai.carabas@fep.grid.pub.ro's password:
-64 bytes from 8.8.8.8: icmp_req=1 ttl=127 time=42.0 ms +
-[...] +
-</​code>​ +
-Pentru a urmări traficul, pe stația ​''​host'' ​rulăm comanda<code bash> +
-root@host:~# tcpdump ​-i eth0 ip dst 8.8.8.+
-tcpdump: verbose 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>​+
  
-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''​. +[your.name@fep-62-2 ~]$ curl http://10.9.X.Y:8080
- +
-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 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.com:​ ICMP 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|]]. 
  
-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 8.8.8.8 +<​solution>​ 
-tcpdumpverbose output suppressed, use -v or -vv for full protocol decode +Introducem regula de tip ''​DNAT'' ​în lanțul ''​PREROUTING'' ​pe stația ​''​host'' ​și validăm introducerea acestei reguli:<code bash> 
-listening on any, link-type LINUX_SLL ​(Linux cooked)capture size 65535 bytes +root@host:​~# ​iptables -t nat -A PREROUTING ​-i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.2:80 
-10:​23:​07.632412 IP red > google-public-dns-a.google.com: ICMP echo request, id 707, seq 237, length 64 +root@host:~# iptables ​-t nat -L PREROUTING -n -v 
-10:23:07.632430 IP host.local > google-public-dns-a.google.comICMP echo request, id 707, seq 237, length 64 +Chain PREROUTING ​(policy ACCEPT 0 packetsbytes) 
-10:23:08.633936 IP red > google-public-dns-a.google.comICMP echo request, id 707, seq 238, length 64 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         
-10:​23:​08.633954 IP host.local > google-public-dns-a.google.com:​ ICMP echo request, id 707, seq 238, length 64+    2   120 DNAT       ​tcp  ​--  ​eth0 ​  ​* ​      0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:192.168.1.2:80
 </​code>​ </​code>​
- +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//. 
-Î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''​). +</solution
- +</​hidden>​
-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ă rezolvara 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>​ +
- +
-==== 03. Format de pachete TCP la translatare ==== +
- +
-Dorim să urmărim modul structura pachetelor TCP înainte și după translatarea de adrese. În plus față de exercițiul de mai susvrem să urmărim și porturile. Pentru aceasta vom genera pachete TCP (HTTPfolosind ''​wget'' ​de pe stația ​''​red''​ și vom captura pachetele folosind ''​tcpdump''​ pe stația ''​host''​. +
- +
-Pe stația ''​host''​ capturați pe toate interfețele pachetele HTTP care au ca adresă destinație numele ''​google.com''​. +
- +
-<note tip> +
-Va trebuie să folosiți argumentele ''​ip dst google.com'' ​și ''​tcp dst port 80''​ la ''​tcpdump''​. Legați argumentele prin șirul ''​and''​. Urmăriți și [[http://linux-circles.blogspot.ro/2012/11/​how-to-capture-packets-with-tcpdump.html|exemplele de aici]]+
-</note+
- +
-Pe stația ''​red''​ folosiți ''​wget''​ pentru a obține pagina de la ''​google.com''​. +
- +
-Urmăriți translatarea adresei IP sursă și a portului sursă în cadrul capturii de pachete realizată cu ''​tcpdump''​ pe ''​host''​. +
- +
-Pe stația ''​host''​ capturați pe toate interfețele pachetele HTTP care au ca adresă numele ''​google.com''​ (nu contează dacă este sursă sau destinație,​ capturăm și pachetele de interogare și cele de rășpuns). Pe stația ''​red''​ folosiți, din nou, ''​wget''​ pentru a obține pagina de la ''​google.com''​. Urmăriți translatarea adresei IP sursă și a portului sursă pentru pachetele de interogare și translatarea adresei IP destinație și a portului destinație pentru pachetele de răspuns.+
rl/labs/09/contents/02.1385454180.txt.gz · Last modified: 2013/11/26 10:23 by razvan.deaconescu
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