Dacă nu se precizează altfel, în această secțiune veți rula comenzile pe stația fizică (sau pe mașina virtuală uso
dacă lucrați acasă).
ip
este o comandă de Linux folosită pentru a afișa interfețele de rețea disponibile pe sistemul curent de operare. De aici putem afla informații esențiale legate de conectivitatea la internet.
Pentru a afla adresa IP și masca de rețea a interfețelor sistemului folosim comanda
student@uso:~$ ip a s 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 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 08:00:27:49:1d:cd brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:b1:36:c8 brd ff:ff:ff:ff:ff:ff inet 10.0.2.4/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s8 valid_lft 666sec preferred_lft 666sec inet6 fe80::9927:3d0d:77b5:8ca9/64 scope link noprefixroute valid_lft forever preferred_lft forever
Parametrii a
și s
sunt prescurtările de la address
și show
. Astfel, semnificația comenzii ip a s
se traduce în ip address show
.
Interfața loopback (cu numele lo
) este o interfață virtuală (nu una fizică). Scopul acestei interfețe este de a întoarce pachetele trimise către sistemul local, de obicei cu rol în testare.
Putem trimite comenzii ip a s
ca parametru numele unei interfețe de rețea pentru a afișa informații doar despre acea interfață de rețea. Comanda de mai jos afișează informații despre interfața de loopback (lo
):
student@uso:~$ ip a s lo 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 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever
La câmpul inet
din rezultatul rulării comenzii, putem observa adresa IP 127.0.0.1
. De obicei, aceasta este adresa interfaței de loopback.
There's no place like 127.0.0.1
. Pentru că fiecare sistem are propria interfață virtuală loopback, pe care o numim “acasă”
Putem verifica conectivitatea la internet folosind utilitarul ping
. Acesta transmite pachete către o anumită adresa (dată ca parametru). Acest utilitar ne arată dacă pachetele trimise ajung la destinație și în cât timp. O adresă pe care o putem folosi întotdeauna este 8.8.8.8
(o adresă de la Google).
student@uso:~$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=121 time=17.324 ms 64 bytes from 8.8.8.8: icmp_seq=1 ttl=121 time=18.513 ms ^C --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 17.324/17.919/18.513/0.594 ms
Putem observa ca pachetele noastre au ajuns la destinație în 17ms. De aici putem trage concluzia că avem o conexiune la internet funcțională.
[1a] Aflați adresa IP a sistemului fizic (nu lo
) și dați un ping către adresa IP.
[1b] Aflați adresele IP ale colegilor (minim 2) și dați ping către acele adrese IP.
Atunci când apelăm utilitarul ping
cu o anumită adresă din internet, se trimit pachete până la aceasta. Dacă acestea nu ajung la destinație, ce concluzie putem trage? Că nu avem interfața configurată corespunzător? Dar dacă furnizorul de Internet (să spunem RDS) are o problemă sau nu ne-am plătit factura la internet? Trebuie să putem afla unde este problema. Care este punctul în care pachetele noastre se pierd. Putem afla această informație folosind utilitarul traceroute
, la fel ca mai jos:
student@uso:~$ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets 1 danubiu12.lan (192.168.255.1) 3.677 ms 0.870 ms 0.808 ms 2 10.0.0.1 (10.0.0.1) 1.991 ms 2.075 ms 1.908 ms 3 10.30.1.209 (10.30.1.209) 3.720 ms 2.215 ms 1.959 ms 4 10.220.137.28 (10.220.137.28) 21.973 ms 10.220.137.30 (10.220.137.30) 15.755 ms 10.220.128.72 (10.220.128.72) 15.574 ms 5 213-154-130-234.rdsnet.ro (213.154.130.234) 17.572 ms 16.963 ms 18.208 ms 6 74.125.242.241 (74.125.242.241) 17.910 ms 18.196 ms 16.700 ms 7 108.170.238.135 (108.170.238.135) 15.377 ms 108.170.225.23 (108.170.225.23) 18.141 ms 209.85.142.19 (209.85.142.19) 19.790 ms 8 google-public-dns-a.google.com (8.8.8.8) 16.774 ms 16.613 ms 15.950 ms
Putem observa calea pachetelor de la gateway-ul local (192.168.255.1
, va fi altul în cazul vostru) până la serverele Google.
Putem apela același utilitar și cu un nume de domeniu:
student@uso:~$ traceroute google.com traceroute to google.com (216.58.209.174), 64 hops max, 52 byte packets 1 danubiu12.lan (192.168.255.1) 1.115 ms 0.817 ms 0.835 ms 2 10.0.0.1 (10.0.0.1) 2.068 ms 2.027 ms 1.991 ms 3 10.30.1.209 (10.30.1.209) 2.134 ms 3.027 ms 2.515 ms 4 10.220.132.8 (10.220.132.8) 16.611 ms 10.220.128.66 (10.220.128.66) 14.901 ms 10.220.128.62 (10.220.128.62) 16.787 ms 5 213-154-130-234.rdsnet.ro (213.154.130.234) 17.705 ms 16.165 ms 17.994 ms 6 74.125.242.241 (74.125.242.241) 16.531 ms 18.200 ms 17.689 ms 7 66.249.94.123 (66.249.94.123) 18.622 ms 66.249.94.163 (66.249.94.163) 17.212 ms 16.840 ms 8 bud02s21-in-f14.1e100.net (216.58.209.174) 15.921 ms 16.906 ms 16.412 ms
Ieșirea comenzii afișează și adresa publică a site-ului google.com
.
[2a] Afișați calea urmată de mașina virtuală către numele de domeniu realitatea.net
, către gandul.info
și către bbc.com
. Observați care este mai apropiată (către care sunt mai puține hop-uri).
Atunci când pachetele pleacă către Internet, sistemul trebuie să știe cui îi va trimite pachetele în mod implicit, adică să știe gateway-ul
. Această configurare se poate vedea folosind utilitarul ip
cu opțiunea route show
, ca mai jos:
student@uso:~$ ip r s default via 10.0.2.1 dev enp0s8 proto dhcp metric 100 [...]
Mai sus am folosit forma prescurtată a comenzii ip route show
, adică ip r s
.
Putem observa că implicit pachetele se duc către adresa IP 10.0.2.1
.
[3a] Afișați gateway-ul de pe mașina virtuală tom
și de pe mașina virtuală jerry
.
Destinațiile din Internet sunt întotdeauna adrese IP. Pentru ca ne este greu sa reținem aceste adrese, se face o mapare între un nume și o adresă IP folosind seviciul DNS (Domain Name System). Dacă destinația este un nume, se face o cerere DNS pentru a afla adresa IP.
Putem vedea adresa serverului DNS in /etc/resolv.conf
, folosind comanda:
student@uso:~$ cat /etc/resolv.conf [...] nameserver 127.0.0.53
Putem face interogări la serverul DNS folosind utilitarul host
. Interogare directă este atunci când folosind numele de domeniu și obținem adresa IP; interogare inversă este atunci când folosim adresa IP ca să aflăm numele de domeniu. Mai jos sunt două exemple de interogare directă urmate de două exemple de interogare inversă:
student@uso:~$ host fsf.org fsf.org has address 208.118.235.174 fsf.org has IPv6 address 2001:4830:134:4::a fsf.org mail is handled by 10 mail.fsf.org. student@uso:~$ host kernel.org kernel.org has address 198.145.29.83 kernel.org mail is handled by 10 mail.kernel.org. student@uso:~$ host swarm.cs.pub.ro swarm.cs.pub.ro has address 141.85.227.118 swarm.cs.pub.ro mail is handled by 10 swarm.cs.pub.ro. student@uso:~$ host 209.132.180.180 180.180.132.209.in-addr.arpa domain name pointer proxy01.gnome.org.
[4a] Afișați serverul DNS de pe mașina virtuală tom
.
[4b] Dați ping în facebook.com
folosind numele și apoi folosind adresa IP.
[4c] Aflați adresa IP pentru numele de domeniu ocw.cs.pub.ro
, studenti.pub.ro
, insecure.org
, eu.org
.
Un mod semnificativ mai ușor de a folosi o mașina virtuală este următorul: având un terminal pe mașina fizică ne conectăm prin SSH la mașina virtuală. Astfel, trecerea de la mașina fizică la cea virtuală se reduce la schimbarea de tab-uri in terminal. Un alt avantaj este că putem folosi copy-paste fără probleme din terminal.
Pentru a ne conecta la mașina virtuală avem nevoie de 2 informații:
ip a s
pentru a afla adresa IP)
Sintaxa este de forma ssh <user>@<IP>
, unde <user>
este numele de utilizator iar <IP>
este numele de domeniu sau adresa IP corespunzătoare.
Vom face o conexiune SSH între stația fizică și mașina virtuală tom
.
tom
va trebui să avem interfața activată, pe mașina virtuală tom
. Pentru aceasta rulați comanda
student@tom:~$ sudo dhclient enp0s8
care va asigura obținerea, prin DHCP, a parametrilor de rețea pentru interfața enp0s8
.
Folosind comanda
student@tom:~$ ip a s enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:71:db:21 brd ff:ff:ff:ff:ff:ff inet 192.168.56.101/24 brd 192.168.56.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe71:db21/64 scope link valid_lft forever preferred_lft forever
aflăm adresa IP a mașinii virtuale tom
. În cazul de față este vorba de 192.168.56.101
.
Este posibil ca adresa IP pentru mașina virtuală tom
să fie alta în rularea voastră. Folosiți în continuare adresa IP obținută din rularea voastră.
Pentru a ne conecta de pe stația fizică la mașina virtuală tom
folosim comanda:
student@uso:~$ ssh student@192.168.56.101 The authenticity of host '192.168.56.101 (192.168.56.101)' can't be established. ECDSA key fingerprint is SHA256:sqi88F/jVZ+RiHMMkLGXidACSAHlfXHos2d+gwWcqoY. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.56.101' (ECDSA) to the list of known hosts. student@192.168.56.101's password: [...] student@tom:~$ </code bash> Ne-am conectat prin SSH la mașina virtuală ''tom'', lucru pe care îl vedem în prompt. Pentru a ne deconecta de la mașina virtuală folosim comanda ''exit'' sau comanda ''logout'' sau folosim combinația de taste ''Ctrl+d'': <code bash> student@tom:~$ logout Connection to 192.168.56.101 closed. student@uso:~$
[5a] Conectația la stația locală (conexiune pe interfața de loopback). Apoi deconectați-vă.
[5b] Adăugați un utilizator nou pe mașina tom
. Conectați-vă de pe mașina locală pe mașina tom
cu noul utilizator creat.
[5c] Conectați-vă la mașina virtuală jerry
de pe sistemul fizic.
[5d] Conectați-vă de pe mașina virtuală tom
la mașina virtuală jerry
.
Utilitarul wget
descarcă conținutul unei pagini web. Un exemplu de folosire este:
student@uso:~$ wget http://ipecho.net/plain --2018-09-02 16:08:55-- http://ipecho.net/plain Resolving ipecho.net (ipecho.net)... 146.255.36.1 Connecting to ipecho.net (ipecho.net)|146.255.36.1|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/plain] Saving to: ‘plain.1’ plain.1 [ <=> ] 13 --.-KB/s in 0s 2018-09-02 16:08:55 (1,48 MB/s) - ‘plain.1’ saved [13] student@uso:~$ ls plain plain student@uso:~$ cat plain 188.26.36.205
Dacă vrem să descărcăm direct
student@uso:~$ wget -qO- http://ipecho.net/plain ; echo 188.26.36.205
[6a] Descărcați arhiva folosind wget
de la link-ul http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2.
[6b] Descărcați capitolul 11 din cartea de USO de la link-ul http://elf.cs.pub.ro/uso/res/carte/.