This shows you the differences between two versions of the page.
uso:laboratoare:new:08-net:demo [2018/11/20 19:55] razvan.deaconescu created |
uso:laboratoare:new:08-net:demo [2019/11/26 08:46] (current) costin.carabas [1. Comanda ping] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Demo ===== | ===== Demo ===== | ||
- | Pentru început, vrem să ne acomodăm cu cele mai importante comenzi din linia de comandă pentru rețelistică și internet. | + | Pentru început, vrem să ne acomodăm cu cele mai importante comenzi din linia de comandă pentru rețelistică și Internet. Vom folosi, pentru această secțiune **stația fizică**. Dacă lucrați acasă, veți folosi mașina virtuală ''uso''. |
- | + | ||
- | <note tip> | + | |
- | Avem și un [[uso:resurse:cheatsheet|cheatsheet]] pe care îl putem folosi ca să ne reamintim cele mai frecvente comenzi. | + | |
- | </note> | + | |
==== 0. Vizualizarea adresei IP ==== | ==== 0. Vizualizarea adresei IP ==== | ||
- | Stația din laborator are mai multe interfețe de rețea. Pentru a afișa detalii despre ele putem folosi comanda ''ip address show''. | + | Pentru a afișa detalii despre ele putem folosi comanda ''ip address show''. |
<code bash> | <code bash> | ||
- | + | student@uso:~$ ip a s | |
- | student@uso:~$ ip address show | + | |
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
Line 20: | Line 15: | ||
inet6 ::1/128 scope host | inet6 ::1/128 scope host | ||
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
- | 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 | + | 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 |
- | link/ether 00:0c:29:8b:37:c1 brd ff:ff:ff:ff:ff:ff | + | link/ether 08:00:27:49:1d:cd brd ff:ff:ff:ff:ff:ff |
- | inet 192.168.232.206/24 brd 192.168.232.255 scope global dynamic noprefixroute ens33 | + | inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3 |
- | valid_lft 982sec preferred_lft 982sec | + | valid_lft 83833sec preferred_lft 83833sec |
- | inet6 fe80::8b76:ddc8:61ad:15be/64 scope link noprefixroute | + | inet6 fe80::c91e:5bc3:9aa3:5c1e/64 scope link noprefixroute |
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
- | 3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 | + | 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 |
- | link/ether 00:0c:29:8b:37:cb brd ff:ff:ff:ff:ff:ff | + | link/ether 08:00:27:b1:36:c8 brd ff:ff:ff:ff:ff:ff |
- | inet 192.168.52.128/24 brd 192.168.52.255 scope global dynamic noprefixroute ens34 | + | inet 192.168.56.102/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8 |
- | valid_lft 983sec preferred_lft 983sec | + | valid_lft 1039sec preferred_lft 1039sec |
- | inet6 fe80::97a0:949d:33c8:526f/64 scope link noprefixroute | + | inet6 fe80::9927:3d0d:77b5:8ca9/64 scope link noprefixroute |
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
- | |||
</code> | </code> | ||
- | Observăm că avem 2 interfețe de rețea: ''ens33'' și ''ens34'', precum și interfața ''lo'' sau ''loopback'' (despre care vom vorbi în câteva momente). Fiecărei interfețe îi este asignată o adresă IP: ''192.168.232.206/24'' și ''192.168.52.128/24'', respetiv ''127.0.0.1/8'' pentru cea de loopback. (pe stațiile voastre cel mai probabil adresele IP ale primelor 2 interfețe vor fi diferite) | + | <note important> |
+ | Output-ul de mai sus va diferi probabil pe sistemele din laborator. Pot să fie alte nume de interfețe, alt număr de interfețe sau alte adrese IP. Pentru noi contează aici folosirea comenzii ''ip address show'' pentru aflarea adresei și înțelegerea rezultatului rulării comenzii. | ||
+ | </note> | ||
- | ''Localhost'' este un nume de host care înseamnă ''acest calculator'' și poate fi utilizat pentru accesarea propriilor servicii de rețea prin interfața să de ''loopback''. Practic, este un mod de a ne identifica pe noi înșine. Utilizarea interfeței de loopback evită placa de rețea. Mecanismul de loopback local poate fi util pentru testarea software-ului în timpul dezvoltării, independent de alte configurări de rețea. Spre exemplu, dacă avem un server web care rulează local, îl putem accesa la ''http://localhost/'' într-un browser. | + | Observăm că mai sus 2 interfețe "fizice" de rețea ''enp0s3'' și ''enp0s8'', precum și interfața ''lo'' sau //loopback// (despre care vom vorbi în câteva momente). Fiecărei interfețe îi este asignată o adresă IP: ''10.0.2.15/24'' și ''192.168.56.102/24'', respetiv ''127.0.0.1/8'' pentru cea de loopback. |
- | După cum am văzut și mai sus, localhost se rezolvă în adresa ip ''127.0.0.1''. | + | //localhost// este un nume de host care înseamnă **acest calculator** și poate fi utilizat pentru accesarea propriilor servicii de rețea prin interfața să de ''loopback''. Practic, este un mod de a ne identifica pe noi înșine. Utilizarea interfeței de loopback evită placa de rețea. Mecanismul de loopback local poate fi util pentru testarea software-ului în timpul dezvoltării, independent de alte configurări de rețea. Spre exemplu, dacă avem un server web care rulează local, îl putem accesa la ''http://localhost/'' într-un browser. |
- | <note> | + | După cum am văzut și mai sus, localhost se rezolvă în adresa IP ''127.0.0.1''. |
+ | <note important> | ||
In loc să scriem ''ip address show'', putem folosi prescurtarea ''ip a s''. | In loc să scriem ''ip address show'', putem folosi prescurtarea ''ip a s''. | ||
- | |||
</note> | </note> | ||
Line 51: | Line 47: | ||
Pentru a verifica dacă un anumit calculator poate fi accesat prin intermediul unei rețele de tip IP, putem folosi comanda ''ping''. | Pentru a verifica dacă un anumit calculator poate fi accesat prin intermediul unei rețele de tip IP, putem folosi comanda ''ping''. | ||
- | Ne putem da ping nouă înșine folosind interfața de loopback, adică adresa IP ''127.0.0.1''. (întrerupem cu CTRL+C după 2-3 pachete trimise) | + | Ne putem da ping nouă înșine folosind interfața de loopback, adică adresa IP ''127.0.0.1'', la fel ca în comanda de mai jos. |
+ | |||
+ | <note important> | ||
+ | În comanda de mai jos, și în alte comenzi, întrerupem rularea folosind combinația de taster ''Ctrl+c'' după 2-3 pachete trimise. | ||
+ | </note> | ||
<code bash> | <code bash> | ||
- | |||
student@uso:~$ ping 127.0.0.1 | student@uso:~$ ping 127.0.0.1 | ||
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. | PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. | ||
Line 64: | Line 63: | ||
3 packets transmitted, 3 received, 0% packet loss, time 2051ms | 3 packets transmitted, 3 received, 0% packet loss, time 2051ms | ||
rtt min/avg/max/mdev = 0.021/0.027/0.031/0.004 ms | rtt min/avg/max/mdev = 0.021/0.027/0.031/0.004 ms | ||
- | |||
- | |||
</code> | </code> | ||
- | Deoarece stațiile din laborator sunt în aceeași rețea, putem da ping unui coleg. El va trebui să ruleze ''ip a s'' pe stația lui și să ne zică adresa sa IP. Să presupunem de exemplu că adresa IP a colegului este ''192.168.232.206''. | + | Deoarece stațiile din laborator sunt în aceeași rețea, putem da ping unui coleg. El va trebui să ruleze ''ip a s'' pe stația lui și să ne zică adresa sa IP. Să presupunem de exemplu că adresa IP a colegului este ''192.168.232.206''; vom rula comanda: |
- | + | ||
<code bash> | <code bash> | ||
- | + | student@uso:~$ ping 192.168.232.206 | |
- | student@uso:~$ ping 192.168.232.206 | + | |
PING 192.168.232.206 (192.168.232.206) 56(84) bytes of data. | PING 192.168.232.206 (192.168.232.206) 56(84) bytes of data. | ||
64 bytes from 192.168.232.206: icmp_seq=1 ttl=64 time=0.022 ms | 64 bytes from 192.168.232.206: icmp_seq=1 ttl=64 time=0.022 ms | ||
Line 81: | Line 75: | ||
2 packets transmitted, 2 received, 0% packet loss, time 1029ms | 2 packets transmitted, 2 received, 0% packet loss, time 1029ms | ||
rtt min/avg/max/mdev = 0.022/0.025/0.029/0.006 ms | rtt min/avg/max/mdev = 0.022/0.025/0.029/0.006 ms | ||
- | |||
- | |||
</code> | </code> | ||
- | Putem da ping la un nume din internet, de exemplu ''google.ro''. Este de asemenea o metodă usoară de a determina adresa IP la care ''google.ro'' este rezolvat de către serverul de DNS. | + | Putem da ping la un nume din Internet, de exemplu ''google.ro''. Este de asemenea o metodă usoară de a determina adresa IP la care ''google.ro'' este rezolvat de către serverul de DNS. |
<code bash> | <code bash> | ||
- | |||
student@uso:~$ ping google.ro | student@uso:~$ ping google.ro | ||
PING google.ro (216.58.214.67) 56(84) bytes of data. | PING google.ro (216.58.214.67) 56(84) bytes of data. | ||
64 bytes from fra15s10-in-f3.1e100.net (216.58.214.67): icmp_seq=1 ttl=128 time=31.6 ms | 64 bytes from fra15s10-in-f3.1e100.net (216.58.214.67): icmp_seq=1 ttl=128 time=31.6 ms | ||
64 bytes from fra15s10-in-f3.1e100.net (216.58.214.67): icmp_seq=2 ttl=128 time=31.3 ms | 64 bytes from fra15s10-in-f3.1e100.net (216.58.214.67): icmp_seq=2 ttl=128 time=31.3 ms | ||
+ | [...] | ||
</code> | </code> | ||
==== 2. DNS ==== | ==== 2. DNS ==== | ||
- | Dacă tot am vorbit de DNS mai sus și am arătat o metodă ușoară de a afla adresa IP a lui ''google.ro'', este important de precizat că putem folosi comanda ''host'' pentru un DNS lookup sau reverse lookup. Vrem pentru început să facem un ''lookup'' pentru ''google.ro''. | + | Putem folosi comanda ''host'' pentru translatarea unui nume de domeniu în adresă IP și invers. Dacă dorim să facem translatarea în adresă IP a numelui ''google.ro'' vom folosi comanda: |
<code bash> | <code bash> | ||
- | |||
student@uso:~$ host google.ro | student@uso:~$ host google.ro | ||
google.ro has address 216.58.207.35 | google.ro has address 216.58.207.35 | ||
Line 110: | Line 100: | ||
google.ro mail is handled by 10 aspmx.l.google.com. | google.ro mail is handled by 10 aspmx.l.google.com. | ||
google.ro mail is handled by 40 alt3.aspmx.l.google.com. | google.ro mail is handled by 40 alt3.aspmx.l.google.com. | ||
- | |||
</code> | </code> | ||
- | Dacă vrem să știm cărui nume îi este asociat o adresă IP, folosim tot host astfel: | + | Dacă vrem să știm cărui nume îi este asociat o adresă IP, folosim tot ''host'' astfel: |
<code bash> | <code bash> | ||
- | |||
student@uso:~$ host 141.85.227.151 | student@uso:~$ host 141.85.227.151 | ||
151.227.85.141.in-addr.arpa domain name pointer acs.pub.ro. | 151.227.85.141.in-addr.arpa domain name pointer acs.pub.ro. | ||
- | |||
</code> | </code> | ||
+ | În rezultatul rulării comenzii de mai sus, observă că adresa IP ''141.85.227.151'' corespunde numelui ''acs.pub.ro''. | ||
- | Și observăm că IP-ul ''141.85.227.151'' corespunde numelui ''acs.pub.ro''. | + | Apare întrebarea "de unde știe calculatorul nostru să afle adresa IP a lui ''acs.pub.ro''?". Răspunsul este fișierul de configurare ''/etc/resolv.conf''. Aici sunt configurate serverele DNS pe care calculatorul nostru le va folosi. Astfel, dacă dorim să aflăm care este serverul DNS al stație noastre folosim comanda |
- | + | ||
- | Apare întrebarea "de unde știe calculatorul nostru să afle adresa IP a lui ''acs.pub.ro''?". Răspunsul este fișierul de configurare ''/etc/resolv.conf''. Aici sunt configurate name server-ele pe care calculatorul nostru le va folosi. Un exemplu de fișier de configurare: | + | |
- | + | ||
- | Dacă vrem să știm cărui nume îi este asociat o adresa IP, folosim tot host astfel: | + | |
<code bash> | <code bash> | ||
+ | student@uso:~$ cat /etc/resolv.conf | ||
+ | [...] | ||
+ | nameserver 127.0.0.53 | ||
+ | [...] | ||
+ | </code> | ||
+ | Liniile care conțin șirul ''nameserver'' din fișierul ''/etc/resolv.conf'' conțin serverele de nume. În cazul de fața este vorba de ''127.0.0.53''. | ||
- | nameserver 192.168.0.100 | + | <note important> |
- | nameserver 8.8.8.8 | + | În anumite configurații de sistem, editarea fișierului ''/etc/resolv.conf'' poate fi problematică. Anumite servicii pot modifica fișierul. Aveți grijă dacă este cea mai bună cale pentru configurarea serviciului DNS. |
- | nameserver 8.8.4.4 | + | </note> |
- | </code> | + | ==== 3. Gateway și rutare în Internet ==== |
- | ==== 2. Gateway si rutare in internet ==== | + | În momentul de față, stația noastră se află într-o rețea aflată în spatele unui gateway (numit și ruter). La rândul său, acest ruter se poate afla într-o altă rețea și tot așa. Când trimitem un pachet în Internet (de exemplu folosind ''ping''), acesta va fi rutat de mai multe ori prin diferite rețele până va ajunge la destinație. Aceste rutări să numesc //hopuri//, iar pentru a vedea prin câte hopuri trece un pachet putem folosi utilitarul ''traceroute''. |
- | În momentul de față, stația noastră se află într-o rețea privată aflată sub un router. La rândul lui acest router se poate afla într-o altă rețea și tot așa. Când trimitem un pachet în internet (de exemplu un ping), el va fi rutat de mai multe ori prin diferite rețele până va ajunge la destinație. Aceste rutări să numesc 'hopuri', iar pentru a vedea prin câte hopuri trece un pachet putem folosi utilitarul ''traceroute''. (Dacă nu există, rulați ''sudo apt-get install traceroute''). Exemplu de output pentru comanda traceroute: | + | <note> |
+ | Dacă nu merge comanda ''traceroute'' atunci probabil utilitarul nu există. Pentru a-l instala folosim, în linia de comandă, comanda ''sudo apt-get install traceroute'' | ||
+ | </note> | ||
+ | Exemplu de output pentru comanda ''traceroute'' este mai jos: | ||
<code bash> | <code bash> | ||
- | |||
student@uso:~$ traceroute google.ro | student@uso:~$ traceroute google.ro | ||
Line 157: | Line 148: | ||
9 29 ms 29 ms 29 ms Fra.RoNIX.Ro [217.156.113.94] | 9 29 ms 29 ms 29 ms Fra.RoNIX.Ro [217.156.113.94] | ||
10 30 ms 30 ms 30 ms ^C | 10 30 ms 30 ms 30 ms ^C | ||
- | |||
</code> | </code> | ||
- | Spuneam mai devreme că stația noastră se află într-o rețea privată. Pentru a ieși în internet, este nevoie de un nod în această rețea care să aibe rolul de ''default gateway''. În cazul nostru este un router ce trimite mai departe în afara rețelei pachetele trimise din interiorul ei, dar și ruteaza pachetele venite din exterior către stația destinație din rețeaua privată. | + | Pentru a "ieși în Internet", stația noastră are nevoie de un nod în această rețea care să aibă rolul de **gateway**. În cazul nostru este un ruter ce trimite mai departe în afara rețelei pachetele trimise din interiorul ei, dar și ruteaza pachetele venite din exterior către stația destinație din rețeaua noastră. |
- | Pentru a vedea adresa IP a 'default gateway-ului' folosim comanda ''ip route'' sau ''ip r'' (prescurtat). | + | Pentru a vedea adresa IP a gateway-ului folosim comanda ''ip route show'' sau ''ip r s'' (prescurtat), ca mai jos |
<code bash> | <code bash> | ||
+ | student@uso:~$ ip r s | ||
+ | default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 | ||
+ | [...] | ||
+ | </code> | ||
+ | În rezultatul rulării comenzii, linia care conține șirul //default// (de la //default gateway//) conține adresa IP a gateway-ului. În cazul de față adresa IP a gateway-ului este ''10.0.2.2''. | ||
+ | ==== 4. dhclient și ssh pe mașina virtuală ==== | ||
- | student@uso:~$ ip route | + | Presupunem că am conectat laptopul personal la o rețea de Internet, dar observăm că nu avem și o adresa IP atribuită interfeței de rețea. O modalitate ușoară de a realiza automat configurarile de rețea este să folosim protocolul DHCP (//Dynamic Host Configuration Protocol//) care configurează automat cei patru parametri de de rețea (adresă IP, mască, gateway, server DNS). Pentru aceasta folosim comanda ''dhclient'', primind, eventual, ca parametru interfața de rețea. |
- | default via 192.168.232.2 dev ens33 proto dhcp metric 100 | + | |
+ | De exemplu, dacă accesăm mașina virtuală ''tom'' și vedem interfețele de rețea, obținem rezultatul de mai jos: | ||
+ | <code bash> | ||
+ | student@tom:~$ ip a s enp0s8 | ||
+ | 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 | ||
+ | link/ether 08:00:27:c9:b1:53 brd ff:ff:ff:ff:ff:ff | ||
</code> | </code> | ||
- | Observăm că în acest caz, default gateway-ul are adresa IP ''192.168.232.2''. | + | Vedem în rezultatul comenzii de mai sus că interfața ''enp0s8'' a stației ''tom'' este ''DOWN'' (nu este activă) și nu are adresă IP configurată. Pentru a configura adresă IP pe interfață rulăm comanda: |
- | Adresa IP a calculatorului nostru este una privată în acest moment. Este util să știm și ce adresa publică avem, mai exact adresa cu care ieșim în internet. Această adresa IP publică nu este știută local, și deci este nevoie de un request extern pentru a o afla. Cel mai simplu este să folosim utilitarul ''curl'' și pagina ''ipinfo.io/ip''. | + | <code bash> |
+ | student@tom:~$ sudo dhclient enp0s8 | ||
+ | </code> | ||
+ | Iar acum urmărim din nou configurația interfeței ''enp0s8'': | ||
<code bash> | <code bash> | ||
- | + | student@tom:~$ ip a s enp0s8 | |
- | student@uso:~$ curl ipinfo.io/ip | + | 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 |
- | 141.85.0.122 | + | link/ether 08:00:27:c9:b1:53 brd ff:ff:ff:ff:ff:ff |
+ | inet 192.168.56.103/24 brd 192.168.56.255 scope global enp0s8 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | inet6 fe80::a00:27ff:fec9:b153/64 scope link | ||
+ | valid_lft forever preferred_lft forever | ||
</code> | </code> | ||
+ | În această situație avem configurată adresa IP ''192.168.56.103'', configurată prin DHCP. | ||
- | ==== 3. Dhclient si ssh pe mașina virtuală ==== | + | De multe ori ne este incomod să lucrăm în interfața din linia de comandă a unei mașini virtuale (precum cea de teme); de exemplu nu puteam da COPY/PASTE de acolo. O modalitate bună de a scapa de acest neajuns este să ne conectăm de pe stația locală pe mașină virtuală prin ''ssh''. |
- | + | ||
- | Presupunem că am conectat laptopul personal la o rețea de internet, dar observăm că nu avem și o adresa IP atribuită interfeței de rețea. O modalitate ușoară de a realiza automat configurarile de rețea este să folosim ''dhclient''. Se folosește de protocolul DHCP pentru a configura interfața respectivă. | + | |
- | + | ||
- | De multe ori ne este incomod să lucrăm în CLI-ul din mașina virtuală, de exemplu nu puteam da COPY/PASTE de acolo. O modalitate bună de a scapa de problema asta este să ne conectăm de pe stația locală pe mașină virtuală prin ''ssh''. Pentru acest lucru este nevoie să aflăm adresa IP a mașinii virtuale (cum am arătat mai sus) și să rulăm următoarea comandă: (introducem parola ''student'') | + | |
+ | De exemplu, pentru a ne conecta de pe sistemul fizic (sau de pe mașina virtuală ''uso'') pe mașina virtuală ''tom'', care știm că are adresa IP ''192.168.56.103'', vom folosi comanda: | ||
<code bash> | <code bash> | ||
- | + | student@uso:~$ ssh student@192.168.56.103 | |
- | student@uso:~$ ssh student@192.168.232.206 | + | The authenticity of host '192.168.56.103 (192.168.56.103)' can't be established. |
+ | ECDSA key fingerprint is SHA256:ykH7HM4AmSgzkrUuQYp5l8uq/8I8COPFv7JLjYvyuIk. | ||
+ | Are you sure you want to continue connecting (yes/no)? yes | ||
+ | Warning: Permanently added '192.168.56.103' (ECDSA) to the list of known hosts. | ||
+ | student@192.168.56.103's password: | ||
+ | Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-33-generic x86_64) | ||
+ | [...] | ||
+ | student@tom:~$ | ||
</code> | </code> | ||
+ | Observăm prin schimbarea prompt-ului că după rularea comenzii și introducerea parolei ''student'' suntem acum pe stația ''tom''. |