This shows you the differences between two versions of the page.
uso:laboratoare:laborator-03:troubleshoot [2020/10/28 16:16] liza_elena.babu [Conectarea la rețea și la Internet] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Conectarea la rețea și la Internet ====== | ||
- | |||
- | <note> | ||
- | Pentru a parcurge această secțiune este recomandat să descărcați ultima versiune a respository-ului laboratorului. Pentru a descărca ultima versiune a repository-ului rulați comanda ''%%git clone https://github.com/Sergiu121/uso-lab%%'' sau, dacă aveți deja directorul ``~/uso-lab``, intrați în el și dați comanda ``git pull``. | ||
- | |||
- | Infrastructura laboratorului este bazată pe containere docker ale căror imagini vor fi generate pe propriul calculator. Dacă nu veți deja instalat Docker Engine pe sistem, scriptul ''%%~/uso-lab/labs/03-user/lab-container/lab-prepare.sh%%'' vă va instala aplicația. | ||
- | |||
- | După ce ați terminat de lucrat vă recomandăm să opriți containerele rulând comanda ''%%./lab-prepare.sh delete%%'' în directorul ''%%~/uso-lab/labs/03-user/lab-container%%''. | ||
- | </note> | ||
- | |||
- | În cadrul acestei secțiuni vom învăța cum să reparăm problemele de conectivitate la rețea (sau, informal, rezolvarea problemei "nu-mi merge Internetul"). Pentru a face asta este necesar să parcurgem toate nivelurile de rețea prin care trec datele pentru a fi trimise în Internet. În continuare vom prezenta pașii pe care îi urmăm ca să verificăm funcționalitatea nivelului de rețea și cum putem să îl configurăm sumar. | ||
- | |||
- | ===== Interacţiunea cu nivelul fizic ===== | ||
- | |||
- | Primul nivel cu care noi interacționăm este nivelul fizic. Nivelul fizic este reprezentat de cablul UTP pentru o rețea cu fir, sau de undele radio ale unei rețele wireless. Acestea sunt mediul prin care informația este transferată. | ||
- | |||
- | {{:uso:laboratoare:laborator-03:utp.png?500|Cablu UTP}} | ||
- | |||
- | O altă componentă a nivelului fizic este placa de rețea a sistemului. Aceasta va trimite mesaje prin mediu de transmisie, fie acesta cablu de cupru, fibră sau unde radio. | ||
- | |||
- | Majoritatea timpului problemele de conexiune la Internet vin de la faptul că nu este cablul de Internet conectat la placa de rețea, sau de la faptul că avem conexiune slabă la rețeaua wireless. | ||
- | |||
- | La nivel fizic, putem verifica conexiunea și funcționalitatea unei plăci de rețea uitându-ne la ledurile care reprezintă conexiunea la mediul fizic. Observăm în GIF-ul de mai jos cum arată ledurile unei plăci de rețea funcționale. Dacă acestea nu sunt aprinse, atunci nu vom avea conectivitate la rețea. | ||
- | |||
- | {{:uso:laboratoare:laborator-03:nic.gif}} | ||
- | |||
- | ==== Investigarea nivelului fizic al rețelei ==== | ||
- | |||
- | <note> | ||
- | În general, în Linux fiecare placă de rețea are asociată câte o interfață de rețea. | ||
- | </note> | ||
- | |||
- | <note> | ||
- | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container%%'' comanda ''%%./lab_prepare.sh install fizic%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect fizic%%'' | ||
- | </note> | ||
- | |||
- | La nivelul sistemului de operare putem verifica dacă o placă de rețea este activă folosind comanda următoare: | ||
- | |||
- | <code > | ||
- | root@fizic:~# ip link show | ||
- | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | ||
- | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
- | 293: eth0@if294: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | ||
- | link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 297: eth1@if298: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | ||
- | link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 299: eth2@if300: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | ||
- | link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | </code> | ||
- | Starea fiecărei interfețe de rețea este reprezentată pe câte o linie împreună cu parametrii săi de rulare. Majoritatea informațiilor afișate de comanda de mai sus nu sunt relevante pentru noi. O opțiune relevantă este valoarea ''%%state%%'', urmată de starea interfeței de rețea, care poate să fie ''%%UP%%'', ''%%DOWN%%'' sau ''%%UNKNOWN%%''. | ||
- | |||
- | <note> | ||
- | Formatul pentru numele interfețelor diferă de la o distribuție la alta. În cadrul infrastructurii de laborator folosim containere de tip Docker în cadrul cărora numele interfețelor este de forma ''%%ethX%%'', unde X este un număr. În funcție de distribuția pe care rulăm numele interfețelor poate să se fie într-un format diferit. | ||
- | </note> | ||
- | |||
- | Observăm că interfața de rețea cu numele ''%%eth0%%'' este pornită, deoarece linia asociată interfeței conține șirul de caractere ''%%state UP%%''. În același timp observăm că interfața de rețea ''%%eth1%%'' nu este activă deoarece pe linia sa observăm șirul de caractere ''%%state DOWN%%''. | ||
- | |||
- | Pentru a porni interfața ''%%eth1%%'' vom folosi următoarea comandă: | ||
- | |||
- | <code > | ||
- | root@uso:~# ip link set up dev eth1 | ||
- | </code> | ||
- | Mereu, după ce rulăm o comandă, trebuie să verificăm că s-a efectuat cu succes, folosind o metodă de verificare. În cazul de față vom folosi tot comanda ''%%ip link show%%'': | ||
- | |||
- | <code > | ||
- | root@fizic:~# ip link show | ||
- | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | ||
- | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
- | 293: eth0@if294: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | ||
- | link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 297: eth1@if298: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | ||
- | link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 299: eth2@if300: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | ||
- | link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | </code> | ||
- | === Exercițiu - Pornirea unei interfețe === | ||
- | |||
- | Porniți interfața de rețea ''%%eth2%%''. | ||
- | |||
- | <note> | ||
- | Ieșiți din docker-ul ''%%fizic%%'' folosind comanda ''%%exit%%''. | ||
- | </note> | ||
- | |||
- | ===== Configurarea nivelului Internet ===== | ||
- | |||
- | ==== Identificarea adresei de Internet ==== | ||
- | |||
- | <note> | ||
- | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container%%'' comanda ''%%./lab_prepare.sh install internet%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect internet%%'' | ||
- | </note> | ||
- | |||
- | Pentru comunicare între două stații din Internet, trebuie ca cele două stații să fie conectate la Internet. Și apoi cele două stații să se poată adresa una alteia. Adică fiecare stație are nevoie de un identificator, o adresă. Cum fiecare casă din lume are o adresă cu care poate fi identificată unic, similar este necesar pentru un calculator. | ||
- | |||
- | Pentru identificarea stațiilor folosim o adresă numită adresa IP (//Internet Protocol//). Fiecare interfață de rețea are nevoie de o adresă IP să fie configurată. | ||
- | |||
- | Pentru a vedea adresele IP configurate pe interfețele de rețea folosim următoarea comandă: | ||
- | |||
- | <code > | ||
- | root@internet:~# ip address show | ||
- | 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 | ||
- | 195: eth0@if196: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default | ||
- | link/ether 02:42:0a:0a:0a:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | inet 10.10.10.2/24 brd 10.10.10.255 scope global eth0 | ||
- | valid_lft forever preferred_lft forever | ||
- | 199: eth1@if200: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default | ||
- | link/ether 02:42:0b:0b:0b:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 203: eth2@if204: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default | ||
- | link/ether 02:42:0c:0c:0c:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | </code> | ||
- | Există două tipuri de adrese IP (IPv4 și IPv6), dar în cadrul acestui laborator vom lucra numai cu adrese de tip IPv4. Adresele IP ale interfețelor sunt scrise pe liniile care conțin ''%%inet%%''. Adresele IPv4 sunt de forma ''%%A.B.C.D%%'', unde A, B, C și D sunt numere cu valori între 1 si 255. | ||
- | |||
- | Pentru detalii despre adresele de tip IPv6 folosiți urmăriți această((https://en.wikipedia.org/wiki/IP_address#IPv6_addresses | ||
- | )) explicație. | ||
- | |||
- | ==== Configurarea unei adrese IP ==== | ||
- | |||
- | Există două metode pentru configurarea unei adrese IP pe o interfață: | ||
- | |||
- | * configurare statică, prin care noi configurăm manual adresa IP pe interfața de rețea, implică să cunoaștem din ce rețea face parte interfața pe care vrem să o configurăm și ce adrese IP sunt libere; | ||
- | * configurare dinamică, obținută automat, care nu presupune cunoașterea informațiilor despre rețea, deoarece acestea vor fi primite automat de pe rețea. | ||
- | |||
- | Vom insista pe configurarea dinamică, deoarece este mai simplă. În plus, nu avem cum să aflăm informațiile despre rețea înainte de a configura interfața de rețea. | ||
- | |||
- | === Recapitulare - Pornirea interfețelor de rețea === | ||
- | |||
- | Faceți modificările necesare astfel încât interfața ''%%eth1%%'' să fie în starea ''%%UP%%''. | ||
- | |||
- | === Configurarea IP-ului în mod dinamic === | ||
- | |||
- | Pentru a obține o adresă IP în mod dinamic pe o interfață folosim comanda ''%%dhclient%%'': | ||
- | |||
- | <code > | ||
- | root@internet:~# dhclient eth1 | ||
- | mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy | ||
- | </code> | ||
- | |||
- | <note warning> | ||
- | Linia ''%%mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy%%'' apare mereu în containerele docker atunci când încercăm să obținem o adresă IP folosind comanda ''%%dhclient%%''. **NU** este o problemă dacă aceasta apare. | ||
- | </note> | ||
- | |||
- | Mai sus am rulat comanda pentru a obține o adresă IP pentru interfața ''%%eth1%%''. | ||
- | |||
- | Comanda ''%%dhclient%%'' este bazată pe protocolul DHCP (//Dynamic Host Configuration Protocol//). Acesta presupune că există un server pe rețea care cunoaște ce IP-uri sunt folosite pe rețea și care poate să ofere adrese IP calculatoarelor care fac cereri pe rețea. ''%%dhclient%%'' face o cerere de rezervare a unei adrese IP către serverul DHCP de pe rețea. | ||
- | |||
- | === Recapitulare - Afișarea adreselor IP configurate pe interfețele de rețea === | ||
- | |||
- | Afișați adresele IP de pe toate interfețele. | ||
- | |||
- | Observați că am obținut o adresă IP pe interfața ''%%eth1%%''. | ||
- | |||
- | === Exercițiu - Configurarea dinamică a unei adrese IP === | ||
- | |||
- | Configurați adresa IP pe interfața ''%%eth2%%''. | ||
- | |||
- | === Ștergerea unei configurații de rețea de pe o interfață === | ||
- | |||
- | Pentru a șterge o adresă IP de pe o interfața folosim comanda ''%%ip address flush%%'' în felul următor: | ||
- | |||
- | <code > | ||
- | root@internet:~# ip address flush eth1 | ||
- | root@internet:~# ip address show eth1 | ||
- | 199: eth1@if200: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default | ||
- | link/ether 02:42:0b:0b:0b:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | </code> | ||
- | |||
- | <note> | ||
- | Putem să afișăm configurația unei singure interfețe de rețea folosind numele interfeței ca parametru pentru comanda ''%%ip address show%%'' | ||
- | </note> | ||
- | |||
- | === Exercițiu - Ștergerea configurației de rețea === | ||
- | |||
- | Ștergeți configurația de rețea de pe interfețele ''%%eth1%%'' și ''%%eth2%%''. | ||
- | |||
- | ==== Verificarea conectivității la o altă stație ==== | ||
- | |||
- | |||
- | <note> | ||
- | Pentru rularea acestui demo, comenzile vor fi rulate în cadrul mașinii virtuale USO. | ||
- | </note> | ||
- | |||
- | Pentru a verifica conexiunea dintre două stații folosim comanda ''%%ping%%''. Această comandă trimite mesaje către o stație și așteaptă un răspuns de la ea. | ||
- | |||
- | Atunci când testăm conexiunea la internet, vrem să verificăm câteva aspecte, odată ce am obținut o adresă IP de la serverul DHCP: | ||
- | |||
- | * verificăm dacă putem să ne conectăm la alte calculatoare din aceeași rețea | ||
- | * verificăm dacă putem să comunicăm cu stații din afara rețelei | ||
- | |||
- | De exemplu, dacă vrem să verificăm conectivitatea la serverul ''%%8.8.8.8%%'' (un server public din Internet), folosim comanda: | ||
- | |||
- | <code > | ||
- | student@uso:~# ping -c 4 8.8.8.8 | ||
- | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
- | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=23.0 ms | ||
- | 64 bytes from 8.8.8.8: icmp_seq=2 ttl=61 time=25.7 ms | ||
- | 64 bytes from 8.8.8.8: icmp_seq=3 ttl=61 time=24.8 ms | ||
- | 64 bytes from 8.8.8.8: icmp_seq=4 ttl=61 time=25.2 ms | ||
- | |||
- | --- 8.8.8.8 ping statistics --- | ||
- | 4 packets transmitted, 4 received, 0% packet loss, time 3092ms | ||
- | rtt min/avg/max/mdev = 23.051/24.731/25.707/1.020 ms | ||
- | </code> | ||
- | Comportamentul implicit al comenzii ''%%ping%%'' este să trimită pachete la infinit. Am folosit opțiunea ''%%-c 4%%'' în exemplul de mai sus pentru a reduce numărul de pachete trimise la 4. | ||
- | |||
- | Atunci când nu pot fi trimise mesaje către stația identificată prin adresa IP, mesajul de eroare va arăta în felul următor: | ||
- | |||
- | <code > | ||
- | student@uso:~# ping 10.10.10.10 | ||
- | PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data. | ||
- | From 10.10.10.3 icmp_seq=1 Destination Host Unreachable | ||
- | From 10.10.10.3 icmp_seq=2 Destination Host Unreachable | ||
- | From 10.10.10.3 icmp_seq=3 Destination Host Unreachable | ||
- | From 10.10.10.3 icmp_seq=4 Destination Host Unreachable | ||
- | ^C | ||
- | --- 10.10.10.10 ping statistics --- | ||
- | 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3074ms | ||
- | </code> | ||
- | Pentru verificarea conectivității în interiorul rețelei trebuie să verificăm că putem să trimitem mesaje folosind utilitarul ''%%ping%%'' unui calculator din rețea. | ||
- | |||
- | În mod implicit comanda ''%%ping%%'' trimite mesaje de verificare a conexiunii la infinit. De data aceasta, în loc să rulăm comanda ''%%ping%%'' folosind opțiunea ''%%-c 4%%'', am oprit rularea comenzii folosind combinația de taste ''%%Ctrl+c%%''. | ||
- | |||
- | O țintă bună de testare pentru trimiterea mesajelor în rețea este (default) gateway-ul. Un gateway este un dispozitiv de rețea care se ocupă de interconectarea rețelelor și care primește mesaje de la toate stațiile din rețea pentru a le trimite în Internet. | ||
- | |||
- | Gateway-ul este configurat static sau dinamic, cum este configurată și adresa IP a unei interfețe. | ||
- | |||
- | Pentru a identifica gateway-ul, folosim comanda ''%%ip route show%%'' în felul următor: | ||
- | |||
- | <code > | ||
- | student@uso:~# ip route show | ||
- | default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 | ||
- | 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 | ||
- | 169.254.0.0/16 dev enp0s3 scope link metric 1000 | ||
- | 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown | ||
- | 192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.4 metric 101 | ||
- | </code> | ||
- | Observăm că adresa IP a default gateway-ului este ''%%10.0.2.2%%'', deoarece acesta se află pe linia care conține șirul de caractere ''%%default%%''. | ||
- | |||
- | === Recapitulare - Afișarea adresei IP configurată pe o interfață === | ||
- | |||
- | Aflați adresa de rețea de pe interfața ''%%enp0s3%%''. | ||
- | |||
- | <note> | ||
- | Adresa IP a gateway-ului și adresa IP a interfeței ''%%enp0s3%%'' sunt foarte similare. Acest lucru se întâmplă deoarece stațiile se află în aceeași rețea. | ||
- | </note> | ||
- | |||
- | === Exercițiu - Verificarea conectivității cu gateway-ul === | ||
- | |||
- | Verificați conexiunea cu gateway-ul folosind comanda ''%%ping%%''. | ||
- | |||
- | Pentru verificarea conexiunii la Internet este bine să verificăm cu o adresă consacrată, care avem încredere că nu va avea probleme tehnice. Un astfel de exemplu este serverul oferit de Google de la adresa IP ''%%4.4.4.4%%''. | ||
- | |||
- | === Exercițiu - Verificarea conectivității la Internet === | ||
- | |||
- | Verificați conexiunea la serverul ''%%8.8.8.8%%'' oferit de Google folosind comanda ''%%ping%%''. | ||
- | |||