Link-uri utile iproute2
:
Extra: Motivații pentru care suita ifconfig
nu se mai folosește:
Mașinile virtuale se pot descărca și din 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
.
Alt+Ctrl+t
. Montati sistemul de fișiere unfrozen folosind comanda:
student@uso:~$ sudo mount /dev/sda7 /mnt/unfrozen
/mnt/unfrozen/uso/mv
. Dacă nu există, chemați asistentul sau descărcați-le chiar voi pe parcursul demo-ului:
student@uso:~$ ls -lah /mnt/unfrozen/uso/mv
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
.
ip address add 192.168.1.1/24 dev eth0
Pentru modificare se pot folosi {add | change | replace}
ip address del IFADDR dev STRING
ip address show dev eth0
ip address show
ip address show up
sau ip link show up
ip route add default via 10.10.10.1
ip route delete 10.0.1.0/25 via 10.10.10.1
ip route show
/etc/resolv.conf
/etc/network/interfaces
(pe sisteme Debian-based, opțiunea dns-nameservers
)ip link set eth0 up
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.
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.
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
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
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
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.
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.
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 ifdown <INTERFACE_NAME>
student@uso:~$ sudo service network-manager stop
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.
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.
/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.
Sunt trei comenzi foarte importante pentru verificarea permanentă a configurațiilor de rețea:
ip addr show
ip link show
ip route show
ip route show
sau prescurtat ip r s
). Acolo vedem majoritatea celor mai frecvente greșeli:
Credențialele de autentificare pentru toate maşinile virtuale sunt: utilizator student
, parola student
.
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ță
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. Ea se poate repara ruland comanda:
echo 127.0.0.1 <nume_masina_virtuala> | sudo tee -a /etc/hosts
vim
(sau nano
dacă vă e mult mai ușor așa). Configurările făcute în editoare GUI nu vor fi punctate.
Deschideți VirtualBox și importați cele trei fișiere .ova
.
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
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.
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.
ip route show
). Acolo vedem majoritatea greșelilor de configurare:
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)
student@vivaldi:~$ sudo dhclient eth0 student@vivaldi:~$ ping -c 2 google.com
Inspectați configurațiile de rețea a interfeței vboxnet0
de pe mașina fizică.
ip addr show dev vboxnet0
Rulați comenzile de ștergere a configurațiilor de pe interfața eth1
.
eth1
, caz în care nu mai trebuie să faceți nimic.
sudo ip addr flush dev eth1 sudo ip link set dev eth1 down
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.
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.
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).
eth1
..
root
(sau prefixate cu sudo
)
ip addr add 192.168.56.101/24 dev eth1 ip link set dev eth1 up
ssh
se va da de pe mașina fizică
O altă metodă de a testa conectivitatea de la punctul anterior este de a face ssh
în mașina virtuală dvorak
. Pentru aceasta avem nevoie de IP-ul de pe eth1
. Testați legătura dintre mașina fizică și mașina virtuală dvorak
autentificându-vă prin ssh
ca student
și folosind ca host adresa IP de pe eth1
.
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
.
student@dvorak:~$ sudo ip address add 10.0.2.15/24 dev eth0 student@dvorak:~$ sudo ip link set dev eth0 up student@dvorak:~$ sudo ip route add default via 10.0.2.2 student@dvorak:~$ sudo su - root@dvorak ~ % echo "nameserver 8.8.8.8" > /etc/resolv.conf root@dvorak ~ % exit student@dvorak:~$ ping -c 2 www.google.com
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
.
ip link set dev IFNAME up
/ip link set dev IFNAME down
.
student@dvorak:~$ sudo su root@dvorak:/home/student# echo -e "\niface eth0 inet dhcp" >> /etc/network/interfaces root@dvorak:/home/student# exit student@dvorak:~$ sudo ip link set dev eth0 up student@dvorak:~$ ping google.com
[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ă.
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
.
/etc/network/interfaces
de pe masina dvorak
linii de formaauto eth1 iface eth1 inet static address 192.168.56.101 netmask 255.255.255.0
Reluarea configuratiilor se poate face fara reboot ruland comanda:
sudo service networking restart
[0.5p] Afișați configurațiile DNS obținute de către mașina virtuală după reboot.
cat /etc/resolv.conf
sudo service networking restart
) sau reboot la mașină dacă acest restart nu funcționeazăstudent@uso:~$ ip addr show student@uso:~$ ip route show student@uso:~$ ip link show
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
.
eth1
trebuie ca acestea să aibă IP-uri din aceeași rețea.
verdi
:
root@verdi:~# ip link set dev eth1 down root@verdi:~# ip addr add 192.168.50.1/23 dev eth1 root@verdi:~# ip link set dev eth1 up
Pe vivaldi
:
root@verdi:~# ip link set dev eth1 down root@verdi:~# ip addr add 192.168.51.254/23 dev eth1 root@verdi:~# ip link set dev eth1 up
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
).
student@lab8-vm-B:~$ sudo su root@lab8-vm-B:/home/student# echo "IP_A antonio.vivaldi" >> /etc/hosts
unde IP este IP-ul mașinii vivaldi
de pe eth1
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
linux change dns search order
. Hint: nsswitch
.
student@uso:~$ ping -c 1 google.com student@uso:~$ sudo su root@uso:/home/student# echo "1.2.3.4 google.com" >>/etc/hosts root@uso:/home/student# exit student@uso:~$ ping -c 1 google.com student@uso:~$ sudo sed -i 's/hosts:\( *\)files/hosts:\1/g' /etc/nsswitch.conf student@uso:~$ ping -c 1 google.com