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 15:27]
razvan.deaconescu
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 host 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 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.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 host 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 ​(Firefox, Chrome) ​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ț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>+
rl/labs/09/contents/02.1385472442.txt.gz · Last modified: 2013/11/26 15:27 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