Laborator 08 - Configurări de rețea

Suport laborator

Link-uri utile iproute2:

Extra: Motivații pentru care suita ifconfig nu se mai folosește:

Resurse laborator

Pentru rezolvarea exercițiilor aveți nevoie de cele trei mașini virtuale ce se găsesesc, pe calculatoarele din EG306 pe partiția de 10 GB.

Mașinile virtuale se pot descărca și din în repository-ul facultății: http://repository.grid.pub.ro/cs/uso/2015-2016/lab08/

Credențialele de autentificare pentru toate maşinile virtuale sunt: utilizator student, parola student.

Verificați existența lor pe mașina de lucru in directorul /mnt/sda5. Dacă nu există, chemați asistentul sau descărcați-le chiar voi pe parcursul demo-ului:

student@uso:~$ ls -lah /mnt/sda5

Demo

1. Formatul comenzii ''ip''

În acest laborator vom folosi suita iproute2, respectiv comanda ip. Sintaxa generală este:

ip OBJECT COMMAND
ip [options] OBJECT COMMAND
ip OBJECT help

Obiectele cu care vom lucra în general la USO sunt:

OBJECT Forma abreviată Descriere
link l Network device și stadiul legăturii
address addr sau a adresă IPv4 sau IPv6
route r Rută (gateway)

Observați că obiectele au și o formă abreviată pentru a ne face comenzile mai scurte. De exemplu comanda ip address show se transformă, spre exemplu, în ip a s.

2. Sumar al comenzilor importante

  • Cum adaug o adresă IP pe o interfață?
ip address add 192.168.1.1/24 dev eth0

Pentru modificare se pot folosi {add | change | replace}

  • Cum șterg o adresă IP pe o interfață?
ip address del IFADDR dev STRING
  • Cum afișez adresa IP a unei interfațe?
 ip address show dev eth0 
  • Cum afișez informații despre toate interfețele?
    • Toate interfețele: ip address show
    • Doar cele active: ip address show up sau ip link show up
  • Cum adaug default gateway?
 ip route add default via 10.10.10.1 
  • Cum șterg default gateway?
 ip route delete 10.0.1.0/25 via 10.10.10.1 
  • Cum afișez default gateway-ul?
 ip route show 
  • Cum actualizez server-ul DNS?
    • O variantă: editare /etc/resolv.conf
    • Altă variantă: /etc/network/interfaces (pe sisteme Debian-based, opțiunea dns-nameservers)
  • Cum activez o interfață de rețea?
ip link set eth0 up

3. Configurarea rețelei în Linux

3.1. Interfețe de rețea

Interfețele de rețea reprezintă dispozitivele prin intermediul cărora un host se poate conecta la o rețea de calculatoare. Cele mai întâlnite sunt plăcile de rețea Ethernet care sunt nelipsite din aproape orice calculator. Alte exemple de interfețe de rețea sunt adaptoarele WiFi sau interfețele virtuale care, chiar dacă nu conectează fizic un calculator la o rețea, pot participă la interconectarea calculatoarelor (ex: interfețe folosite în virtualizare sau pentru tunelare).

Cel mai simplu mod de a determina interfețele de rețea prezente pe un host este de a rula comanda ip address show:

student@uso:~$ ip address show
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:1c:06:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.103/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::beae:c5ff:fe1c:681/64 scope link 
       valid_lft forever preferred_lft forever
[...]

Ce informații (din curs) observați în output-ul de mai sus?

Pentru a vedea informații doar despre o interfață de rețea:

student@uso:~$ ip address show eth0
student@uso:~$ ip address show dev eth0

Comanda de mai sus afișează absolut toate interfețele de rețea din sistem (inclusiv cele neconfigurate/inactive). Pentru a vedea doar interfețele de rețea funcționale (cu legătură activă) folosim comanda:

student@uso:~$ ip link show up
[...]
 
student@uso:~$ ip address show up
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether bc:ae:c5:1c:06:81 brd ff:ff:ff:ff:ff:ff
[...]

Ce diferență este între output-ul celor două comenzi? Notă: am folosit două obiecte diferite (link vs. address).

Inspectarea tabelei de rutare (pentru gateway) se face folosind:

student@uso:~$  ip route show
default via 192.168.1.1 dev eth0  proto static 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.103  metric 1 
[...]

Observați pe a doua linie, prima coloană cum este specificată rețeaua din care face parte gateway-ul.

