Basics

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ă).

1. Interfețe de rețea

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.

De aici și glumele de pe internet cu There's no place like 127.0.0.1. Pentru că fiecare sistem are propria interfață virtuală loopback, pe care o numim “acasă”

Conectivitatea la Internet

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.

2. Urmărirea pachetelor

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).

3. Default gateway

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.

4. DNS

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.

5. Conexiune SSH

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:

  • numele utilizatorului (username) cu care vrem să fim autentificați pe mașina virtuală
  • adresa mașinii virtuale (putem folosi 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.

Pentru a face o conexiune SSH între stația fizică și mașina virtuală 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.

6. wget

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/.

uso/laboratoare/new/09-net/basics.txt · Last modified: 2019/11/27 14:55 by giorgiana.vlasceanu
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