-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
32 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,22 +3,16 @@ Conectarea la workstation | |
|
||
.. 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 pull`` în directorul | ||
``~/uso-lab/labs/10-tasks-admin/lab-containers/``. | ||
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 pull`` în directorul ``~/uso-lab/labs/10-tasks-admin/lab-containers/``. | ||
|
||
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/10-tasks-admin/lab-containers/lab_prepare.sh`` vă va instala aplicația. | ||
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/10-tasks-admin/lab-containers/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/10-tasks-admin/lab-containers/``. | ||
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/10-tasks-admin/lab-containers/``. | ||
|
||
|
||
Prima problemă cu care ne vom confrunta este conectarea la stație, deoarece, în majoritatea cazurilor, nu vom lucra în aceeași rețea cu sistemul la distanță și stația nu va avea o adresă IP publică, astfel încât să ne putem conecta direct la sistem folosind un protocol de comunicare la distanță, cum ar fi SSH fără să facem pași extra. | ||
Prima problemă cu care ne vom confrunta este conectarea la stație, deoarece, în majoritatea cazurilor, nu vom lucra în aceeași rețea cu sistemul la distanță și stația nu va avea o adresă IP publică | ||
Așadar, nu ne vom putea conecta direct la sistem folosind un protocol de comunicare la distanță, cum ar fi SSH fără să facem pași suplimentari. | ||
|
||
Câteva soluții de conectare la sistem pe care le vom aborda sunt: | ||
* VPN | ||
|
@@ -30,13 +24,13 @@ Problema adreselor IP private | |
|
||
.. note:: | ||
|
||
Pentru rularea acestui demo rulați în directorul ``~/uso.git/labs/03-user/lab-containers/`` comanda ``./lab_prepare.sh install remote`` și comanda ``./lab_prepare.sh install local`` | ||
Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ``./lab_prepare.sh connect`` cum parametrul numele mașinii la care vrem să ne conectăm, ``local`` sau ``remote``. | ||
Pentru rularea acestui demo, rulați în directorul ``~/uso.git/labs/03-user/lab-containers/`` comanda ``./lab_prepare.sh install remote`` și comanda ``./lab_prepare.sh install local`` | ||
Pentru a ne conecta la infrastructura pentru această secțiune, vom folosi comanda ``./lab_prepare.sh connect`` având ca parametru numele mașinii la care vrem să ne conectăm, ``local`` sau ``remote``. | ||
|
||
|
||
Adresele IPv4 au fost contruite pentru a fi identificatori unici în Internet pentru stații. | ||
Acestea pot să identifice maxim :math:`2^{32}` stații în Internet. | ||
Însă, acum există mai multe dispozitive conectate la Internet decât există adrese IPv4 care se pot asigna pe dispozitive. | ||
Însă acum există mai multe dispozitive conectate la Internet decât există adrese IPv4 care se pot asigna pe dispozitive. | ||
|
||
Pentru a se rezolva această problemă, au fost alese anumite intervale de adrese IP care pot fi atribuite pe mai multe dispozitive în același timp. | ||
Astfel, s-a rezolvat problema suprapunerii adreselor IP. | ||
|
@@ -50,21 +44,9 @@ Intervalele adreselor IPv4 private sunt următoarele: | |
|
||
Nicio adresă IP din intervalele de mai sunt nu poate fi accesată direct din Internet. | ||
|
||
De exemplu, dacă încercăm să ne conectăm la sistemul ``remote`` de pe stația ``local``, trebuie mai întâi să aflăm adresa IP a stației ``local``: | ||
|
||
.. code-block:: | ||
root@remote:~# ip a s | ||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
inet 127.0.0.1/8 scope host lo | ||
valid_lft forever preferred_lft forever | ||
190: eth0@if191: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default | ||
link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
inet 10.10.10.3/24 brd 10.10.10.255 scope global eth0 | ||
valid_lft forever preferred_lft forever | ||
Conform comenzii de mai sus reiese că adresa IP a stației remote este ``10.10.10.3``. | ||
În această subsecțiune vom lucra cu 3 stații care sunt distribuite în felul următor: | ||
* ``local``, reprezintă stația "locală", adică laptopul de pe care ne-am conecta, dacă ar fi vorba de un scenariu real; are o singură interfață de rețea cu adresa IP ``10.10.10.3``; | ||
* ``remote``, reprezintă workstation-ul la care vrem să ne conectăm; are o singură interfață cu adresa IP IP ``10.11.11.3``; | ||
|
||
Vom verifica conectivitatea cu stația ``remote`` de pe stația ``local`` folosind comanda ``ping``: | ||
|
||
|
@@ -85,15 +67,14 @@ Vom verifica conectivitatea cu stația ``remote`` de pe stația ``local`` folosi | |
2 packets transmitted, 2 received, 0% packet loss, time 1001ms | ||
rtt min/avg/max/mdev = 8.588/8.806/9.024/0.218 ms | ||
Rezultatul comenzii primei rulări a comenzii ping demonstrează faptul că nu avem | ||
conectivitate între stația ``local`` și stația ``remote``. | ||
Totuși, am testat și conectivitatea cu o altă adresă IP din Internet, în cazul acesta folosind IP-ul stației ``fep.grid.pub.ro``, cu care putem să comunicăm, deci nu este o problemă de conectare la Internet. | ||
Rezultatul comenzii primei rulări a comenzii ``ping`` demonstrează faptul că nu avem conectivitate între stația ``local`` și stația ``remote``. | ||
Totuși, am testat și conectivitatea cu o altă adresă IP din Internet, în cazul acesta folosind adresa IP a stației ``fep.grid.pub.ro``, cu care putem să comunicăm, deci nu este o problemă de conectare la Internet. | ||
Pentru a recapitula funcționalitatea utilitarului ``ping``, revizitați capitolul <TODO> | ||
|
||
Conectarea prin VPN | ||
------------------- | ||
|
||
Prima soluție pentru conectarea la o stație care folosește o adresă IP privată o reprezintă serviciile de tip VPN (Virtual Private Network). | ||
Prima soluție pentru conectarea la o stație care folosește o adresă IP privată o reprezintă serviciile de tip VPN (*Virtual Private Network*). | ||
Acestea conectează două stații care în mod fizic nu sunt conectate la aceeași rețea <TODO ref capitol rețea> | ||
|
||
Pentru această soluție avem două moduri de organizare: folosind un server public pe care îl setăm noi drept server de VPN, sau folosirea unui serviciu public de VPN cum ar fi Hamachi sau ZeroTier. | ||
|
@@ -173,7 +154,7 @@ Pentru a ne autentifica la serverele Hamachi, folosim comanda ``hamachi login``: | |
lmi account: - | ||
Această comandă generează un identificator unic per stație și stabilește un nickname. | ||
Rulând comanda ``hamachi`` vor fi afișate identificatorul, nickname-ul sistemului, adresa IP din VLAN și nickname-ul sistemului. | ||
Rulând comanda ``hamachi`` vor fi afișate identificatorul, nickname-ul sistemului, adresa IP din VPN și nickname-ul sistemului. | ||
|
||
Exercițiu: Instalare Hamachi | ||
"""""""""""""""""""""""""""" | ||
|
@@ -183,10 +164,13 @@ Instalați Hamachi pe stația ``local``. | |
Crearea unei rețele private | ||
""""""""""""""""""""""""""" | ||
|
||
Odată ce am instalat Hamachi pe ambele stații pe care vrem să le conectăm, trebuie să creăm o rețea privată prin care acestea două să comunice. | ||
Odată ce am instalat Hamachi pe ambele stații pe care vrem să le conectăm, trebuie să creăm o rețea virtuală prin care acestea două să comunice | ||
Această rețea va conecta cele două calculatoare, cu toate că ele nu sunt fizic în aceeași rețea. | ||
|
||
Vom crea rețeaua virtuală de pe stația ``remote``, astfel aceasta va fi administratorul rețelei. | ||
Vom crea rețeaua virtuală de pe stația ``remote``. | ||
Pentru a crea o rețea virtuală folosim comanda ``hamachi create`` împreună cu numele rețelei și parola acesteia. | ||
Stația ``remote`` va avea drepturi de administrare a rețelei. | ||
Doar acesta poate să scoată sisteme din rețea, sau să șteargă rețeaua. | ||
Pentru demo-ul pe care îl urmăriți, folosiți în loc de șirul de caractere ``nume-prenume`` numele și prenumele vostru. | ||
|
||
.. code-block:: | ||
|
@@ -238,7 +222,7 @@ Conectați stațiile ``local`` și ``remote`` la noua rețea. | |
Folosirea unui VPN privat | ||
^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
Pentru folosirea unui VPN privat este nevoie să avem o stație în Internet la care să avem acces atât stația locală (cum ar fi laptopul) cât și cea remote (workstationul). | ||
Pentru folosirea unui VPN privat este nevoie să avem o stație în Internet la care să avem acces atât de la stația locală (cum ar fi laptopul) cât și de la cea de la distanță (workstationul). | ||
Putem obține acces la astfel de stații cumpărând acces la o mașină virtuală, cum ar fi într-un serviciu de hosting, cum ar fi AWS, DigitalOcean, Microsoft Azure sau Linode. | ||
|
||
Odată ce am obținut o stație cu o adresă IP publică, este nevoie să configurăm un serviciu de VPN. | ||
|
@@ -250,32 +234,32 @@ Conectarea folosind un tunel SSH | |
-------------------------------- | ||
.. note:: | ||
|
||
Pentru rularea acestui demo rulați în directorul ``~/uso.git/labs/10-task-admin/lab-containers/`` comanda ``./lab_prepare.sh install ssh-server``. | ||
Pentru rularea acestui demo, rulați în directorul ``~/uso.git/labs/10-task-admin/lab-containers/`` comanda ``./lab_prepare.sh install ssh-server``. | ||
Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ``./lab_prepare.sh connect`` cum parametrul numele mașinii la care vrem să ne conectăm, ``local``, ``remote`` sau ``ssh-server``. | ||
|
||
Abordările pe care le-am discutat mai sus presupun accesul la un server central și drepturi de administrator din partea utilizatorului pentru instalarea aplicațiilor (cum ar fi Hamachi sau OpenVPN). | ||
Dacă nu avem acces la un cont de administrator, nu putem să ne conectăm la stația de la distanță. | ||
|
||
O alternativă care nu presupune drepturi administrative sunt tunelele SSH. | ||
Un tunel SSH reprezintă o conexiune între două stații facilitată de protocolul SSH. | ||
Astfel, în loc să trimitem comenzi prin SSH către o stație, putem trimite orice tip de mesaj, pentru orice aplicație, nu numai SSH între orice două porturi. | ||
Astfel, în loc să trimitem comenzi prin SSH către o stație, putem trimite orice tip de mesaj, pentru orice aplicație. | ||
|
||
Dezavantajul acestei abordări este că necesită accesul la un server terț care să fie accesibil de ambele stații. | ||
|
||
<TODO Insert schemă> | ||
|
||
În această subsecțiune vom lucra cu 3 stații care sunt distribuite în felul următor: | ||
* ``local``, reprezintă stația "locală", adică laptop-ul de pe care ne-am conecta, dacă ar fi vorba de un scenariu real; are o singură interfață de rețea cu adresa IP ``10.10.10.3``; | ||
* ``remote``, reprezintă workstation-ul la care vrem să ne conectăm; are o singură interfață cu IP-ul ``10.11.11.3``; | ||
* ``server``, reprezintă serverul terț prin care ne vom conecta ca să ajungem la workstation; această stație are două interfețe conectate la ea, cu IP-urile ``10.10.10.2`` și ``10.11.11.2``, dar în realitate aceasta ar avea o singură placă de rețea. | ||
* ``local``, reprezintă stația "locală", adică laptopul de pe care ne-am conecta, dacă ar fi vorba de un scenariu real; are o singură interfață de rețea cu adresa IP ``10.10.10.3``; | ||
* ``remote``, reprezintă workstationul la care vrem să ne conectăm; are o singură interfață cu adresa IP ``10.11.11.3``; | ||
* ``ssh-server``, reprezintă serverul terț prin care ne vom conecta ca să ajungem la workstation; această stație are două interfețe conectate la ea, cu adresele IP ``10.10.10.2`` și ``10.11.11.2``, dar în realitate aceasta ar avea o singură placă de rețea. | ||
|
||
Stațiile ``local`` și ``remote`` nu au conectivitate între ele, dar au conectivitate la stația ``ssh-server``, deoarece sunt în aceeași rețea | ||
Stațiile ``local`` și ``remote`` nu au conectivitate între ele, dar au conectivitate la stația ``ssh-server``, deoarece sunt în aceeași rețea. | ||
|
||
Inițializarea tunelului SSH | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
Primul pas necesar pentru conectarea la o stație prin tunel SSH este inițializarea tunelului. | ||
Atunci când inițializăm tunelul acesta va deschide portul ``4242`` pe stația ``ssh-server`` de la adresa ``10.11.11.2`` astfel încât mesajele trimise către portul ``4242`` vor fi trimise către portul ``22`` de pe stația ``remote`` , stația de pe care inițializăm tunelul SSH. | ||
Când inițializăm tunelul acesta va deschide portul ``4242`` pe stația ``ssh-server`` de la adresa ``10.11.11.2``, astfel încât mesajele trimise către portul ``4242`` vor fi trimise către portul ``22`` de pe stația ``remote`` , stația de pe care inițializăm tunelul SSH. | ||
|
||
Pentru a deschide tunelul vom folosi comanda următoare: | ||
|
||
|
@@ -289,11 +273,11 @@ Pentru a deschide tunelul vom folosi comanda următoare: | |
[email protected]'s password: | ||
Opțiunile comenzii ``ssh`` folosite sunt următoarele: | ||
* ``-N`` este folosită atunci când deschidem tunele pentru a nu deschide shell-uri în care să dăm comenzi; | ||
* ``-N`` este folosită atunci când deschidem tunele pentru a nu deschide shelluri în care să dăm comenzi; | ||
* ``4242`` este portul pe care vrem să îl deschidă pe stația ``ssh-server``; | ||
* ``localhost`` este stația către care vor fi trimise mesajele primite pe portul ``4242``. În cazul acesta mesajele vor fi trimise către ``localhost``, adică stația ``remote``, cea de pe care rulăm comanda de tunelare; | ||
* ``22`` este portul de pe stația ``localhost`` către care vrem să fie trimise mesajele primite pe portul ``4242`` de pe stația ``ssh-server``; | ||
* ``[email protected]``, utilizatorul și IP-ul stației către care vrem să deschidem tunelul; în cazul acesta este IP-ul stației ``ssh-server``. | ||
* ``[email protected]``, utilizatorul și IP-ul stației către care vrem să deschidem tunelul; în cazul acesta este adresa IP a stației ``ssh-server``. | ||
|
||
Putem să verificăm că a fost deschis portul ``4242`` pe stația ``ssh-server`` | ||
rulând comanda ``netstat -tlpn``: | ||
|
@@ -315,7 +299,7 @@ Folosirea tunelului SSH | |
|
||
Odată creat tunelul, vrem să îl folosim de pe stația ``local``, pentru a putea rula comenzi pe stația ``remote``. | ||
|
||
Pentru a face asta, trebuie să ne conectăm la stația ``server``. Serverul ``server`` poate fi accesat la adresa ``10.11.11.2``. | ||
Pentru a face acest lucru, trebuie să ne conectăm la stația ``server``. Serverul ``server`` poate fi accesat la adresa ``10.11.11.2``. | ||
|
||
.. code-block:: | ||
|