3.2. Configurări temporare

Configurările inițiale de rețea ale unei interfețe pot fi modifcate în diferite moduri: prin schimbarea adresei IP și/sau a măștii de rețea, prin schimbarea rutei implicite sau a serverului DNS. Dacă modificările nu persistă după un restart al sistemului spunem că aveam de-a face cu o configurare temporară.

Acest tip de configurare este util în momentul în care se experimentează cu diferite opțiuni sau atunci când apare o situație neobișnuită și configurarea implicită a interfețelor trebuie schimbată, de exemplu, dacă gateway-ul obișnuit (provider-ul de Internet) este inaccesibil temporar și avem la dispoziție un gateway alternativ (conexiunea 3G) am dori să schimbăm ruta implicită (default gateway) pentru a restabili conexiunea cu Internetul.

3.2.1 Statice

Sintaxa generală folosind iproute2 este:

ip address add {ip_addr/mask} dev {interface}

Pentru a configura static și temporar interfața eth0 cu adresa 192.168.1.12 și masca de rețea 24 (255.255.255.0) folosim comanda următoare:

student@uso:~$ sudo ip address add 192.168.1.12/24 dev eth0

Observați că modificarea configurației unei interfețe trebuie făcută ca root prin prefixarea comenzii cu sudo, în vreme ce pentru inspectarea configurațiilor o puteam face și fără privilegii.

O altă comandă care poate fi folosită pentru configurări temporare este route. Cu ajutorul acesteia putem modifica default gateway (ruta implicită) a unei rețele astfel:

student@uso:~$ sudo ip route add default via 192.168.2.2

Se observă că și modificarea default gateway necesită privilegii de root și trebuie prefixată cu sudo.

Un default gateway trebuie să se afle întotdeauna în aceeași rețea cu host-ul. Cu alte cuvinte ambele trebuie să aibă aceeași mască de rețea. În caz contrar se va obține un mesaj de eroare care ne atenționeză că rețeaua gateway-ului nu este accesibilă:

student@uso:~$ sudo ip route add 192.168.1.0/24 via 10.0.0.15
RTNETLINK answers: Network is unreachable

3.2.2 Dinamice

Spre deosebire de comenzile anterioare, care foloseau valori statice (constante) pentru parametrii de configurare, o configurare dinamică presupune că aceste valori se determină automat prin diferite mecanisme. Un astfel de mecanism este protocolul DHCP (Dynamic Host Configuration Protocol). Configurarea automată a unei interfețe de rețea prin DHCP poate fi făcută cu utilitarul dhclient. Acesta primește ca parametru numele interfeței care se vrea a fi configurată:

student@uso:~$ sudo dhclient eth0

Configurările obișnuite care se obțin prin DHCP sunt: adresa IP și masca de rețea, default gateway, precum și server DNS.

3.3. Configurări permanente

Configurarea permanentă presupune că setările interfețelor de rețea vor fi disponibile și după un restart al sistemului. Acest efect se obțiune prin salvarea configurațiilor în cadrul unor fișiere. Sistemele bazate pe Ubuntu/Debian folosesc în mod convențional fișierul /etc/network/interfaces pentru salvarea configurațiilor de adresă IP, mască de rețea și default gateway și fișierul /etc/resolv.conf pentru salvarea adresei serverului DNS.

Pentru a activa o configurație persistentă a unei interfețe folosim comanda

sudo ifup <INTERFACE_NAME>

unde <INTERFACE_NAME> este numele interfeței. De exemplu, pentru a activa o configurație persistentă a interfeței eth0 folosimd comanda

sudo ifup eth0

La fel, pentru dezactivarea unei configurații persisente a unei interfețe folosim comanda

sudo ifup <INTERFACE_NAME>

Pe unele sisteme Linux configurarea interfețelor de rețea este administrată de un serviciu de background numit NetworkManager. Acest daemon ne oferă o configurare facilă a interfețelor de rețea, în special a adaptoarelor WiFi și a diferitelor modem-uri 3G/4G. Este posibil însă ca el să interfereze cu modul convențional de configurare a interfețelor: comenzi temporare și fișiere de configurare. Acesta poate fi oprit, în caz de probleme, prin comanda:

student@uso:~$ sudo service network-manager stop

3.3.1. Statice

Pentru a configura o interfață în mod permanent, static, trebuie să adăugăm în fișierul /etc/network/interfaces o intrare similară cu:

