Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:new:08-net [2018/09/02 13:09]
razvan.deaconescu [4. Montarea/Demontarea unui sistem de fișiere la distanță]
uso:laboratoare:new:08-net [2019/11/26 06:59] (current)
costin.carabas
Line 1: Line 1:
-====== Laborator ​08: Rețelistică și Internet ======+====== Laborator ​09: Rețelistică și Internet ======
  
-===== Înainte de laborator =====+{{page>:​uso:​laboratoare:​new:​08-net:​setup&​nofooter&​noeditbutton}}
  
-==== Comenzi și fișiere folosite în laborator ​==== +===== Cuprins ​=====
- +
-^ Comandă/​fișier ^ Rol ^ +
-| ''​ip''​ | vizualizarea și configurarea parametrilor interfețelor de rețea | +
-| ''​ip a s''​ | vizualizarea parametrilor interfețelor de rețea | +
-| ''​ping''​ | verificarea conectivității până la o altă stație | +
-| ''​dhclient''​ | configurarea automată a unei interfețe folosind DHCP | +
-| ''​host''​ | interogarea serviciului DNS, aflarea adresei IP pentru un nume din Internet | +
-| ''/​etc/​resolv.conf''​ | fișierul unde se configurează serverul DNS | +
-| ''​traceroute''​ | vizualizarea căii în Internet până la o altă stație | +
-| ''​ip r s''​ | vizualizarea tabelei de rutare (și a //default gateway//​-ului) | +
-| ''​netstat''​ | vizualizarea serviciilor de rețea locale | +
-| ''​ssh''​ | conexiune la distanță prin SSH | +
-| ''​scp''​ | transfer la distanță | +
-| ''​ssh-keygen''​ | generarea unei perechi de chei (privată și publică) pentru SSH | +
-| ''​ssh-copy-id''​ | copierea unei chei publice SSH la distanță pentru autentificare | +
-| ''​~/​.ssh/​id_rsa''​ | în mod uzual, cheia privată SSH (de tip RSA) | +
-| ''​~/​.ssh/​id_rsa.pub''​ | în mod uzual, cheia publică SSH (de tip RSA) | +
-| ''​~/​.ssh/​authorized_keys''​ | cheile publice pentru care se permite autentificarea de la distanță prin SSH | +
-| ''​~/​.ssh/​config''​ | configurarea clientul SSH pentru utilizatorul curent | +
-| ''​wget'',​ ''​curl''​ | accces web la distanță și descărcare de fișiere prin HTTP | +
- +
-==== Mașini virtuale ==== +
- +
-Pe parcursul laboratorului curent vom folosi două mașini virtuale VirtualBox care pot comunica între ele, numite ''​tom''​ și ''​jerry''​. Dacă **nu** aveți un sistem Linux pe care rulați VirtualBox, adică dacă rulați pe Windows sau macOS, aveți nevoie și de mașina virtuală ''​uso''​. +
- +
-Mașinile virtual ''​tom''​ si ''​jerry''​ sunt parte din fișierul ''​USO_tom_jerry.ova''​ pe care îl puteți descărca de la http://​titan.cs.pub.ro/​~razvan/​uso/​. Pentru a putea folosi mașinile virtuale va trebui să importați fișierul ''​USO_tom_jerry.ova''​ în VirtualBox. Pentru aceasta, în fereastra VirtualBox, accesați meniurile și opțiunile ''​%%File -> Import Appliace%%''​ și apoi alegeți calea către fișierul ''​USO_tom_jerry.ova''​. După ce ați declansat operația de importare, va dura câteva minute să fie importate mașinile virtuale. După ce ați importat mașinile virtuale, veți vedea în fereastra principală VirtualBox intrările ''​USO_tom''​ și ''​USO_jerry''​. Porniți ambele mașini virtuale dând click pe intrări și apoi folosind butonul ''​Start''​. +
- +
-După aceasta veți avea două ferestre VirtualBox, câte una pentru fiecare mașină virtuală. Mașinile virtuale ''​tom''​ și ''​jerry''​ au doar interfața în linia de comandă, **nu** au interfață grafică. Le veți identifica după prompt-ul de autentificare afișat, respectiv ''​tom login:''​ și ''​jerry login:''​. Vă puteți autentifica la mașinile virtuale folosind numele de utilizator ''​student''​ iar apoi parola ''​student''​. +
- +
-<note tip> +
-Pe ambele mașini virtuale, contul de utilizator ''​student''​ are permisiuni de ''​sudo''​. Dacă doriți accesarea contului de utilizator ''​root''​ folosiți comanda +
-<​code>​ +
-sudo su +
-</​code>​ +
-iar la prompul de parolă scrieți parola utilizatorului ''​student'',​ adică ''​student''​. +
-</​note>​ +
- +
-==== Resurse Git ==== +
- +
-Resursele laboratorulului de USO se găsesc în [[https://​github.com/​systems-cs-pub-ro/​uso|acest repository Git]]. +
- +
-În laboratorul curent, pe mașina virtuală furnizată, aveți deja clonat repository-ul Git în directorul ''​~/​uso.git/''​. Pe parcursul laboratorului vom folosi fișierele de suport de acolo. +
- +
-<note important>​ +
-Pentru a pregăti infrastructura de laborator rulați comenzile de mai jos într-un terminal deschis în mașina virtuală. Deschideți un terminal folosind combinația de taste ''​Ctrl+Alt+t''​. +
- +
-În listarea de mai jos ''​student@uso:​~$''​ este promptul unde introduceți comenzile, pe acela nu-l tastați. Recomandăm să **nu** folosiți //​copy-paste//​ ca să vă acomodați cu linia de comandă. Nu vă bateți capul cu ce fac comenzile de mai jos, pe moment le rulăm mecanic, doar să ne facem treaba. Cei curioși pot consulta documentația Git. +
-<​code>​ +
-student@uso:​~$ cd uso.git/ +
-student@uso:​~/​uso.git$ git rm --cached -r . +
-student@uso:​~/​uso.git$ git reset --hard +
-student@uso:​~/​uso.git$ git clean -f -d +
-student@uso:​~/​uso.git$ git fetch origin +
-student@uso:​~/​uso.git$ git checkout -b lab-08-net +
-student@uso:​~/​uso.git$ git rebase origin/​lab-08-net +
-</​code>​ +
- +
-Dacă la a cincea comandă rulată (''​git checkout -b lab-08-net''​) primiți o eroare de forma ''​fatal:​ A branch named '​lab-08-net'​ already exists.'',​ nu vă îngrijorați,​ nu e nici o problemă. +
-</​note>​ +
- +
-Hai să trecem la treburi de rețelistică! +
-===== Concepte ===== +
- +
-==== Identificarea unei stații în Internet ==== +
- +
-=== Introducere === +
- +
-Mai înainte de toate, ca să putem vorbi despre identificarea unei stații în Internet, trebuie să dăm o definiție  +
-scurtă Internetului. Pentru asta, trebuie să știm ce este o stație, ce este legătura dintre stații și ce este o rețea. +
- +
-Când ne referim la o ''​stație'',​ ne gândim la un calculator, la un telefon mobil, sau la orice dispozitiv electronic care are +
-o placă de rețea și care se poate conecta la Internet. +
- +
-Dacă vorbim despre legătura dintre 2 stații, ne putem referi la 2 lucruri: +
-    - legătura fizică dintre acestea (prin fir, wireless) +
-    - legătura logică dintre ele (conexiune) +
- +
-Știm ce este o stație, știm că se poate conecta la o altă stație, deci știm să definim o ''​rețea''​. **Rețeaua** reprezintă o mulțime +
-de stații (noduri) interconectate. Putem spune că dacă interconectăm 2 rețele formăm o rețea mai mare. +
-Mergând pe aceeași logică mai departe, ajungem să definim Internetul (INTERconected NETworks) +
-drept totalitatea rețelelor interconectate de pe planetă. +
- +
-Pe planetă exista miliarde de dispozitive conectate la Internet zi de zi, și, așa cum identificăm un om prin nume, cod numeric +
-personal, loc de muncă, putem identifica și stațiile în mod unic. Astfel, un mesaj trimis pe o rețea de socializare către +
-un anumit prieten nu va ajunge niciodată unde nu trebuie (cel puțin în teorie :D ). +
- +
-=== Adresă IP === +
- +
-Cea mai simpla modalitate de identificare a unei stații în Internet ar fi să numerotăm fiecare stație începând de la 1. Cu +
-siguranță această idee ar putea funcționa (în teorie) însă trebuie să avem în vedere că resursele de care dispunem sunt limitate +
-(viteza), iar această alegere este nefavorabilă în cazul comunicării între stații (identificarea unei alte stații ar dura mult prea  +
-mult). +
- +
-În anul 1969 a fost inventat IP (protocolul internet), folosit și în ziua de astăzi. Practic, IP-ul unei stații este un număr, pe +
-''​32 de biți''​ în cazul protocolului ''​IPv4''​ sau pe ''​128 de biți''​ în cazul protocolului ''​IPv6''​. +
-Uzual, adresele IP sunt scrise sub forma restransă. În cazul IPv4, adresa IP este reprezentată de 4 numere în baza zecimală, cu valori +
-între 0 și 255, separate +
-prin ''​.'',​ (ex: ''​192.168.0.14''​),​ iar în cazul IPv6, adresa IP este reprezentată de 8 grupuri numere în baza hexazecimală,​ cu valori  +
-cuprinse între ''​0000''​ și ''​ffff'',​ separate prin +
-'':''​ (ex: ''​2001:​0db8:​85a3:​0000:​0000:​8a2e:​0370:​7334''​). +
- +
-<note tip> +
-Pentru IPv4, **range-ul** de IP-uri este ''​0.0.0.0 - 255.255.255.255'',​ iar pentru IPv6 ''​0000:​0000:​0000:​0000:​0000:​0000:​0000:​0000 -  +
-fff:​ffff:​ffff:​ffff:​ffff:​ffff:​ffff:​ffff''​ +
-</​note>​ +
- +
-Să luăm drept exemplu protocolul IPv4. Se pune întrebarea,​ cum putem identifica un număr atât de mare de stații având la dispoziție +
-doar 32 de biți. Vom lămuri acest aspect la o secțiune de mai jos. Momentan, trebuie să +
-reținem că IP-ul este o formă de a identifica o stație în Internet. +
- +
-=== Numele de domeniu === +
- +
-Știm că o stație se identifică prin IP-ul ''​216.58.201.78''​. Această formă de adresare nu este întocmai intuitivă, putând asemăna +
-această formă de identificare a unei stații cu identificarea un om după codul numeric personal. Pe langă adresa IP a unei stații,  +
-putem avea un ''​nume de domeniu''​ pentru aceasta.  +
-Frecvent, în browser întroducem un URL pentru a deschide o pagină pe Internet, care este "​înlocuitor"​ al IP-ului. Încercați să +
-căutați în browser pagina ''​http://​216.58.201.78''​ și observați se întâmplă.  +
- +
-=== DNS === +
- +
-DNS-ul (Domain Name Server), așa cum sugerează și numele, este un sistem care se ocupă de translatarea adreselor IP în nume și +
-viceversa. Așadar, faptul pentru care ''​https://​www.google.com''​ și ''​http://​216.58.201.78''​ sunt echivalente este existența +
-unui server de DNS. Acesta poate răspune la întrebările:​ +
-    - Cine este ''​216.58.201.78''​ ? +
-    - Ce adresă IP are ''​www.google.com''?​ +
- +
-==== Tipuri de adrese IP ==== +
- +
-Ne-am pus problema mai devreme cum putem folosi numere pe 32 de biți pentru a identifica toate stațiile din Internet. Este evident +
-că **pot exista** mai mult de 2^32 stații conectate simultan la Internet, așadar, ne trebuie o modalitate de a le identifica pe toate +
-în mod **unic**. Pentru a rezolva această insuficiență,​ protocolul IP sare în ajutor prin separarea adreselor IP în 2 categorii:​ +
-private și publice. +
- +
-=== Adrese IP publice === +
- +
-Adresele IP publice sunt alocate în general unui server (email, web, you name it) și permit accesarea directă a acestuia în Internet. +
-Adresele IP publice sunt unice la nivel global și pot fi alocate unui sigur host care ulterior va fi identificat prin această adresă +
-IP. +
- +
-=== Adrese IP private === +
- +
-Adresele private sunt cele care salvează situația. Proprietatea de ''​unicitate''​ a unei adrese IP private dispare, cel puțin la +
-nivel global. Adresele IP private sunt adrese alocate local/​privat stațiilor dintr-o rețea (mai mică) și sunt folosite drept identificatori +
-unici **doar în cadrul acelei rețele**. În general, dispozitivele pe care le folosim (laptop-uri,​ telefoane mobile) au alocate o +
-adresă IP privată în cadrul rețelei din care face parte. Dacă spre exemplu, un telefon este conectat la o rețea acum, el va avea +
-o adresă IP unică alocată în cadrul acelei rețele, iar dacă se deconectează de la această și ulterior se conectează la alta, acesta +
-va avea cel mai probabil o adresă IP diferită față de cea anterioară (se poate ca **pur întâmplător** să fie aceeași). Expunerea în +
-Internet nu se face prin această adresă IP privată, această problemă fiind rezolvată de router. +
- +
-<note tip> +
-Exemplele date anterior sunt pentru protocolul IPv4, însă discuția pentru protocolul IPv6 este aceeași. +
-</​note>​ +
- +
-==== Conectarea la Internet ==== +
-=== Adresă IP === +
-Am văzut mai devreme că identificăm o stație în Internet după adresa IP a acestia. Așadar, ca o stație să poată stabili +
-o conexiune la Internet, trebuie să aibă asociată o adresă IP cu care poate fi identificat în cadrul rețelei din care +
-face parte. +
-=== Mască de rețea === +
-Dacă ne uităm la adresele IP private asociate unor stații din rețea, vom observa că acestea au primii ''​N''​ biți comuni, +
-adică sunt biții identificatori ai rețelei, iar restul până la 32 sunt specifici stației. Acest număr ''​N''​ este variabil +
-în funcție de dimensiunea rețelei, iar pentru a identifica rapid care este adresa de rețea avem nevoie de o **mască de +
-rețea**. Așa cum sugerează și numele, masca de rețea nu este altceva decât o mască de biți cu proprietatea că primii ''​N''​ +
-biți au valoarea 1, iar restul 0. Vom folosi această mască de rețea pentru a identifica adresa de rețea făcând operația +
-de ''​și logic''​ între ea și o adresă IP din rețea. +
-Putem întâlni masca de rețea sub 2 forme, fie reprezentată sub forma unei adrese IP (de exemplu, masca de rețea +
-''​255.255.255.0''​ este una validă, pe când ''​255.255.255.1''​ nu), fie sub forma ''/​N'',​ unde ''​N''​ reprezintă numărul de +
-biți care sunt specifici rețelei (de exemplu, putem întâlni ''​192.168.0.14/​16'',​ iar în acest caz ne este sugerat faptul că primii +
-16 biți sunt ''​biții de rețea''​). +
-=== Default Gateway === +
-De cele mai multe ori vrem ca o stație să comunice cu o altă stație aflată într-o altă rețea. Pentru a face posibil acest +
-lucru, avem nevoie să setăm un ''​default gateway''​ pentru fiecare stație. Într-o explicație largă, default gateway-ul este +
-adresa IP a interfeței routerului la care este conectată respectiva stație. Astfel, comunicarea către exteriorul rețelei de +
-la această stație va merge pe acea cale. Default gateway-ul trebuie să fie o adresă IP din cadrul aceleiași rețele. +
-=== DHCP === +
-Adresă IP, mască de rețea, default gateway. Acestea sunt informațiile necesare pentru ca o stație să poată stabili conexiuni +
-cu orice altă stație din Internet. Această configurație poate fi făcută manual, de către un utilizator, dar de cele mai multe +
-ori se preferă o configurație automată cu ajutorul protocolului ''​DHCP (Dynamic Host Configuration Protocol)''​. Configurările +
-obișnuite care se obțin prin DHCP sunt: adresa IP și masca de rețea, default gateway, precum și server DNS.  +
- +
-==== Probleme de conectivitate ==== +
-Cea mai frecventă problemă care apare în cadrul Internetului este, evident, lipsa de conectivitate la Internet. Pentru a testa  +
-conectivitatea la Internet +
-a unei stații folosim comanda ''​ping''​. Comanda primește ca argument un IP sau un nume de domeniu. Dacă vrem să verificăm dacă  +
-avem conexiune +
-la Internet putem da comanda ''​ping 8.8.8.8''​ (adresa IP ''​8.8.8.8''​ este una dintre adresele IP folosite de Google). +
-''​ping''​ ne poate spune doar dacă avem sau nu conexiune la Internet, dar nu și care este motivul pentru care nu avem conexiune. +
-În continuare, vom prezenta cele mai frecvente greșeli care duc la lipsa de conectivitate. +
- +
-=== Gateway picat sau greșit === +
-Așa cum am văzut mai devreme, default gateway-ul este punctul prin care o stație stabilește conexiuni cu exteriorul rețelei din +
-care face parte. Se poate întâmpla ca interfața de rețea a routerului să nu fie ridicată,  +
-caz în care nu exista o cale de ieșire în Internet. +
- +
-O altă problemă care poate apărea în această zona este configurarea greșită a default gateway-ului,​ fie adresa IP a interfeței +
-este incorectă (nu face parte din rețea), fie o stație are o configurație greșită în ceea ce privește default gateway-ului. +
- +
-=== Firewall === +
-Firewall-ul este o modalitate de a securiza o stație din rețea. Mai exact, firewall-ul are rolul de a ține evidența conexiunii +
-calculatorului,​ analizează conexiunea și decide dacă va permite conexiunea sau nu în funcție de filtrele care sunt setate. +
-Așadar, firewall-ul poate bloca traficul de date spre si dinspre rețea, acest lucru putând duce la lipsa de conexiune. +
- +
-=== Adresă IP configurată greșit === +
-Atunci când o stație vrea să stabilească o conexiune, fie în cadrul rețelei, fie cu o altă stație din exterior, aceasta trebuie +
-să aibă o configurație corectă în ceea ce privește adresa IP. Dacă din greșeală unei stații îi este setată o adresă IP care nu +
-face parte din range-ul de adrese IP al rețele coordonate de router, atunci nu va putea crea o conexiune cu niciuna dintre +
-stațiile din cadrul rețelei. +
- +
-=== DNS picat sau greșit === +
-Am observat mai devreme că serverul de DNS are rolul de a asocia adrese IP cu nume pentru identificare mai intuitivă a stațiilor. +
-O configurație greșită a acestuia este un indicator al unei probleme. Se poate întâmpla ca ''​ping 216.58.201.78''​ să funcționeze,​ +
-dar ''​ping www.google.com''​ să nu funcționeze,​ caz în care știm că există o problemă cu serverul de DNS. +
- +
-==== Servicii de rețea ==== +
-=== Modelul client-server === +
-În general, orice serviciu de rețea se bazează pe modelul client-server. +
-În cea mai simplă definiție, un server este un program capabil să primească cereri de la alte stații din rețea și oferă acestora +
-un serviciu.  +
- +
-Clientul este un program care este capabil să efectueze cereri către un server și care știe să interpreteze răspunsul +
-primit de la acesta. +
- +
-=== Tipuri de servicii === +
-Există mai multe tipuri de servicii de rețea, cele mai importante fiind cele enumerate mai jos. +
-=== Conexiune la distanță === +
-=== Telnet === +
-Telnet (TELetype NETwork) este un serviciu de tip client-server. In mod implicit nu există nicio diferență între +
-resursele disponibile unui utilizator ce rulează un interpretor local și unul ce rulează prin telnet. Pentru a iniția +
-o conexiune folosim comanda telnet trebuie să specificăm adresa stației unde dorim să ne conectăm și pe această stație +
-trebuie să ruleze un server de telnet. +
-=== SSH === +
-SSH (Secure Shell) este un serviciu de acces la distanță securizat. Funcționează similar cu telnet dar, spre deosebire +
-de acesta, toată comunicația este criptată. Din această cauză este serviciul pe care îl veți folosi cel mai des atunci +
-când va trebui să lucrați pe o stație la distanță. Comanda pentru a iniția o conexiune este ''​ssh''​. Ea primeste un +
-argument de forma ''​user@host'',​ unde ''​user''​ este numele utilizatorului drept care dorim să ne autentificăm și +
-''​host''​ este adresa stației pe care dorim să ne autentificăm. +
-=== Transferul de fișiere securizat === +
-Un serviciu de rețea util pentru orice utilizator este transferul de fișiere. În cadrul unei rețele, există posibilitatea +
-transmiterii de fișiere între stații folosind utilitarul ''​scp''​. +
-SCP (Secure CoPy) este un utilitar ce permite transferul de fișiere între stațiile din rețea. El folosește ssh pentru +
-a transfera datele deoarece acesta oferă deja suport pentru autentificare și criptare. Pentru a putea fi folosit pe +
-stația remote trebuie să ruleze un server ssh. +
-=== Email - Poșta electronică === +
-Email-ul este o metodă de compunere, transmitere și recepție de mesaje online. Pentru livrarea mesajelor se folosește  +
-un mecanism de adresare care are nevoie de 2 informații:​ +
-- numele din Internet (rezolvat de DNS) +
-- numele utilizatorului +
-Cel mai important protocol folosit în transmiterea mesajelor electronice este ''​SMTP (Simple Mail Transfer Protocol)''​. +
-Acest protocol permite preluarea mesajelor de la clienți și transmiterea lor către server. Pentru a realiza operațiunea  +
-inversă, cele mai utilizate protocoale sunt ''​IMAP (Internet Message Acces Protocol)''​ și ''​POP3 (Post Office Protocol  +
-version 3)''​. +
-=== Serviciul web === +
-World Wide Web (WWW) este probabil cel mai utilizat și cel mai cunoscut serviciu din Internet și este format din  +
-totalitatea documentelor și informaților de tip ''​hipertext''​ legate între ele, care pot fi accesate prin  +
-Internet. +
- +
-== Protocolul HTTP == +
-Hypertext Transfer Protocol (HTTP) este cel mai utilizat protocol pentru accesarea informațiilor și date +
-pe Internet. La fel ca toate celelalte servicii de rețea, el se bazează pe modelul client-server,​ în care clientul +
-este navigatorul care face o cerere către un server și așteaptă în schimb pagina (resursa) cerută. +
- +
-== Protocolul HTTPS == +
-Secure Hyper Text Transfer Protocol (HTTPS) nu este decât o îmbunătățire a protocolului HTTP, prin care datele  +
-transmise sunt criptate, astfel conexiunea la server este sigură. Să ne gândim la plățile online pe care le efectuăm +
-cu toții tot mai des. Întotdeauna vrem ca plata să se efectueze cu succes și să nu ajungă altundeva decât unde ne  +
-dorim, deci cu siguranță vrem ca acele website-uri să folosească protocolul HTTPS în defavoarea HTTP. +
- +
-== Browser web ==  +
-Un navigator web (sau browser) este un program care ne permite să accesăm pagini din WWW. Majoritatea browserelor  +
-existente în ziua de azi vin cu funcții utile pentru utilizator cum ar fi posibilitatea instalării unui ad-blocker,​ +
-păstrarea istoricului de navigări sau gestionare de bookmark-uri. De asemenea, majoritatea browserelor au adus îmbunătățiri +
-în ceea ce privește performanța,​ și când vorbim de performanță ne referim în special la cantitatea de trafic de date  +
-utilizat. Majoritatea browserelor folosind un sistem de ''​cache''​ care devine util atunci când încărcam foarte des  +
-o pagină web. La prima încărcare se va face o cerere  +
-către server, iar după pagina respectivă va fi cache-uită. La o doua încărcare vom observa că pagina se va incărca mult  +
-mai rapid datorită "​scutirii"​ pasului de cerere la server. +
- +
-Cele mai utilizate navigatoare din lume sunt ''​Google Chrome'',​ ''​Mozilla Firefox'',​ ''​Safari'',​ ''​Microsoft Internet  +
-Explorer''​ și ''​Microsoft Edge''​. +
- +
-=== Accesul web în linia de comandă === +
-== Utilitarul wget == +
-Acest utilitar ofera suport pentru a descărca pagini și fișiere folosind două protocoale foarte comune, HTTP +
-(HyperText Transfer Protocol) și FTP (File Transfer Protocol). Comanda pentru a-l folosi este wget, căreia îi +
-vom transmite ca argument URL-ul (Universal Resource Locator) resursei pe care dorim să o descărcăm. +
-== Utilitarul curl == +
-Asemănător cu ''​wget'',​ utilitarul ''​curl''​ permite descărcarea de fișiere și pagini. Un avantaj major al +
-utilitarului ''​curl''​ este faptul că acesta suportă mult mai multe protocoale decât ''​wget''​. Prezintă totuși și +
-un dezavantaj față de ''​wget'',​ și anume faptul că nu permite descărcarea recursivă. +
-===== Demo ===== +
- +
-Pentru început, vrem să ne acomodăm cu cele mai importante comenzi din linia de comandă pentru rețelistică și internet. +
- +
-<note tip> +
-Avem și un [[uso:​resurse:​cheatsheet|cheatsheet]] pe care îl putem folosi ca să ne reamintim cele mai frecvente comenzi. +
-</​note>​ +
- +
-==== 0. Vizualizarea adresei IP ==== +
- +
-Stația din laborator are mai multe interfețe de rețea. Pentru a afișa detalii despre ele putem folosi comanda ''​ip address show''​. +
- +
-<code bash> +
- +
-student@uso:​~$ 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 +
-    inet6 ::1/128 scope host +
-       ​valid_lft forever preferred_lft forever +
-2: ens33: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc fq_codel state UP group default qlen 1000 +
-    link/ether 00:​0c:​29:​8b:​37:​c1 brd ff:​ff:​ff:​ff:​ff:​ff +
-    inet 192.168.232.206/​24 brd 192.168.232.255 scope global dynamic noprefixroute ens33 +
-       ​valid_lft 982sec preferred_lft 982sec +
-    inet6 fe80::​8b76:​ddc8:​61ad:​15be/​64 scope link noprefixroute +
-       ​valid_lft forever preferred_lft forever +
-3: ens34: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc fq_codel state UP group default qlen 1000 +
-    link/ether 00:​0c:​29:​8b:​37:​cb brd ff:​ff:​ff:​ff:​ff:​ff +
-    inet 192.168.52.128/​24 brd 192.168.52.255 scope global dynamic noprefixroute ens34 +
-       ​valid_lft 983sec preferred_lft 983sec +
-    inet6 fe80::​97a0:​949d:​33c8:​526f/​64 scope link noprefixroute +
-       ​valid_lft forever preferred_lft forever +
- +
-</​code>​ +
- +
-Observăm că avem 2 interfețe de rețea: ''​ens33''​ și ''​ens34'',​ 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: ''​192.168.232.206/​24''​ și ''​192.168.52.128/​24'',​ respetiv ''​127.0.0.1/​8''​ pentru cea de loopback. (pe stațiile voastre cel mai probabil adresele IP ale primelor 2 interfețe vor fi diferite) +
- +
-''​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''​. +
- +
-<​note>​ +
- +
-In loc să scriem ''​ip address show'',​ putem folosi prescurtarea ''​ip a s''​. +
- +
-</​note>​ +
- +
-==== 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''​. (întrerupem cu CTRL+C după 2-3 pachete trimise) +
- +
-<code bash> +
- +
-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 +
- +
- +
-</​code>​ +
- +
-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''​. +
- +
- +
-<code bash> +
- +
-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 +
- +
- +
-</​code>​ +
- +
-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. +
- +
-<code bash> +
- +
-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 +
- +
-</​code>​ +
- +
-==== 2. DNS ==== +
- +
-Dacă tot am vorbit de DNS mai sus și am arătat o metodă ușoară de a afla adresa IP a lui ''​google.ro'',​ este important de precizat că putem folosi comanda ''​host''​ pentru un DNS lookup sau reverse lookup. Vrem pentru început să facem un ''​lookup''​ pentru ''​google.ro''​. +
- +
-<code bash> +
- +
-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. +
- +
-</​code>​ +
- +
-Dacă vrem să știm cărui nume îi este asociat o adresă IP, folosim tot host astfel: +
- +
-<code bash> +
- +
-student@uso:​~$ host 141.85.227.151 +
-151.227.85.141.in-addr.arpa domain name pointer acs.pub.ro. +
- +
-</​code>​ +
- +
-Și observăm că IP-ul ''​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 name server-ele pe care calculatorul nostru le va folosi. Un exemplu de fișier de configurare:​ +
- +
-Dacă vrem să știm cărui nume îi este asociat o adresa IP, folosim tot host astfel: +
- +
-<code bash> +
- +
-nameserver 192.168.0.100 +
-nameserver 8.8.8.8 +
-nameserver 8.8.4.4 +
- +
-</​code>​ +
- +
-==== 2. Gateway si rutare in internet ==== +
- +
-În momentul de față, stația noastră se află într-o rețea privată aflată sub un router. La rândul lui acest router se poate afla într-o altă rețea și tot așa. Când trimitem un pachet în internet (de exemplu un ping), el 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 există, rulați ''​sudo apt-get install traceroute''​). Exemplu de output pentru comanda traceroute:​ +
- +
-<code bash> +
- +
-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 +
- +
-</​code>​ +
- +
-Spuneam mai devreme că stația noastră se află într-o rețea privată. Pentru a ieși în internet, este nevoie de un nod în această rețea care să aibe rolul de ''​default gateway''​. În cazul nostru este un router 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 privată. +
- +
-Pentru a vedea adresa IP a '​default gateway-ului'​ folosim comanda ''​ip route''​ sau ''​ip r''​ (prescurtat). +
- +
-<code bash> +
- +
-student@uso:​~$ ip route +
-default via 192.168.232.2 dev ens33 proto dhcp metric 100 +
- +
-</​code>​ +
- +
-Observăm că în acest caz, default gateway-ul are adresa IP ''​192.168.232.2''​. +
- +
-Adresa IP a calculatorului nostru este una privată în acest moment. Este util să știm și ce adresa publică avem, mai exact adresa cu care ieșim în internet. Această adresa IP publică nu este știută local, și deci este nevoie de un request extern pentru a o afla. Cel mai simplu este să folosim utilitarul ''​curl''​ și pagina ''​ipinfo.io/​ip''​. +
- +
-<code bash> +
- +
-student@uso:​~$ curl ipinfo.io/​ip +
-141.85.0.122 +
- +
-</​code>​ +
- +
-==== 3. Dhclient si 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 ''​dhclient''​. Se folosește de protocolul DHCP pentru a configura interfața respectivă. +
- +
-De multe ori ne este incomod să lucrăm în CLI-ul din mașina virtuală, de exemplu nu puteam da COPY/PASTE de acolo. O modalitate bună de a scapa de problema asta este să ne conectăm de pe stația locală pe mașină virtuală prin ''​ssh''​. Pentru acest lucru este nevoie să aflăm adresa IP a mașinii virtuale (cum am arătat mai sus) și să rulăm următoarea comandă: (introducem parola ''​student''​) +
- +
-<code bash> +
- +
-student@uso:​~$ ssh student@192.168.232.206 +
- +
-</​code>​ +
- +
-===== Recapitulare ===== +
- +
-Facem o recapitulare a principalelor noțiuni și comenzi ce țin de administrarea spațiului de stocare. Să începem. +
- +
-Această secțiune de laborator o rulăm pe una dintre mașinile virtuale ''​tom''​ sau ''​jerry''​. +
- +
-==== Afișare discuri și partiții ==== +
- +
-Spațiul de stocare al unui sistem este compus din discuri, acestea sunt partiționate,​ iar partițiile sunt formatate cu un sistem de fișiere. +
- +
-Pentru a afișa discurile și partițiile sistemului, folosim comanda ''​lsblk'':​ +
-<​code>​ +
-student@tom:​~$ lsblk +
-NAME   ​MAJ:​MIN RM  SIZE RO TYPE MOUNTPOINT +
-loop0    7:0    0 87.9M  1 loop /​snap/​core/​5328 +
-loop1    7:1    0 86.9M  1 loop /​snap/​core/​4917 +
-sda      8:0    0   ​10G ​ 0 disk +
-├─sda1 ​  ​8:​1 ​   0    1M  0 part +
-└─sda2 ​  ​8:​2 ​   0   ​10G ​ 0 part / +
-sr0     ​11:​0 ​   1 1024M  0 rom +
-</​code>​ +
-În ieșirea comenzii observăm discul ''​sda''​ care are două partiții numite ''​sda1''​ și ''​sda2''​. Acestor discuri și partiții le corespund intrări în directorul ''/​dev/'',​ respectiv ''/​dev/​sda'',​ ''/​dev/​sda1'',​ ''/​dev/​sda2'',​ așa cum putem vedea din comanda de mai jos: +
-<​code>​ +
-student@tom:​~$ ls -l /dev/sda* +
-brw-rw---- 1 root disk 8, 0 Sep  2 09:48 /dev/sda +
-brw-rw---- 1 root disk 8, 1 Sep  2 09:48 /dev/sda1 +
-brw-rw---- 1 root disk 8, 2 Sep  2 09:48 /dev/sda2 +
-</​code>​ +
- +
-Un alt mod de a afișa discuri și partiții este cu ajutorul comenzii ''​fdisk -l'':​ +
-<​code>​ +
-student@tom:​~$ sudo fdisk -l +
-[sudo] password for student: +
-[...] +
-Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors +
-Units: sectors of 1 * 512 = 512 bytes +
-Sector size (logical/​physical):​ 512 bytes / 512 bytes +
-I/O size (minimum/​optimal):​ 512 bytes / 512 bytes +
-Disklabel type: gpt +
-Disk identifier: 422D9F22-0EA7-4B96-8CB4-54AB9AE1C3A0 +
- +
-Device ​    ​Start ​     End  Sectors Size Type +
-/​dev/​sda1 ​  ​2048 ​    ​4095 ​    ​2048 ​  1M BIOS boot +
-/​dev/​sda2 ​  4096 20969471 20965376 ​ 10G Linux filesystem +
-</​code>​ +
-Observăm, la fel, prezența discului ''/​dev/​sda''​ și a partițiilor ''/​dev/​sda1''​ și ''/​dev/​sda2''​. +
- +
-Dacă ne interesează să știm ce sistem de fișiere se găsește pe o partiție dată rulăm comanda de mai jos, cu parametru numele partiției:​ +
-<​code>​ +
-student@tom:​~$ sudo file -s /dev/sda2 +
-/dev/sda2: Linux rev 1.0 ext4 filesystem data, UUID=cd615124-ad0a-11e8-8e41-0800274a7d2c (needs journal recovery) (extents) (64bit) (large files) (huge files) +
-</​code>​ +
-Observăm din rezultatul rulării comenzii că pe partiția ''/​dev/​sda2''​ se găsește un sistem de fișiere de tip Ext4. +
- +
-Pentru a vizualiza partițiile folosite curent (adică montate) rulam comanda ''​mount'':​ +
-<​code>​ +
-student@tom:​~$ mount +
-[...] +
-/dev/sda2 on / type ext4 (rw,​relatime,​data=ordered) +
-[...] +
-</​code>​ +
- +
-==== Investigare și montare fișier .iso ==== +
- +
-Vrem să investigăm conținutul unui fișier ''​.iso''​. Pentru aceasta fișierul trebuie descărcat și montat local folosind comanda ''​mount''​ și opțiunea ''​-o loop''​. +
- +
-Descărcați fișierul ''​.iso''​ de la adresa http://​www.udpcast.linux.lu/​20120424/​udpcd.iso. Investigați tipul său și apoi montați-l local. Vedeți ce fișiere conține și tipul acestora. Demontați fișierul. +
-===== Basics ===== +
- +
-Pentru a începe acest tutorial trebuie să vă asigurați că sunteți în directorul potrivit. Rulați comanda ''​cd ~/​uso.git/​labs/​08-net/​support/​basics/''​.  +
- +
-==== 1. Interfețe de rețea ==== +
- +
-''​ifconfig''​ 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. +
- +
-<code bash> +
- +
-</​code>​ +
- +
-Interfața **loopback** este o interfață virtuală (**nu** una fizică). Scopul acestei interfețe este de a întoarce pachetele trimise către ea. +
- +
-<code bash> +
-$ ifconfig lo0 +
-lo0: flags=8049<​UP,​LOOPBACK,​RUNNING,​MULTICAST>​ mtu 16384 +
- options=1203<​RXCSUM,​TXCSUM,​TXSTATUS,​SW_TIMESTAMP>​ +
- inet 127.0.0.1 netmask 0xff000000  +
- inet6 ::1 prefixlen 128  +
- inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1  +
- nd6 options=201<​PERFORMNUD,​DAD>​ +
-</​code>​ +
- +
-La câmpul inet, 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ă aceasta există doar pe sistemul nostru de operare și deci, o numim "​acasă"​). +
- +
-Dacă dorim să afișăm informațiile unei singure interfețe de rețea, adăugăm după utilitarul **ifconfig**,​ numele acesteia. Putem observa mai sus interfața **lo0** ce succede **ifconfig**. +
- +
-=== 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''​ (Google). +
- +
-<code bash> +
-$ 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 +
-</​code>​ +
- +
-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ă. +
- +
-1.1 Aflați adresa IP de pe mașina virtuală și dați un ping in ea. Vă răspunde?​ +
-1.2 Aflați adresele IP ale colegilor (minim 2) și dați ping in ele. Vă răspund? +
- +
-==== 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ă providerul 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''​ +
- +
-<code bash> +
-$ 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 +
-</​code>​ +
- +
-Putem observa calea pachetelor de la routerul unde suntem conectați până la serverele Google. +
-Putem apela același utilitar și cu o adresa http: +
- +
-<code bash> +
-$ 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 +
-</​code>​ +
- +
-Putem observa că am aflat și adresa publică a site-ului google.com. ​  +
- +
-2.1 Afișați calea urmată de mașina virtuală către un site ales de voi. Prin care interfață ies pachetle? +
- +
-===== Need to Know ===== +
- +
-===== Nice to Know ===== +
- +
-==== 1. WHOIS ==== +
- +
-''​whois''​ este o comandă de Linux folosită pentru a afla informați despre orice domeniu sau adresă IP din Internet. +
- +
-De exemplu dacă vrem să aflăm cine deține adresa IP ''​141.85.241.51'',​ folosim comanda ''​whois''​ urmată de IP: +
- +
-<code bash> +
-$ whois 141.85.241.51 +
-... +
-inetnum: ​       141.85.0.0 - 141.85.255.255 +
-netname: ​       PUB-NET +
-org:            ORG-PUB1-RIPE +
-country: ​       RO +
-... +
-org-name: ​      ​Politehnica University of Bucharest +
-... +
-</​code>​ +
- +
-Din outputul obținut aflăm că adresa IP aparține Universității Politehnica din București, iar dacă derulați mai jos vedeți și detaliile persoanelor de contact. +
- +
-Putem să obține informații și despre domenii, cum ar fi: organizația,​ datele de contact ale administratorilor,​ domain server, data la care a fost creat, ultima dată când a fost actualizat, etc.: +
- +
-<code bash> +
-$ whois cs.curs.pub.ro +
-... +
-contact: ​     administrative +
-name:         Ionut Eugen SANDU +
-organisation:​ National Institute for R&D in Informatics +
-... +
-created: ​     1993-02-26 +
-changed: ​     2018-05-11 +
-source: ​      ​IANA +
-... +
-</​code>​ +
- +
-==== 2. Autentificarea fără parolă ==== +
- +
-Până în acest moment ați folosit protocolul ''​SSH''​ pentru a vă conecta remote de nenumărate ori. +
-''​SSH''​ funcționează în modul ''​client-server'',​ unde mașinile voastre sunt clienții iar pe mașina pe care doriți să vă autentificați există un server SSH (''​daemonul sshd''​) care acceptă conexiuni pe portul 22. +
-Modul implicit de autentificare,​ pe care l-ați folosit până în acest moment, este cu parola utilizatorului cu care vreți să vă conectați la server. +
- +
-Dezavantajele acestei metode sunt: +
-  * securitatea scazută (parolele trebuie să fie puternice, dar în acest caz sunt greu de reținut) +
-  * imposibilitatea automatizării anumitor taskuri (dacă este cazul) +
- +
-Metoda recomandată pentru autentificarea clientului la serverul SSH este folosirea unei perechi de chei publice și private. +
- +
-Pentru a realiza o conexiune SSH fără parolă de pe mașina locală pe o mașină remote (în cazul nostru mașina ''​tom''​),​ trebuie să: +
- +
-1. Generați o pereche de chei publice și private pe masina locală: +
- +
-<code bash> +
-$ ssh-keygen -t rsa +
-</​code>​ +
- +
-Apăsați ''​enter''​ pentru fiecare input cerut. +
-Pentru a verifica că cheia SSH a fost creată inspectați conținutul directorului ''​~/​.ssh/''​. Acesta ar trebui să conțină următoarele fișiere: +
-  * ''​id_rsa''​ -- cheia privată +
-  * ''​id_rsa.pub''​ -- cheia publică +
- +
-<code bash> +
-$ ls ~/.ssh/ +
-id_rsa ​ id_rsa.pub ​ known_hosts +
-</​code>​ +
- +
-2. Copiați cheia publică pe server: +
- +
-<code bash> +
-ssh-copy-id -i ~/​.ssh/​id_rsa.pub student@<​IP-tom>​ +
-</​code>​ +
- +
-<​note>​ +
-Citiți întotdeauna rezultatul comenzilor pe care le rulați. În acest exemplu ar trebui să vedeți mesajul: ''​Number of key(s) added: 1''​. +
-</​note>​ +
- +
-3. Vă conectați la mașina remote. Dacă totul a funcționat corect, ar trebui să nu aveți nevoie de parolă: +
- +
-<code bash> +
-$ ssh student@<​IP-tom>​ +
-</​code>​ +
- +
-**[2a]** Acum că ați reușit să vă autentificați fără parolă pe mașina ''​tom'',​ faceți același lucru și pe mașina vituală ''​jerry''​. +
- +
-**[2b]** Conectați-vă prin SSH pe mașina ''​tom''​ de pe mașina ''​jerry''​. După cum vedeți, se cere parola utilizatorului. Realizați autentificarea fără parolă în ambele direcții pentru cele două mașini virtuale: ''​tom''​ și ''​jerry''​. +
- +
-**[2c]** Conectați-vă fără parolă de pe mașina locală pe ''​fep.grid.pub.ro''​. Dacă ați generat deja o pereche de chei publică și privată pe mașina locală, este nevoie să generați alta? +
- +
-==== 3. Hostname ==== +
- +
-După cum știți, hostname-ul unei mașini se poate observa din prompt-ul terminalui. Acesta se mai poate obține folosind comanda ''​hostname''​. +
-Pentru a schimba hostname-ul unei mașini folosiți aceeași comandă, urmată de noul hostname. Pentru a observa modificarea hostname-ului,​ deschideți alt terminal. +
- +
-<code bash> +
-$ hostname <​new_hostame>​ +
-</​code>​ +
- +
-**[3a]** Schimbați hostname-ul celor două mașini virtuale ''​tom''​ și ''​jerry''​ în ''​cat''​ și ''​mouse''​. +
- +
-**[3b]** Realizați modificările necesare a.î. hostname-ul să fie persistent (să nu se piardă după repornirea mașinii). +
- +
-**[3c]** Dorim să rulăm comanda ''​ping''​ între mașinile virtuale ''​tom''​ și ''​jerry''​ folosind hostname-ul în loc de adresa IP. +
-Pentru aceasta trebuie să instalați pachetul ''​avahi-daemon''​. +
- +
-<note tip> +
-HINT: ping <​hostname>​.local +
-</​note>​ +
- +
-==== 4. SSH X11 forwarding ==== +
- +
-X11 forwarding este folosit pentru a accesa interfața grafică a unei mașini de la distanță, prin intermediul protocolului SSH. +
-Pentru a funcționa, X11 forwarding trebuie să fie activat atât pe client cât și pe server. +
- +
-Pentru acest exercițiu trebuie să vă grupați în echipe de câte doi. Vă veți conecta la calculatorul colegului și veți rula programe cu interfață grafică (firefox, xeyes, etc.). +
- +
-<code bash> +
-$ ssh -X <​user>​@<​IP>​ +
-</​code>​ +
- +
-==== 5. Alias pentru conectare la un server SSH ==== +
- +
-Pentru a ușura conectarea prin SSH, se poate defini un alias care să înglobeze username, adresa serverului, port și diverse opțiuni. +
-În cadrul aliasului se poate activa și X11 forwarding folosind opțiunea ''​ForwardX11 yes''​. +
- +
-<code bash> +
-$ cat ~/​.ssh/​config +
-Host coleg +
-    HostName <​IP-coleg>​ +
-    User student +
-    XForward yes +
-</​code>​ +
- +
-Putem folosi alias-ul ''​server''​ ca în exemplul următor: +
- +
-<code bash> +
-$ ssh coleg +
-</​code>​ +
- +
-**[5a]** Faceți modificările necesare a.î. să vă conectați prin SSH către cele două mașini virtuale folosind aliasuri în loc de numele de domeniu sau adresa IP. +
-Pentru verificare testați folosind ''​ssh tom'',​ respecitv ''​ssh jerry''​. +
-===== Get a Life ===== +
- +
-==== 1. Accesul web în linia de comandă cu autentificare (X Karma points) ==== +
- +
-<​note>​ +
- +
-Pentru acest exercițiu este nevoie să aveți un cont pe site-ul ''​www.github.com''​. +
- +
-</​note>​ +
- +
-**[1a]** Utilizând una din comenzile ''​curl''​ sau ''​wget''​ realizați un +
-request simplu (GET), ''​fără autentificare''​ folosind următorul URL: ''​https://​api.github.com/​users/<​username_github>''​. +
- +
-''​username_github''​ reprezintă username-ul contului vostru de GitHub. +
- +
-Salvați rezultatul comenzii într-un fișier (ex. ''​curl_without_auth''​). +
- +
-**[1b]** Utilizând una din comenzile ''​curl''​ sau ''​wget''​ realizați un +
-request simplu (GET), ''​cu autentificare''​ folosind următorul URL: ''​https://​api.github.com/​users/<​username_github>''​. +
- +
-''​username_github''​ reprezintă username-ul contului vostru de GitHub. +
- +
-Salvați rezultatul comenzii într-un fișier (ex. ''​curl_with_auth''​). +
- +
-**[1c]** Comparați conținutul celor două fișiere utilizând comanda ''​diff'',​ urmărind diferențele. +
- +
- +
-==== 2. Folosirea unui API pentru obținerea de informații ==== +
- +
-**[2a]** Aflați valoarea curentă în ''​RON''​ a monedei virtuale Bitcoin, utilizând API-ul documentat +
-la această adresă: https://​www.coindesk.com/​api/​. +
-(''​Hint:''​ ''​RON''​ reprezintă codul valid conform ISO 4217 al monedei naționale) +
- +
- +
-==== 3. Cheie cu permisuni eronate ==== +
- +
-TODO +
- +
-==== 4. Montarea/​Demontarea unui sistem de fișiere la distanță ==== +
- +
-**[4a]** Instalați pe mașina virtuală ''​USO''​ utilitarul ''​sshfs''​. +
- +
-**[4b]** Creați un director nou pe mașina virtuală ''​USO''​ cu denumirea ''​tom_fs''​. +
- +
-**[4c]** Montați directorul ''/​home/​student''​ de pe mașina virtuală ''​tom''​ pe mașina virtuală ''​USO''​ folosind directorul creat la **[4b]**. +
- +
-**[4d]** De pe mașina virtuală ''​USO''​ adăugați un fișier nou în directorul ''​tom_fs''​. Observați apariția fișierului creat pe mașina virtuală ''​tom''​. +
- +
-**[4e]** Demontați sistemul de fișiere. (**Hint**: comanda ''​umount''​) +
- +
-==== 5. Cheie ssh cu passphrase ==== +
- +
-TODO +
- +
-==== 6. Utilizarea VNC între stații ==== +
- +
-<​note>​ +
-La acest exercițiu veți lucra împreună cu un coleg. Veți juca, pe rând, unul +
-dintre rolurile server/​client. +
-</​note>​ +
- +
-**[6a]** Aflați ambele adrese ale stațiilor pe care lucrați și stabiliți rolurile +
-inițiale. +
- +
-**[6b]** Folosind utilitarul GUI ''​Remmina''​ din Ubuntu, ''​client-ul''​ se va +
-conecta la ''​server''​. +
- +
-**[6c]** Inversați rolurile și repetați task-ul **[6b]**. (''​Hint:''​ Nu rămâneți +
-prinși în recursivitate). +
- +
-==== 7. Instalarea unui server web Apache2 ==== +
- +
-**[7a]** Asigurați-vă că aveți instalat un server web Apache2. +
-**[7b]** Porniți serverul web. +
-**[7c]** Verificați funcționalitatea serverului web utilizând browserul web +
-preferat. +
- +
-==== 8. Instalarea unei aplicații web ==== +
- +
-**[8a]** Instalați aplicația web ''​DokuWiki''​. (''​Hint:''​ https://​www.dokuwiki.org/​install) +
-**[8b]** Testați funcționalitatea. +
-===== Sumar. Cuvinte cheie ===== +
- +
-  * Interfață de rețea, conexiune, adresă IP, ''​localhost''​ (''​127.0.0.1''​) +
-  * Default gateway, DNS, client/​server,​ serviciu +
-  * SSH (conexiune la distanță),​ web (acces resurse) +
-  * Vizualizare adresă IP: ''​ip a s''​ +
-  * Verificare conectivitate:​ ''​ping''​ +
-  * Configuare adresă IP: ''​dhclient''​ +
-  * Identificare default gateway: ''​ip r s''​ +
-  * Interogare DNS: ''​host''​ +
-  * Configurare DNS: ''/​etc/​resolv.conf''​ +
-  * Calea în Internet până la o stație: ''​treceroute''​ +
-  * Conectare și transfer la distanță: ''​ssh'',​ ''​scp''​ +
-  * Autentificare cu cheie publică la distanță: ''​ssh-keygen'',​ ''​ssh-copy-id'',​ ''​~/​.ssh/​id_rsa.pub'',​ ''​~/​.ssh/​authorized_keys''​ +
-  * Descărcare web în linia de comandă: ''​wget'',​ ''​curl''​ +
-  * Vizualizarea serviciilor de rețea locale: ''​netstat''​ +
-  * Configurare client de SSH: alias-uri, X Forwarding: ''​~/​.ssh/​config''​ +
-  * Acces grafic la distanță: VNC, RDP +
-  * Server web: ''​apache2''​+
  
 +{{page>​uso:​laboratoare:​new:​08-net:​nav&​noheader&​nofooter&​noeditbutton}}
uso/laboratoare/new/08-net.1535882981.txt.gz · Last modified: 2018/09/02 13:09 by razvan.deaconescu
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