Table of Contents

Demo

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.

0. Vizualizarea adresei IP

Pentru a afișa detalii despre ele putem folosi comanda ip address show.

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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:49:1d:cd brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 83833sec preferred_lft 83833sec
    inet6 fe80::c91e:5bc3:9aa3:5c1e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
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 192.168.56.102/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 1039sec preferred_lft 1039sec
    inet6 fe80::9927:3d0d:77b5:8ca9/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

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.

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.

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.

După cum am văzut și mai sus, localhost se rezolvă în adresa IP 127.0.0.1.

In loc să scriem ip address show, putem folosi prescurtarea ip a s.

1. 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, la fel ca în comanda de mai jos.

În comanda de mai jos, și în alte comenzi, întrerupem rularea folosind combinația de taster Ctrl+c după 2-3 pachete trimise.

student@uso:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.029 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.031 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2051ms
rtt min/avg/max/mdev = 0.021/0.027/0.031/0.004 ms

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:

student@uso:~$ ping 192.168.232.206
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=2 ttl=64 time=0.029 ms
^C
--- 192.168.232.206 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1029ms
rtt min/avg/max/mdev = 0.022/0.025/0.029/0.006 ms

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.

student@uso:~$ ping google.ro
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=2 ttl=128 time=31.3 ms
[...]

2. DNS

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:

student@uso:~$ host google.ro
google.ro has address 216.58.207.35
google.ro has IPv6 address 2a00:1450:4001:814::2003
google.ro mail is handled by 50 alt4.aspmx.l.google.com.
google.ro mail is handled by 30 alt2.aspmx.l.google.com.
google.ro mail is handled by 20 alt1.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.

Dacă vrem să știm cărui nume îi este asociat o adresă IP, folosim tot host astfel:

student@uso:~$ host 141.85.227.151
151.227.85.141.in-addr.arpa domain name pointer acs.pub.ro.

În rezultatul rulării comenzii de mai sus, observă că adresa IP 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

student@uso:~$ cat /etc/resolv.conf
[...]
nameserver 127.0.0.53
[...]

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.

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

3. Gateway și rutare în 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.

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

Exemplu de output pentru comanda traceroute este mai jos:

student@uso:~$ traceroute google.ro
 
Tracing route to google.ro [172.217.21.195]
over a maximum of 30 hops:
 
  1    <1 ms    <1 ms     2 ms  192.168.0.1
  2    <1 ms    <1 ms     1 ms  10-22-4-1.eregie.pub.ro [10.22.4.1]
  3     1 ms     1 ms     1 ms  r-c3550-l3-vlan11.bucharest.roedu.net [141.85.0.65]
  4     1 ms     1 ms     1 ms  141.85.133.65
  5     1 ms     1 ms     1 ms  po-23.acc1.buc.roedu.net [37.128.225.225]
  6     5 ms     2 ms     3 ms  bu-13.core2.buc.roedu.net [37.128.232.177]
  7     3 ms     3 ms     3 ms  hu-0-0-0-0.core3.nat.roedu.net [37.128.239.101]
  8     1 ms     2 ms     1 ms  te-0-6-0-1.peers1.nat.roedu.net [37.128.239.42]
  9    29 ms    29 ms    29 ms  Fra.RoNIX.Ro [217.156.113.94]
 10    30 ms    30 ms    30 ms  ^C

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 gateway-ului folosim comanda ip route show sau ip r s (prescurtat), ca mai jos

student@uso:~$ ip r s
default via 10.0.2.2 dev enp0s3 proto dhcp metric 100
[...]

Î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ă

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.

De exemplu, dacă accesăm mașina virtuală tom și vedem interfețele de rețea, obținem rezultatul de mai jos:

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

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:

student@tom:~$ sudo dhclient enp0s8

Iar acum urmărim din nou configurația interfeței enp0s8:

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: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

În această situație avem configurată adresa IP 192.168.56.103, configurată prin DHCP.

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.

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:

student@uso:~$ ssh student@192.168.56.103
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:~$

Observăm prin schimbarea prompt-ului că după rularea comenzii și introducerea parolei student suntem acum pe stația tom.