auto eth0
iface eth0 inet static
    address 192.168.0.2
    netmask 255.255.255.0
    gateway 192.168.0.1

Linia iface eth0 inet static specifică interfața de configurat (eth0) și metoda de configurare (statică), linia address 192.168.0.2 specifică adresa pe care sa o primească interfața, linia netmask 255.255.255.0. specifică ce mască de rețea să primească interfața, iar linia gateway 192.168.0.1 specifică care este adresa default gateway-ului.

Ștergerea completă și sigură a configurațiilor interfeței se face folosind perechea de comenzi

sudo ip address flush dev eth0
sudo ip link set dev eth0 down
student@uso:~$ ip address show
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          [...]
          
student@uso:~$ ip route show

student@uso:~$ sudo ip link set dev eth0 up

student@uso:~$  ip address show         
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ae:c5:1c:06:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
[...]


student@uso:~$ ip route show
default via 192.168.0.1  dev eth0  proto static 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.0.2  metric 1 

student@uso:~$ sudo ip link set dev eth0 down
student@uso:~$ ip address show up
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
[...]

Pentru a configura un server DNS, lucru posibil doar în mod permanent, trebuie să adăugăm în fișierul /etc/resolv.conf o linie de forma:

nameserver 8.8.8.8

Linia conține cuvântul cheie nameserver și adresa acestuia.

8.8.8.8 și 8.8.4.4 sunt două server-e DNS publice puse la dispoziție de către Google.

3.3.2. Dinamice

Pentru a configura o interfață în mod permanent, dinamic, trebuie să adăugăm în fișierul /etc/network/interfaces o intrare de forma:

auto eth0
iface eth0 inet dhcp

Linia specifică numele interfeței ce vrem să o configurăm (eth0) și tipul de configurare (dinamică, prin DHCP). Le fel ca înainte pentru a activa sau dezactiva configurarea folosim comenzile ifup, respectiv ifdown, urmate de numele interfeței.

O documentație completă a sintaxei fișierului de configurare /etc/network/interfaces se găsește pe wiki-ul Debian.

Rețineți că acest fișier îl găsiți doar pe distribuții derivate din Debian: Debian, Ubuntu, Linux Mint etc. Pe distribuții precum Fedora sau Arch Linux există alte abordări.

4. Comenzi de verificare

Sunt trei comenzi foarte importante pentru verificarea permanentă a configurațiilor de rețea:

  • Afișarea tuturor interfețelor
ip addr show
  • Afișarea tuturor interfețelor active (în starea LINK UP)
ip link show
  • Afișarea tabelei de rutare (e.g. pentru default gateway)
ip route show

Prima formă de troubleshooting când ceva nu merge este afișarea tabelei de rutare (ip route show sau prescurtat ip r s). Acolo vedem majoritatea celor mai frecvente greșeli:

  • omiterea ridicării interfeței
  • folosirea unei adrese greșite
  • folosirea unei măști greșite
  • omiterea configurării default gateway-ului
  • folosirea unui gateway greșit

Exerciții

La fiecare exercițiu citiți cu atenție care parte a exercițiului trebuie rezolvată pe mașina fizică, care trebuie rezolvată pe mașina virtuală dvorak, vivaldi sau verdi.

Credențialele de autentificare pentru toate maşinile virtuale sunt: utilizator student, parola student.

Mai jos sunt indicații generale, nu rulați aceste comenzi, țineți cont de ele pentru mai târziu.

Dezactivarea/deconfigurarea completă a unei interfețe, utilă pentru orice configurare de la zero (dinamică sau statică, temporară sau permanentă) se face cu ajutorul comenzilor:

sudo ip address flush dev <INTERFACE_NAME>
sudo ip link set dev <INTERFACE_NAME> down

unde <INTERFACE_NAME> este numele interfeței. De exemplu, dacă dorim să dezactivăm complet interfața eth0 vom folosi comenzile

sudo ip address flush dev eth0
sudo ip link set dev eth0 down

E recomandat să executați aceste comenzi înainte de a vă apuca efectiv de exercițiile de configurare pe orice interfață

Dacă pe parcursul laboratorului, primiți mesaje de forma:

sudo: unable to resolve host ...

ignorați-le. Sunt niște avertismente ale comenzii sudo care nu au afectează de fapt comanda rulată. Comanda a rulat cu succes dacă vă apare doar un mesaj precum cel de mai sus.

Orice configurare care necesită editarea unui fișier se va face folosind vim (sau nano dacă vă e mult mai ușor așa). Configurările făcute în editoare GUI nu vor fi punctate.

1. Pregătirea setup-ului (1.5p)

De rezolvarea acestui exercițiu depind toate celelalte. Chemați asistentul de fiecare dată când întâmpinați probleme majore. La final asigurați-vă, pentru o bună funcționare a calculatoarelor, că cele trei mașini virtuale au 256 MB RAM.

Deschideți VirtualBox și importați cele trei fișiere .ova.

Atenție: când importați mașina în VirtualBox, să bifați opțiunea Reinitialize the MAC address of all network cards!

De asemenea, pentru mașina virtuală dvorak avem nevoie de o interfață host-only. E posibil ca atunci când importăm mașina virtuală să primim eroarea Invalid settings detected. Soluția este că trebuie să adăugăm o interfață virtuală de rețea care să conecteze mașina fizică de cea virtuală. Din VirtualBox mergem la File –> Preferences –> Network. Mergem la tab-ul Host-only Networks și apăsăm butonul de add. Urmăriți detalii din poza de mai jos:

Porniți mașinile virtuale. După ce le porniți, observați că pe sistemul fizic aveți configurată acum interfața vboxnext0. Inspectați informațiile despre aceasta pe sistemul fizic:

student@uso:~$ ip address show dev vboxnet0

Notați adresa IP și masca de rețea. Vom avea nevoie de acestea.

Interfața vboxnet0 de pe sistemul fizic este conectată cu interfața eth1 a fiecărei mașini virtuale. Pentru a vă putea conecta prin SSH pe o mașină virtuală veți folosi de pe sistemul fizic o comandă de forma

ssh student@<adresa_IP_VM_eth1>

unde <adresa_IP_VM_eth1> este adresa IP de pe interfața eth1 a mașinii virtuale.

2. Configurare dinamică temporară (1.5p)

Exercițiul are loc pe mașina virtuală vivaldi.

Pe mașina virtuală vivaldi configurați interfața eth0 în mod dinamic, temporar.

După ce ați observat că ping-ul funcționează corect, afișați tabela de routare. Identificați default gateway. Testați conectivitatea către gateway, respectiv către 8.8.8.8. Testați conectivitatea la Internet (către google.com).

După ce ați demonstrat asistentului că aveți conectivitate la internet resetați mașina (comanda sudo reboot) mașina și rulați comanda ping google.com din nou. Observați că după reboot nu mai avem conectivitate la internet. Afișați din nou tabela de routare.

Prima formă de troubleshooting când ceva nu merge este afișarea tabelei de rutare (ip route show). Acolo vedem majoritatea greșelilor de configurare:

  • omiterea ridicării interfeței
  • folosirea unei adrese greșite
  • folosirea unei măști greșite
  • omiterea configurării default gateway-ului
  • folosirea unui gateway greșit.

De asemenea, conectivitatea trebuie testată între host și gateway (validarea link-ului către gateway), între host și un IP din Internet (validarea configurărilor de rețea: IP + default gateway) și între host și o adresă web (validarea configurărilor de DNS)

3. Configurare statică temporară (2p)

Inspectați configurațiile de rețea a interfeței vboxnet0 de pe mașina fizică.

Exercițiul are loc pe mașina virtuală dvorak.

Rulați comenzile de ștergere a configurațiilor de pe interfața eth1.

Este posibil să fie deja șterse configurațiile pe interfața eth1, caz în care nu mai trebuie să faceți nimic.

Apoi, configurați pe interfața de rețea eth1 a mașinii virtuale dvorak o adresă asignabilă din spațiul adresei IP+netmask ale interfeței vboxnet0 de pe mașina fizică. Apoi ridicați interfața de rețea.

Adică dacă adresa IP a interfeței vboxnet0 a sistemului fizic este 192.168.56.1, puneți adresa IP 192.168.56.2/24 pe interfața eth1 a mașinii virtuale dvorak.

Dupa ce ati realizat configuratia, trebuie sa faceti bring-up interfetei eth1 astfel (verificati apoi ca are stadiul link up si IP configurat):

student@dvorak:~$ sudo ip link set dev eth1 up

Testați conectivitatea cu vboxnet0 (dați ping în adresa IP de pe aceasta).

Nu reporniți mașina virtuală și nu ștergeți configurația de pe eth1..

4. Configurare statică temporară completă (2.5p)

Exercițiul are loc pe mașina virtuală dvorak.

Configurați interfața de rețea eth0 de pe dvorak static cu adresa ip 10.0.2.15/24. Ridicați interfața. Testați conectivitatea la internet: ping google.com. Observați că nu funcționează! Mai avem nevoie de default gateway și de DNS.

Adăugați o rută implicită (default) prin adresa IP 10.0.2.2. Apoi configurați ca server DNS 8.8.4.4. Testați din nou conectivitatea la internet: ping google.com.

5. Configurare permanentă pe sistem (2.5p)

Exercițiul se desfășoară pe mașina virtuală dvorak

[1p] Configurați dinamic, permanent, interfața eth0 de pe dvorak. Activați interfața și testați conectivitatea la Internet cu comanda ping google.com.

Rețineți să activați interfața după ce ați făcut configurările. Ele ar putea fi corecte dar interfața să fie doar inactivă. Comenzile pentru activarea/dezactivarea unei intefețe sunt ip link set dev IFNAME up/ip link set dev IFNAME down.

[1p] Configurați static, permanent, interfața eth1 cu adresa IP și masca de rețea folosite la exercițiul 3. Testați conectivitatea dând ping către IP-ul interfeței vboxnet0 de pe mașina fizică.

Când configurați static, permanent interfața eth1, NU configurați și gateway. Gateway-ul este configurat din interfața eth0 și nu mai trebuie să îl configurați aici.

După ce ați făcut ambele configurații restartați mașina virtuală dvorak și re-verificați configurațiile de pe eth0 și eth1 precum și conectivitatea la internet și către mașina fizică prin vboxnet0.

[0.5p] Afișați configurațiile DNS obținute de către mașina virtuală după reboot.

Întotdeauna după configurări de rețea realizate prin fișiere trebuie făcute două lucruri:

  • restartarea serviciului de networking (sudo service networking restart) sau reboot la mașină dacă acest restart nu funcționează
  • validarea configurațiilor, afișând informații despre interfețe, tabela de routare și stadiul link-urilor:
student@uso:~$ ip addr show
student@uso:~$ ip route show
student@uso:~$ ip link show

[Bonus 0] Probleme de configurare (2.5p)

Exercițiul se desfășoară pe mașinile virtuale verdi și vivaldi

Ambele mașini virtuale verdi și vivaldi mai au o interfață de rețea, eth1. Scopul nostru este ca ele să poată comunica între ele prin această interfață (cum fac dvorak cu mașina fizică prin interfața host-only).

Considerând că IP_A este adresa IP a interfeței eth1 de pe mașina vivaldi și IP_B este adresa IP a interfeței eth1 de pe mașina verdi, dorim să putem da ping de pe o mașină pe alta: de pe vivaldi să rulăm ping IP_B și de pe verdi să rulăm ping IP_A. Din păcate aceste interfețe sunt configurate greșit, și nu pot comunica între ele. Reparați greșeala de configurare astfel încât să meargă cele două comenzi ping.

Ambele interfețe sunt configurate în mod static, permanent. Pentru ca mașinile să poată comunica între ele prin interfețele eth1 trebuie ca acestea să aibă IP-uri din aceeași rețea.

După ce schimbați configurația unei interfețe, dezactivați-o si reactivați-o pentru a încărca noile configurații.

[Bonus 1] Asocierea unui nume cu un IP (1 karma WoUSO)

Pe mașina verdi faceți configurările necesare în fișierul /etc/hosts astfel încât să vă puteți conecta prin ssh la mașina virtuală vivaldi prin comanda ssh student@antonio.vivaldi (în loc să specificați adresa IP a mașinii scrieți numele antonio.vivaldi).

[Bonus 2] Nsswitch (2 karma WoUSO)

Pe mașina fizică verificați că ping google.com merge. Adăugați linia 1.2.3.4 google.com în fișierul /etc/hosts. Rulați ping google.com. Nu mai merge. Fără a mai modifica fișierul /etc/hosts, faceți configurările necesare astfel încât să meargă din nou comanda ping google.com

Căutați în browser pe google.ro linux change dns search order. Hint: nsswitch.

uso-ac/laboratoare/laborator-08.txt · Last modified: 2016/11/24 00:22 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