Differences

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

Link to this comparison view

rl:teme:tema2 [2023/11/01 11:10]
florin.stancu
rl:teme:tema2 [2023/12/20 09:27] (current)
florin.stancu
Line 2: Line 2:
  
  * **Publicare**:​  * **Publicare**:​
-    * //​**2023-12-05 18:00**//+    * //​**2023-12-07 08:00**//
  
-<​hidden>​ 
  * **Termen de predare**:  * **Termen de predare**:
-    * //​**2023-12-21 23:55 - <color red>​deadline HARD (extins :D)</​color>​ **//+    * //​**2023-12-22 23:55 - <color red>​deadline HARD!</​color>​ **//
  
 **Revizii: ** **Revizii: **
-    * **//2022-12-18 ​19:40//:** Checker update, ''​v2022.2.0''​, ce rezolvă niște mesaje ​de eroare ​la ex. 8 și 9; este posibil ca la 8 să nu vă mai dea punctele (și așa și trebuie :P) dacă aveți eroarea cu codul incorect! +    * **//2023-12-18 ​22:10//:** Actualizat checker, ''​v2023.2''​: relaxat verificările de la task 2 (acum este nevoie doar de conectivitate IPv6 în cadrul aceleiași rețele -- deci merge și fără rutare)! 
-    * **//2022-12-17 11:00//:** Zvonurile au devenit reale: <color red>^^^ DEADLINE-UL A FOST EXTINS ^^^. Sărbători fericite ;</​color> ​ +    * **//2023-12-08 ​12:15//:** Actualizat checker, ''​v2023.1''​acum va face o verificare mai amănunțită -- toate serviciile vor fi repornite când rulați ''​%%--%%save''​! Re-citiți rubrica de persistență pentru ​vedea cum salvați e.g., regulile ​''​iptables''​
-    * **//2022-12-08 ​10:00//:** Reparat bug la ex. 9lansat checker ​''​v2022.2.1'' ​+ modificare enunț (acum se acceptă și fără și cu cifre după minus, la download). +<​hidden>​ 
-    * **//2022-12-08 14:00//:** Adăugat notiță la cerința 10 (mail script). +    * **//2023-12-yy hh:mm//:** Reparat ​ceva 
-    * **//2022-12-08 10:00//:** Checker nou, ''​v2022.2.0''​ ce definitivează verificările la taskurile 11-12 + modificări în enunț la task 12 (vedeți notița de la final, plus: portul este TCP v4 nu v6). +</​hidden>​
-    * **//​2022-12-08 08:00//:** Checker nou, ''​v2022.1.0''​: implementat verificarea ex. 10. +
-    * **//2022-12-07 18:35//:** Reparat ​problemă chei publice pe OpenStack (imagine nouă: **RL 2022 Tema2 v1.1**)+
  
-Tema constă în realizarea configurației unui set de exerciții pe o topologie (vedeți mai jos) simulată folosind containere (implementare în ContainerNet +  Docker) într-o mașină virtuală (ori în cloud - OpenStack, ori descărcată local).+Tema constă în realizarea configurației unui set de exerciții pe o topologie (vedeți mai jos) simulată folosind containere (implementare în ContainerNet +  Docker) într-o mașină virtuală (ori în cloud - OpenStack, ori descărcată și rulată local).
  
 ==== Notare ==== ==== Notare ====
Line 23: Line 20:
 Fiecare exercițiu are un punctaj propriu. Nota pe întreaga temă este dată de suma punctajelor acumulate în urma rezolvării fiecărui exercițiu. Fiecare exercițiu are un punctaj propriu. Nota pe întreaga temă este dată de suma punctajelor acumulate în urma rezolvării fiecărui exercițiu.
  
-Punctajul maxim care se poate obține pe întreaga temă este 100 de puncte. Acest punctaj este echivalent cu **1.8 puncte** din nota finală.+Punctajul maxim care se poate obține pe întreaga temă este 100 de puncte. Acest punctaj este echivalent cu **puncte** din nota finală.
  
 Există **și** exerciții bonus, cu ajutorul cărora puteți obține 125 de puncte. Există **și** exerciții bonus, cu ajutorul cărora puteți obține 125 de puncte.
Line 30: Line 27:
  
 <ifauth @rl> <ifauth @rl>
- 
 **Cine vede ce este mai jos este asistent ;)** **Cine vede ce este mai jos este asistent ;)**
- 
-<​hidden>​ 
-<note important>​ 
-<color red>​**Tema este momentan WIP / nepublicată**</​color>​ 
-</​note>​ 
-</​hidden>​ 
- 
 </​ifauth>​ </​ifauth>​
- 
-==== Topologie ==== 
- 
-{{:​rl:​tema2:​topology.png}} 
- 
-<​note>​ 
-**Fapt divers:** VLAN9 se numește rețeaua de pe OpenStack, dacă rulați local, acolo va fi rețeaua hivervizorului (VMWare / VirtualBox) cu mașina fizică. 
-</​note>​ 
  
 ==== Mașina virtuală ==== ==== Mașina virtuală ====
Line 53: Line 34:
 === Utilizare === === Utilizare ===
  
-  * Puteți rezolva tema ori folosind infrastructura OpenStack (aveți proiect special numit ''​rl_tema2_prj''​ - meniu stânga sus, lângă logo OpenStack - unde găsiți și imaginea), ori o mașină virtuală locală (citiți mai jos). +  * Puteți rezolva tema ori folosind infrastructura OpenStack (aveți proiect special numit ''​rl_tema_prj''​ - meniu stânga sus, lângă logo OpenStack - unde găsiți și imaginea), ori o mașină virtuală locală (citiți mai jos). 
-  * Notă: pe OpenStack, autentificarea cu username și parolă nu este posibilă! Folosiți autentificarea cu chei publice, [[:​rl:​info:​resurse:​vm-laborator|prezentată aici]]. ​Va+  * Notă: pe OpenStack, autentificarea cu username și parolă nu este posibilă! Folosiți autentificarea cu chei publice, [[:​rl:​info:​resurse:​vm-laborator|prezentată aici]].
   * Pentru autentificare pe VM local, utilizați credențialele **student/​student**.   * Pentru autentificare pe VM local, utilizați credențialele **student/​student**.
  
Line 61: Line 42:
   * Urmăriți pașii [[:​rl:​labs:​06|din laboratoare]].   * Urmăriți pașii [[:​rl:​labs:​06|din laboratoare]].
   * Link dashboard: https://​cloud.grid.pub.ro/​   * Link dashboard: https://​cloud.grid.pub.ro/​
-  * Va trebui să vă importați cheia publică pe acest proiect nou ''​rl_tema2_prj''​ (proiectul de laborator este diferit, ''​rl_prj''​);​ +  * Va trebui să vă importați cheia publică pe acest proiect nou ''​rl_tema_prj''​ (proiectul de laborator este diferit, ''​rl_prj''​);​ 
-  * Nume imagine (de selectat la //​Sources//​):​ **RL 2022 Tema2 v1.1**;+  * Nume imagine (de selectat la //​Sources//​):​ **RL Tema2 v2023.0**;
   * Tip instanță: **m1.small** (NU aveți nevoie de mai mult);   * Tip instanță: **m1.small** (NU aveți nevoie de mai mult);
-  * Puneți la VM un nume care să vă conține ​numele (sau username-ul de Moodle) vostru ​(dacă veți avea nevoie de ajutor din partea unui asistent, să vă găsim ușor);+  * Puneți la VM un nume care să vă conține ​prefixul ''​TEMA2_''​ apoi username-ul ​vostru ​de Moodle (dacă veți avea nevoie de ajutor din partea unui asistent, să vă găsim ușor);
   * **OBLIGATORIU:​** autentificarea cu user și parolă a fost dezactivată,​ folosiți EXCLUSIV chei publice ssh (pe care ar trebui s-o aveți deja configurată în cadrul laboratoarelor).   * **OBLIGATORIU:​** autentificarea cu user și parolă a fost dezactivată,​ folosiți EXCLUSIV chei publice ssh (pe care ar trebui s-o aveți deja configurată în cadrul laboratoarelor).
   * **NU modificați parola la conturile root / student!** Dacă vă tăiați accesul la VM din greșeală, cereți ajutorul unui asistentului preferat pe Teams ;)   * **NU modificați parola la conturile root / student!** Dacă vă tăiați accesul la VM din greșeală, cereți ajutorul unui asistentului preferat pe Teams ;)
Line 72: Line 53:
 === Rulare în VM local === === Rulare în VM local ===
  
-  * Pentru a rula mașina virtuală a temei local, **o puteți descărca [[https://rl-checker.root.sx/​share/​RL_2022_Tema2.vmdk|de la acest URL]]** (//​4.6GB//​).+  * Pentru a rula mașina virtuală a temei local, **o puteți descărca [[https://rlrullz.root.sx/​share/​RL_Tema2_v2023_0.7z|de la acest URL]]** (//​4.6GB ​dezarhivat//).
   * VM-ul este compatibil atât cu VirtualBox (testat cu 6), cât și VMWare (testat cu Workstation >= 16). Pe Linux, poate fi rulat și prin qemu+kvm.   * VM-ul este compatibil atât cu VirtualBox (testat cu 6), cât și VMWare (testat cu Workstation >= 16). Pe Linux, poate fi rulat și prin qemu+kvm.
   * Va trebui să vă creați mașină virtuală nouă în hipervizorul preferat (VMWare / VirtualBox / etc.) și să importați fișierul ''​vmdk''​ (căutați pe Google documentație,​ pașii diferă în funcție de programul de virtualizare folosit).   * Va trebui să vă creați mașină virtuală nouă în hipervizorul preferat (VMWare / VirtualBox / etc.) și să importați fișierul ''​vmdk''​ (căutați pe Google documentație,​ pașii diferă în funcție de programul de virtualizare folosit).
-  * Accesul prin ssh cu parolă este activat, deoarece VM-ul rulează pe o rețea privată+  * Accesul prin ssh cu parolă ​(''​student:​student''​) ​este activat, deoarece VM-ul rulează pe o rețea privată. 
-  * Dacă întâmpinați probleme, creați un proiect de mașină virtuală nouă și atașați-i disk-ul existent ''​vmdk''​+  * **Atenție: Imaginea VM-ului diferă de cea a laboratorului**, asigurați-vă că îl folosiți pe cel corect!
-  * **Atenție**: Imaginea VM-ului diferă de cea a laboratorului,​ asigurați-vă că îl descărcați pe cel corect!+
  
 ==== Verificarea temei ==== ==== Verificarea temei ====
- 
-  * Mașina virtuală conține checkerul (sursă închisă) și dispune de scripturi pentru a face actualizarea și rularea sa mai simplă. 
  
   * Pentru verificarea temei este disponibil un checker local. Atenție: nu este substitut pentru depanare!   * Pentru verificarea temei este disponibil un checker local. Atenție: nu este substitut pentru depanare!
     * Altfel spus, contează soluția voastră, nu checker-ul.     * Altfel spus, contează soluția voastră, nu checker-ul.
-    * Dacă, dintr-o greșeală, checker-ul dă rezulat pozitiv în cazul unui exercițiu rezolvat greșit nu înseamnă că se va puncta. O eventuală actualizare a checker-ul va puncta corect.+    * Dacă, dintr-o greșeală, checker-ul dă rezulat pozitiv în cazul unui exercițiu rezolvat greșit nu înseamnă că se va puncta. O eventuală actualizare a checker-ul va puncta corect ​(însă veți fi notificați să re-verificați pe canalele obișnuite, forum și Teams).
     * Obiectivul trebuie să fie rezolvarea corectă a enunțului. Checker-ul vine ca o confirmare (ne dorim cât mai sigură) a acelei rezolvări.     * Obiectivul trebuie să fie rezolvarea corectă a enunțului. Checker-ul vine ca o confirmare (ne dorim cât mai sigură) a acelei rezolvări.
-    * Punctajul afișat ​pe RL Checker va fi și cel acordat în catalog la final.+    * Punctajul afișat ​de RL Checker ​la final va fi și cel acordat în catalog la final.
  
   * Play fair: orice tentativă de fraudare / atac la infrastructură va avea ca efect pierderea definitivă a punctajului (sau chiar repetarea materiei, în anumite cazuri), chiar dacă checkerul este //​păcălit//​ :P.   * Play fair: orice tentativă de fraudare / atac la infrastructură va avea ca efect pierderea definitivă a punctajului (sau chiar repetarea materiei, în anumite cazuri), chiar dacă checkerul este //​păcălit//​ :P.
Line 109: Line 87:
 </​code>​ </​code>​
  
-  * Dacă sunt probleme, puteți să postați un mesaj pe thread-ul aferent de pe [[https://​curs.upb.ro/​2022/​mod/​forum/​view.php?​id=100370|forum]];+  * Dacă sunt probleme, puteți să postați un mesaj pe thread-ul aferent de pe [[https://​curs.upb.ro/​2023/​mod/​forum/​view.php?​id=85311|forum]];
  
 ==== Predarea temei ==== ==== Predarea temei ====
  
-  - Pentru ​urcare ​soluție, rulați: <​code>​root@host$ t2check --save</​code>​ +  - Pentru ​împachetarea ​soluției, rulați: <​code>​root@host$ t2check --save</​code> ​(<color red>​atenție:​ această comandă va reseta rețelistica și reporni toate serviciile, echivalent cu un reboot mai rapid -- asigurați-vă că ați lucrat persistent (//vedeți mai jos, la task-uri, cum//​)!</​color>​) 
-  - Rezultatul este o arhivă semnată în directorul în care invocați comanda.+  - Rezultatul este o arhivă semnată în directorul în care invocați comanda ​(''​$PWD''​).
   - Folosind utilitarul ''​scp'',​ copiați acest fișier pe stația voastră locală (atenție să nu încurcați directoarele și să copiați o arhivă veche / salvată în altă parte!). Dacă sunteți conectat la OpenStack prin serverul intermediar ''​fep.grid.pub.ro'',​ va trebui să copiați mai întâi acolo, apoi s-o preluați pe stația voastră de lucru (alternativ,​ puteți folosi funcționalitatea de ''​ProxyCommand''​ a clientului ''​ssh''​ pentru o conexiune directă).   - Folosind utilitarul ''​scp'',​ copiați acest fișier pe stația voastră locală (atenție să nu încurcați directoarele și să copiați o arhivă veche / salvată în altă parte!). Dacă sunteți conectat la OpenStack prin serverul intermediar ''​fep.grid.pub.ro'',​ va trebui să copiați mai întâi acolo, apoi s-o preluați pe stația voastră de lucru (alternativ,​ puteți folosi funcționalitatea de ''​ProxyCommand''​ a clientului ''​ssh''​ pentru o conexiune directă).
-  - Încărcați arhiva pe [[https://​curs.upb.ro/​2022/​mod/​lti/​view.php?​id=99735|RL Checker]] (Moodle).+  - Încărcați arhiva pe [[https://​curs.upb.ro/​2023/​mod/​lti/​view.php?​id=85310|RL Checker]] (Moodle).
  
-<note important>​Recomandăm ​ca rezolvarea exercițiilor ​trebuie ​să se facă în mod persistent. La o repornire a mașinii virtuale, rezolvările trebuie să rămână active, altfel puteți întâmpina dificultăți la o revenire ulterioară asupra temei.+<note important>​Este **obligatoriu** ​ca rezolvarea exercițiilor să se facă în mod persistent. La o repornire a mașinii virtuale, rezolvările trebuie să rămână active, altfel puteți întâmpina dificultăți la o revenire ulterioară asupra temei.
  
 Folosiți comanda ''​reboot''​ înainte să testați de-a întregul (checkerul local doar simulează ceva mai rapid). Folosiți comanda ''​reboot''​ înainte să testați de-a întregul (checkerul local doar simulează ceva mai rapid).
Line 125: Line 103:
  
 <note warning> <note warning>
-Pentru a rezolva tema este îndeajuns ​să prelucrați fișiere doar din căile ''/​etc'',​ ''/​home''​ și ''/​root''​ (atât pe host, cât și pe containere). NU instalați alte pachete în plus.+Pentru a rezolva tema este suficient ​să prelucrați fișiere doar din căile ''/​etc'',​ ''/​home''​ și ''/​root''​ (atât pe host, cât și pe containere). NU instalați alte pachete în plus!
 </​note>​ </​note>​
  
 <note warning> <note warning>
-NU opriți / ștergeți manual containerele (decât dacă doriți să luați de la zero cu configurarea acestora).+NU opriți / ștergeți manual containerele ​Docker ​(decât dacă doriți să luați de la zero cu configurarea acestora,  vedeți mai jos comanda).
  
-Pentru a **șterge și reseta** configurația de pe un container, se recomandă ​secvența: <​code>​systemctl stop rl-topology && docker container rm <nume container>​ && systemctl restart rl-topology;</​code>​+Pentru a **șterge și reseta** configurația de pe un container, se folosiți ​secvența: <​code>​systemctl stop rl-topology && docker container rm <nume container>​ && systemctl restart rl-topology;</​code>​
 </​note>​ </​note>​
  
Line 137: Line 115:
 ==== Personalizarea temei ==== ==== Personalizarea temei ====
  
-Rezolvările sunt particularizate pentru fiecare student (pe baza contului Moodle). Pentru a obține aceste date, accesați link-ul Moodle [[https://​curs.upb.ro/​2022/​mod/​lti/​view.php?​id=99735|RL Checker]].+Rezolvările sunt particularizate pentru fiecare student (pe baza contului Moodle). Pentru a obține aceste date, accesați link-ul Moodle [[https://​curs.upb.ro/​2023/​mod/​lti/​view.php?​id=85310|RL Checker]].
  
-Datele ​de particularizare afișate pe Moodle vor fi introduse şi în fişierul **''/​root/​assignment.txt''​ de pe host**, unde va trebui să păstrați formatul text ''​VARIABILA=valoare''​ (liniile noi în plus nu contează)! ​Atenție: nu puteți personaliza ​aceste valori, ele fiind verificate cu strictețe de către checker-ul online! Includeți ȘI variabila ''​USERNAME''​!+**Atenție:​** datele ​de particularizare afișate pe Moodle vor fi introduse şi în fişierul **''/​root/​assignment.txt''​ de pe host**, unde va trebui să păstrați formatul text ''​VARIABILA=valoare''​ (liniile noi în plus nu contează)! ​**Nu modificați aceste valori**, ele fiind verificate cu strictețe de către checker-ul online! Includeți ȘI variabila ''​USERNAME''​!
  
 Informațiile generate anterior vor fi folosite în enunțul temei cu următoarele notații: Informațiile generate anterior vor fi folosite în enunțul temei cu următoarele notații:
Line 150: Line 128:
 ==== Discuții legate de temă ==== ==== Discuții legate de temă ====
  
-Toate discuțiile legate de probleme/​întrebări/​exerciții din tema de RL trebuie puse pe [[https://​curs.upb.ro/​2022/​mod/​forum/​view.php?​id=100370|forumul temei]].+Toate discuțiile legate de probleme/​întrebări/​exerciții din tema de RL trebuie puse pe [[https://​curs.upb.ro/​2023/​mod/​forum/​view.php?​id=85311|forumul temei]].
 Reguli de utilizare ale acestui forum: Reguli de utilizare ale acestui forum:
  
Line 166: Line 144:
 ==== Subiecte ==== ==== Subiecte ====
  
-<note warning>Toate configurațiile ​să fie **persistente**. Trebuie să fie active și după repornirea mașinii virtuale.+<color green>**Este recomandat ​să citiți enunțul în întregime prima oară și de oricâte ori aveți întrebări!**</​color>​. 
 +Și, desigur, recitirea completă a task-ului următor de care vă apucațdupă o pauză îndelungată de la rezolvarea acestuia.
  
-Pentru modificarea unor fișiere speciale din containerele Docker (''/​etc/​hosts'',​ ''/​etc/​resolv.conf''​) va trebui să folosiți un script de init sau hook de ifupdown. Găsiți mențiuni adecvate la exercițiile unde va fi necesar să faceți asta. +=== Topologie & infrastructură ===
-</​note>​+
  
-<note important>​Va trebui să realizați **primele 4** exerciții în ordine. Întrucât aceste exerciții oferă, în finalconectivitate la Internetrestul se vor baza pe acestea!</​note>​+În topologie aveți ruterele ''​host''​ (fiind VM-ul care găzduiește toată infrastructura)''​Router0''​ (containerul are denumirea ''​R0''​) și ''​Router-X''​ (sub ID-ul ''​R-X''​)''​PC1''​''​PC2'',​ ''​PC3''​ conectate la ''​SW''​ (switch -- nu veți avea nimic de configurat la el) prin 2 VLAN-uri (''​10''​ și ''​20''​) și ''​PC-X''​ (rețea cu ''​R-X''​).
  
-<note important>​Dacă folosiți mai multe scripturi (apelați dintr-un script alt script)folosiți căi absolute. Adică folosiți ''​/​root/​scripts/​make-juju.py'' ​în loc de ''​./make-juju.py'' ​pentru a nu se baza pe directorul actual de lucru (''​working directory''​).</note>+**Atenție**: din motive tehniceidentificatorii echipamentelor ''​Router0''​ și ''​Router-X'' ​au fost prescurtate la ''​R0''​ respectiv ''​R-X''​. Folosiți denumirile prescurtate DOAR ATUNCI când vă conectați la container ​(folosind comanda ​''​go'' ​sau comenzi docker -- dacă va fi cazul), în rest utilizați denumirea full pentru orice altceva (e.g., alias hosts).
  
-<note warning>​Nu trebuie instalați nimic în plus pe mașina virtuală, nu ar trebui să fie nevoie.</​note>​+{{:​rl:​teme:​tema2_topology_2023.png?600}}
  
-Se recomandă citirea întregului set de exerciții înainte ​de rezolvarea temei. În mod asemănătorla rezolvarea unui exercițiu se recomandă citirea întregului subset de exerciții.+<​note>​ 
 +**Fapt divers:** VLAN9 se numește rețeaua de pe OpenStack, dacă rulați localacolo va fi rețeaua hivervizorului (VMWare / VirtualBox) cu mașina fizică. 
 +</​note>​
  
-=== Ex1 [20 puncte] Adresare + rutare IPv4 ===+<note important>​Va trebui să realizați **primele 4** exerciții în ordineÎntrucât aceste exerciții oferă, în final, conectivitate la Internet, restul vor depinde de acestea!</​note>​
  
-  - Configurați cu adrese IP toate legăturile din topologie, astfel: +== Configurații persistente ==
-    * Rețeaua cu ''​Router0,​ PC1, PC2'':​ ''​10.11.$A.0/​28'',​ unde ''​Router0''​ va avea prima adresă asignabilă,​ apoi ''​PC1'',​ apoi ''​PC2''​ (fix în această ordine!); ATENȚIE: pe ''​Router0''​ aveți bridge-ul declarat în ''/​etc/​network/​interfaces.d''​. +
-    * Rețeaua ''​host - PC-X'':​ ''​172.18.$B.8/​29''​ +
-    * Rețeaua cu ''​host - Router0'':​ ''​172.18.$B.16/​30''​ +
-    * Sistemul host va avea mereu prima adresă asignabilă în rețelele la care participă! +
-  - Mai departe, configurați rutarea IPv4 astfel încât toate stațiile să poată accesa ''​host''​-ul (''​PC1''​ și ''​PC2''​ îl vor folosi ca intermediar pe ''​Router0'',​ iar restul containerelor îl vor avea ca ruter implicit pe ''​host''​). +
-  * **Observație**:​ adresa IP de pe ''​eth0''​ a sistemului ''​host''​ este asignată dinamic de către hipervizor, prin DHCP; NU vă atingeți de această interfață,​ altfel riscați să vă pierdeți accesul la VM!  ​+
  
-<​note>​ +<​note ​warning
-Pentru a configura ​persistent ​**rute adiționale**, putețfolosi hook-ul ​''​up'' ​în ''/​etc/​network/​interfaces'' ​([[https://​manpages.debian.org/​jessie/​ifupdown/​interfaces.5.en.html|RTFM here]]).+Toate configurațiile să fie **persistente**. Trebuie să fie active șdupă repornirea mașinii virtuale. 
 + 
 +Pentru modificarea unor fișiere speciale din containerele Docker (''​/etc/hosts''​''/​etc/​resolv.conf''​) va trebui să folosiți un script de init sau hook de ifupdown-ngGăsiți mențiuni adecvate la exercițiile unde va fi necesar să faceți asta!
 </​note>​ </​note>​
  
-=== Ex. 2 [10 puncteAdresare IPv6 ===+Pentru configurație persistentă,​ atât host-ul, cât și containerele vin cu [[https://​github.com/​ifupdown-ng/​ifupdown-ng|ifupdown-ng]] pre-instalat.
  
-  - Configurați adrese IPv6 pentru rețeaua ''​Router0, PC1, PC2''​+Pentru a începe să configurați, verificați fișierele existente la căile ​''​/​etc/​network/​interfaces'' ​și ''/​etc/​network/​interfaces.d/​*''​  
-    * Folosițspațiul ​''​2022:​12:​$A:​$B::​/64''​ +(=> [[https://​github.com/​ifupdown-ng/​ifupdown-ng/​blob/​main/​doc/​ADMIN-GUIDE.md|RTFM here ;)]]). 
-    Aceiași ordine ca mai sus (la IPv4''​Router0''​ va avea prima adresă asignabilăapoi ''​PC1''​ apoi ''​PC2''​. + 
-  - Configuerați conectivitate IPv6 între ​''​Router0'' ​și ''​host'':​ +Pentru a configura persistent ​**rute adiționale** (și nu numai!), puteți folosi hook-ul ​''​up'' ​din sintaxa de configurare ​''​interfaces''​. Exemplu (fragment)<​code>​ 
-    ​* Folosiți spațiul ''​FEC0:​1234:​$B:$D::/64'';​ +iface <​intf>​ 
-    ​* Prima adresă asignabilă este pentru ''​host'',​ a doua a lui ''​Router0''​. +    ​address A.B.C.D/xx 
-  - Configurați rutarea IPv6 pentru a permite comunicarea între toate sistemele cu adresă IPv6+    ​up ip route add X.Y.Z.T/yy via Q.W.E.R 
-    * Rețeaua cu ''​PC-X''​ **NU** are adresă IPv6 ;)+</​code>​
  
-<​note>​ 
 Fișierele ''/​etc/​network/​interfaces*''​ se parsează și execută linie cu linie, scripturile ''​if[up|down]''​ oprindu-se la prima eroare întâlnită. Fișierele ''/​etc/​network/​interfaces*''​ se parsează și execută linie cu linie, scripturile ''​if[up|down]''​ oprindu-se la prima eroare întâlnită.
-De exemplu, dacă aveți o configurație ''​inet static'' ​cu o comandă ​"''​up ip ro add invalid route...''"​ și pe rândurile următoare aveți declarații ​cu "''​inet6''"​, acestea nu vor mai ajunge să fie aplicate!+De exemplu, dacă aveți ​într-secțiune ''​iface'' ​un hook "''​up ip ro add invalid route...''"​ și pe rândurile următoare aveți ​alte declarații,​ acestea nu vor mai ajunge să fie aplicate!
  
 Puteți folosi următorul oneliner pentru a verifica rapid o interfață:​ <​code>​ Puteți folosi următorul oneliner pentru a verifica rapid o interfață:​ <​code>​
-ifdown --force <​intf>;​ ifup --force ​<​intf>;​ ip a sh; ip ro sh;+ifdown --force <​intf>;​ ifup <​intf>;​ ip a sh; ip ro sh 
 +# hint: folosiți ifdown și ifup cu parametrul -a pentru a porni TOATE interfețele declarate! 
 +# ÎNSĂ: NU RULAȚI `ifdown -a` pe host! VĂ VEȚI PIERDE CONECTIVITATEA PE eth0 !!!
 </​code>​ </​code>​
-</​note>​ 
  
-=== Ex. [5 puncteHosts ===+**Pentru a salva regulile ''​iptables''​**,​ urmați pașii de aici: https://​www.serveracademy.com/​courses/​linux-fundamentals/​how-to-save-iptables-rules-permanently/​ (există mai multe modalități,​ e.g. puteți pune hook-uri de ''​up''​ la o interfață etc.). <color red>SUB NICI O FORMĂ SĂ NU INSTALAȚI PACHETELE DESCRISE DIN TUTORIALE (mai ales ''​ifupdown''​ -- vă strică VM-ul, aveți deja ''​ifupdown-ng''​!!)</​color>​. 
 + 
 +<note important>​Dacă folosiți mai multe fișiere în scripturi (e.g., apelați dintr-un script alt script), folosiți căi absolute. Adică folosiți ''/​root/​scripts/​make-juju.py''​ în loc de ''​./​make-juju.py''​ pentru a nu se baza pe directorul actual de lucru (''​working directory''​). NU uitați să le faceți executabile și să includeți shebang-ul!</​note>​ 
 + 
 +=== Ex. [25pAdresare + rutare IPv4 === 
 + 
 +  - Configurați cu adrese IPv4 toate legăturile din topologie, astfel: 
 +    * Subnetați în două rețele fixe (de dimensiuni egale) spațiul ''​10.13.$A.0/​24'';​ distribuiți prima subrețea către ''​VLAN10'',​ iar cealaltă lui ''​VLAN20'';​ atribuiți prima adresă asignabilă ruterului (''​Router0''​),​ apoi următoarele în ordinea denumirilor stațiilor (i.e., ''​Router0,​ PC1, PC3''​ respectiv ''​Router0,​ PC2''​)! **Atenție**:​ pe router aveți deja declarate VLAN-urile în fișierul din ''/​etc/​network/​interfaces.d/''​! 
 +    * Pentru rețelele ''​host -- Router0''​ și ''​host -- Router-X'',​ subnetați **optim** spațiul ''​10.11.$B.0/​29''​ și distribuiți-le în ordinea mențiunii din enunț; ''​host''​ trebuie să aibă, mereu, **prima** adresă asignabilă!  
 +    * Pentru rețeaua ''​Router-X -- PC-X'':​ ''​172.18.$C.64/​29'';​ ruterul va avea prima adresă asignabilă,​ iar stația ''​PC-X''​ **PE ULTIMA** (atenție: **nu broadcast!**,​ cea dinaintea acestuia)! 
 +    * //​Recomandare://​ nu modificați nimic pe containerul ''​SW''​ (switch), altfel riscați să vă stricați infrastructura! 
 +  - Configurați rutarea IPv4 (atât default gateways, cât și rute statice!) astfel încât toate stațiile să se poată accesa unele pe altele prin adresă IP!
  
-  ​* Realizați configurațiile necesare astfel încât echipamentele să poată fi accesate prin numele lor (folosiți numele ''​host'',​ ''​Router0'',​ ''​PC1'',​ ''​PC2'',​ ''​PC-X''​ - atenție la MaJuScUlE!). Adăugați intrări ​de hosts doar pentru adresele IPv4.+<note warning><​color red>​**Atenție mare**:</​color>​ adresa IP de pe ''​eth0''​ a sistemului ''​host''​ este asignată dinamic de către hipervizor, prin DHCP; NU vă atingeți (//never go full ifdown!//) de această interfață,​ altfel riscați să vă pierdeți accesul la VM!</​note>​ 
 + 
 +=== Ex. 2 [15p] Adresare IPv6 === 
 + 
 +  - Configurați adrese IPv6 pentru rețeaua ''​VLAN10''​ și ''​VLAN20''​ (notă: variabila ''​$VLANID''​ va avea valoarea 10, respectiv 20): 
 +    * Folosiți spațiul ''​2023:​E666:​$B:​$A:​$VLANID::/​80''​. 
 +    * Aceeași ordine de mai sus (ca la IPv4): ''​Router0''​ va avea prima adresă asignabilă,​ apoi ''​PCn''​ sortate numeric. 
 +  - Configurați conectivitate IPv6 între ''​Router0''​ și ''​host'':​ 
 +    * Folosiți spațiul ''​FEC0:​5017:​$C:​$D::/​64''​. 
 +    * Prima adresă asignabilă este pentru ''​host'',​ a doua a lui ''​Router0''​. 
 +  - Configurați rutarea IPv6 pentru a permite comunicarea între toate sistemele cu adresă IPv6. 
 +    * Rețeaua ''​Router-X -- PC-X''​ **NU** va avea adresă IPv6 ;) 
 + 
 +=== Ex. 3 [5p] Hosts === 
 + 
 +  ​* Realizați configurațiile necesare astfel încât echipamentele să poată fi accesate prin numele lor (folosiți numele ''​host'',​ ''​Router0'',​ ''​PC1'',​ ''​PC2'',​ ''​PC3'',​ ''​Router-X'',​ ''​PC-X''​ - atenție la MAJUSCULE!). Adăugați intrări doar pentru adresele IPv4.
  
 <​note>​ <​note>​
-Fișierul ''/​etc/​hosts''​ din containere este mai special (montat ca volum ''​--bind''​ de către Docker).+Fișierul ''/​etc/​hosts''​ din containere este mai special (montat ca volum ''​%%--%%bind''​ de către Docker).
 Acest lucru face ca orice modificare a acestuia să se piardă la fiecare restart al containerului (aka reboot al VM-ului sau restart al serviciului ''​rl-topology''​). Acest lucru face ca orice modificare a acestuia să se piardă la fiecare restart al containerului (aka reboot al VM-ului sau restart al serviciului ''​rl-topology''​).
 Dacă (și sigur) vreți să persiste, puteți să-l salvați în altă cale (e.g., ''/​etc/​hosts.orig''​ și să-l restaurați mereu când pornește containerul printr-un hook de ''​up''​ în ''/​etc/​network/​interfaces''​). ​ Dacă (și sigur) vreți să persiste, puteți să-l salvați în altă cale (e.g., ''/​etc/​hosts.orig''​ și să-l restaurați mereu când pornește containerul printr-un hook de ''​up''​ în ''/​etc/​network/​interfaces''​). ​
-[[https://​manpages.debian.org/​jessie/​ifupdown/​interfaces.5.en.html|RTFM aici]] ;) +Ah, și nu folosiți ''​cp'',​ folosiți ''​cat''​ + redirectare bash (fiind volum, nu puteți șterge + recrea fișierul, trebuie ​trunchiat & suprascris), e.g.: <​code>​ 
- +iface <​intf>​ 
-Ah, și nu folosiți ''​cp'',​ folosiți ''​cat''​ + redirectare bash (fiind volum, nu puteți șterge + recrea fișierul, trebuie suprascris)!+ up cat /​etc/​hosts.orig >/​etc/​hosts 
 +</​code>​
 </​note>​ </​note>​
  
-=== Ex. 4 [10 puncte] Internet connectivity ===+=== Ex. 4 [5p] Internet connectivity ===
  
   * Realizați configurațiile necesare pentru ca cele 4 containere sa aibă acces la Internet:   * Realizați configurațiile necesare pentru ca cele 4 containere sa aibă acces la Internet:
Line 234: Line 237:
  
 <​note>​ <​note>​
-Fișierul ''​resolv.conf''​ este gestionat de către Docker :( +Fișierul ''​resolv.conf''​ este gestionat ​ca volum de către Docker :( 
-Aveți aceiași poveste ​cu Docker ​ca la exercițiul anterior => aceiași soluție ​:D+... aceeași poveste ca la exercițiul anterior => aceeași soluție ​(e.g., faceți un fișier ''/​etc/​resolv.conf.orig''​ pe care îl veți suprascrie peste ''/​etc/​resolv.conf''​ cu un hook pe ''​up''​ din interfaces).
 </​note>​ </​note>​
  
-=== Ex. 5 [10 puncte] Network Address Translation ===+=== Ex. 5 [10p] Network Address Translation ===
  
   * Configurați reguli de **NAT** pe sistemele ''​host''​ și ''​Router0''​ (după caz, ori unul ori ambele :P), astfel:   * Configurați reguli de **NAT** pe sistemele ''​host''​ și ''​Router0''​ (după caz, ori unul ori ambele :P), astfel:
-    * Conexiunile pe ''​Router0''​ la porturile ''​(21000 + $G)''​ și ''​(22000 + $H)''​ să conducă la conectarea ssh pe sistemele ''​PC1'' ​respectiv ​''​PC2''​. +    * Conexiunile pe ''​Router0''​ la porturile ​ ''​(14000 + $E)'',​ ''​(14000 + $F)''​ și ''​(14000 + $G)''​ să conducă la conectarea ssh pe sistemele ''​PC1''​''​PC2''​ respectiv ''​PC3''​. 
-    * Conectarea pe ''​host''​ la portul ''​(12300 + $K)''​ să conducă la conectarea pe tracker-ul de pe sistemul ''​PC-X''​ +    * Conectarea pe ''​host''​ la portul ''​(6000 + $K)''​ să conducă la conectarea pe tracker-ul de pe sistemul ''​PC-X''​. 
-  * **Sfat**: aveți grijă cum testați: DNAT-ul va funcționa DOAR dacă veniți dintr-o rețea externă ​stației vizate ​;)+  * **Sfat**: aveți grijă cum testați: DNAT-ul va funcționa DOAR dacă veniți dintr-o rețea externă ​ruterului ​;)
  
-=== Ex. 6 [10 puncte] Filtrare pachete (iptables) ​ ===+=== Ex. 6 [10p] Filtrare pachete (iptables) ​ ===
  
   * Configurați **filtrarea** de pachete pe ''​host''​ și / sau ''​Router0''​ (după caz) astfel încât:   * Configurați **filtrarea** de pachete pe ''​host''​ și / sau ''​Router0''​ (după caz) astfel încât:
-    * conexiunile SMTP inițiate de pe sistemul ''​PC1''​ să fie blocate //(inclusiv către ​host!)//; +    * conexiunile SMTP și SSH inițiate de pe sistemul ''​PC3'' ​în afara rețelei lui să fie blocate //(inclusiv către ​alte rutere!)//; 
-    * conexiunile către tracker-ul ce rulează pe sistemul ''​PC-X''​ să nu fie permise de pe ''​PC2''​. +    * conexiunile către tracker-ul ce rulează pe sistemul ''​PC-X'' ​**să nu** fie permise de la ''​PC1, PC2, PC3''​. 
-    * blocați TOATE conexiunile externe (i.e., de pe stațiile ​din afara rețelei formate din PC1, PC2, Router0) către ''​PC1/PC2'',​ mai puțin protocoalele ''​icmp'',​ ''​ssh''​ și ''​ftp''​. +    * blocați TOATE conexiunile externe (i.e., de pe IP-urile ​din afara stației) către ''​PC2'',​ mai puțin protocoalele ''​icmp''​ și ''​ssh''​. 
-    * **atenție**:​ NU blocați conexiunile inițiate de ''​PC1/PC2'' ​sau răspunsurile de la acestea! folosiți reguli **stateful**;+    * **atenție**:​ NU blocați conexiunile inițiate de ''​PC2'' ​**și nici răspunsurile** de la acestea! folosiți reguli **stateful** ​(i.e. connection tracking)!
  
-=== Ex. 7 [10 puncte] Chei SSH ===+=== Ex. 7 [10p] Chei SSH ===
  
-  * Configurați serviciul de **SSH** pe toate sistemele ''​PC*''​ și ''​host''​ astfel încât autentificarea cu utilizatorul ''​student''​ de pe oricare sistem să fie permisă pe toate celelate sisteme (tot în cadrul utilizatorului ''​student''​) folosind chei publice; +  * Configurați serviciul de **SSH** pe sistemele ​''​PC1'',​ ''​PC2'', ​''​PC-X''​ și ''​host''​ astfel încât autentificarea cu utilizatorul ''​student''​ de pe oricare sistem să fie permisă pe toate celelate sisteme (tot în cadrul utilizatorului ''​student''​) folosind chei publice; 
-  * Folosind [[https://​collectiveidea.com/​blog/​archives/​2011/​02/​04/​how-to-ssh-aliases/​|alias-uri SSH]] să fie folosite comenzi simplificate pentru ​autenficarea pe sisteme:+  * Folosind [[https://​collectiveidea.com/​blog/​archives/​2011/​02/​04/​how-to-ssh-aliases/​|alias-uri SSH]] să fie folosite comenzi simplificate pentru ​conectarea prin SSH între sistemele menționate mai sus:
     * ''​ssh pc1''​ să ducă către sistemul ''​PC1''​ cu utilizatorul ''​student'';​     * ''​ssh pc1''​ să ducă către sistemul ''​PC1''​ cu utilizatorul ''​student'';​
     * ''​ssh pc2''​ să ducă către sistemul ''​PC2''​ cu utilizatorul ''​student'';​     * ''​ssh pc2''​ să ducă către sistemul ''​PC2''​ cu utilizatorul ''​student'';​
     * ''​ssh pc-x''​ să ducă către sistemul ''​PC-X''​ cu utilizatorul ''​student'';​     * ''​ssh pc-x''​ să ducă către sistemul ''​PC-X''​ cu utilizatorul ''​student'';​
 +    * ''​ssh host''​ să ducă către sistemul ''​host''​ cu utilizatorul ''​student'';​
   * **Observație**:​ ''​ssh-copy-id''​ utilizează autentificare ssh pe bază de parolă pentru a copia cheia. Mașina virtuală pe OpenStack nu permite astfel de autentificare pe ''​host'',​ așadar veți fi nevoiți să autorizați cheia publică manual in fișierul corespunzător!   * **Observație**:​ ''​ssh-copy-id''​ utilizează autentificare ssh pe bază de parolă pentru a copia cheia. Mașina virtuală pe OpenStack nu permite astfel de autentificare pe ''​host'',​ așadar veți fi nevoiți să autorizați cheia publică manual in fișierul corespunzător!
  
Line 266: Line 270:
 </​note>​ </​note>​
  
-=== Ex. 8 [10 puncte] Căutare recursivă pe server HTTP cu autentificare ===+=== Ex. 8 [10p] Căutare recursivă pe server HTTP cu autentificare ===
  
-  * Creați, pe sistemul ''​PC1''​ scriptul ''/​home/​student/​scripts/​whereswaldo''​ care să caute recursiv prin paginile de la ''​http://​host/​.X/''​ și să găsească fișierul ''​waldo.txt''​ (e.g., ''​http://​host/​.X/sub/cale/waldo.txt''​). +  * Creați, pe sistemul ''​PC-X''​ scriptul ''/​home/​student/​scripts/​pass''​ care să caute recursiv prin paginile de la ''​http://​host/​.secret/''​ și să găsească fișierul ''​password.txt''​ (e.g., ''​http://​host/​.secret/sub/cale/passwords.txt''​). 
-  * Scriptul va trebui să afișeze DOAR conținutul ​paginii ​site!+  * Scriptul va trebui să afișeze DOAR conținutul ​fișierului ​sit!
   * Va trebui să vă autentificați prin HTTP cu credențialele:​   * Va trebui să vă autentificați prin HTTP cu credențialele:​
-    * //​username//:​ ''​ana''​ +    * //​username//:​ ''​corina''​ 
-    * //​password//:​ ''​face_ReLe''​+    * //​password//:​ ''​RL2023''​
   * Desigur, trebuie mai întâi să descoperiți ce tip de autentificare să folosiți!   * Desigur, trebuie mai întâi să descoperiți ce tip de autentificare să folosiți!
  
-=== Ex. 9 [10 puncte] Descărcare / încărcare fișiere între servere ===+=== Ex. 9 [10p] Descărcare / încărcare fișiere între servere ===
  
-  ​* Pe sistemul ​''​host''​+    ​* Pe ''​PC3''​, realizați un script ​la ''/​home/​student/scripts/send-music''​ care va prelua ​DOAR fișiere care conțin DOAR MAJUSCULE cu extensia ​''​.mp3''​ (i.e. ''​[A-Z]+\.mp3'', ​litere mici extensia!) din directorul curent ​(i.e.: ''​$PWD''​) ​și le va uploada pe ''​PC1'',​ în destinația ​''/​home/​fs/​music''​; folosiți credențialele ​''​fs:5$4l0m''​. NU uitați să-l faceți executabil (+ shebang)! 
-    * Realizați un script ''/​root/scripts/file-upload''​ care uploadează ​DOAR fișierele de forma ''​this([XYZ])_([0-9]{1,​5})\.txt''​ (text fix  ''​this''​ urmat de unul din caracterele ''​X'',​ ''​Y''​ sau ''​Z'', ​apoi un underscore ​(''​_''​) ​urmat de orice număr de 1-5 cifre (va fi între ​''​0-10000''​), și, în final, extensia ''​.txt''​) din directorul curent la URL-ul către subdirectorul ​''/​home/​fs/​upload'' ​de pe ''​PC1''​, autentificarea făcându-se cu parola ​''​3TaLeNt1337''​+    * Pe ''​host''​, creați script-ul ''/​root/​scripts/​copy-firmware''​ care, în primul rând, ​descarcă DOAR fișierele cu forma ''​[a-zA-Z0-9]+\.bin''​ (caractere alfa-numerice + extensia ''​.bin''​) de pe stația ''​PC-X''​ din ''/​opt/my-firmware'' ​și le încarcă (uploadează) pe stația ''​PC2'', ​în directorul ​''/​tmp/​firmware-files/'' ​(va trebui să-l creați dacă nu există!). 
-    * Realizați un script ''/​root/​scripts/​file-download''​ care descarcă DOAR fișierele cu forma ''​([0-9]+)-([a-zA-Z0-9]+)\.tar\.gz''​ (adică orice număr, urmat de separatorul minus ('-'), un șir format din litere mici/mari (din cauza unui bug: <color red>acum se acceptă și cifre</​color>​),​ apoi extensia ''​.tar.gz''​) de pe stația ''​PC-X''​din directorul ​''/​home/student/​download-this/''​, cu destinația în directorul ​curent ​(la momentul rulării scriptului). +  * Folosi un utilitar ​aplicabil protocolului ​(dintre ​''​ftp''​ / ''​wget''​ / ''​curl''​ / ''​scp''​ / ''​rsync''​), ​după caz (recomandăm studierea tuturor înainte de a lua o decizie!)! 
-  * Puteți folosi orice utilitar ​doriți ​(''​ftp''​ / ''​rsync''​ / ''​scp''​), ​dar atenție: trebuie să filtrați cu grijă (și regex :Pfișierele+  * În toate cazurile, aveți de a face DOAR cu fișiere (i.e., transfer non-recursiv);​ nu le copiați în alte subdidrectoare (trebuie duse/​preluate direct la/în calea menționată),​ altfel acestea nu vor fi văzute de către checker ​(+ rezolvare incorectă)
-  * În toate cazurile, aveți de a face DOAR cu fișiere (i.e., transfer non-recursiv);​ nu le copiați în alte subdidrectoare (trebuie duse/​preluate direct la/în calea menționată),​ altfel acestea nu vor fi văzute de către checker! +  * **Atenție**:​ notația folosită ​în enunț este PCRE (Perl-Compatible Regular Expressions),​ însă acest format nu este obligatoriu ​implementat ​ca pattern ​de utilitarele folosite! Citiți documentația / man page-ul utilitarului înainte ​(atenție la glob vs regex -- au diferențe mari de sintaxă)
-  * **Atenție**:​ notația folosită ​de enunț este PCRE (Perl-Compatible Regular Expressions),​ însă acest format nu este implementat de majoritatea utilitarelor de copiere studiate ​(:P), deci va trebui să: //​improvise. adapt. overcome//+  * Pentru testare, puteți ​ori să vă creați fișierele necesare ​într-un director temporar, ori să lăsați ​checkerul ​să facă acest lucru (automat), într-un director _temporar_ (va trebui să-l căutați, though, dar e evident unde îl va pune ;). 
-  * Pentru testare, puteți să vă creați fișierele necesare ​(checkerul ​va face acest lucru automat ​pentru el).+  * Checkerul pentru acest task va refuza să ruleze dacă nu există scripturile / nu sunt executabile (va afișa pur și simplu eroarea ''​skipped''​)!
  
-=== Ex. 10 [5 puncteEmail Script ​===+=== Ex. 10 [Bonus - 10pWireguard tunnelling ​===
  
-  * Pe sistemul ​''​host'' ​este configurat ​un server de e-mail (SMTP). +  * Dorim să conectăm rețeaua ​''​VLAN10'' ​(cea cu ''​PC1''​ și ''​PC3'',​ aka un site întreg) la stația ''​PC-X'' ​(endpoint). 
-  Pe sistemul ''​PC2'',​ creați scriptul ​''/​root/​scripts/​ssh-keys-backup'' ​care să trimită un mesaj către ''​contact@host'' ​ce va conține: +    Veți folosi 2 rețele noi: subnetați **OPTIM** spațiul IPv4 ''​10.66.$J.0/28''​; asignați prima subrețea ​către ​site-ul ​''​VLAN10''​, iar pe cea de-a doua pentru capetele de tunel (''​Router0''​ ș''​PC-X''​) -- folosiți convențiile de ordinea ale IP-urilor de la primul exercițiu! 
-    * subiectul ​''​SSH Keys Backup''​ +    * Denumiți interfețele de tunel ''​wg-rl'' ​la ambele capete. 
-    * atașament cu fișierul ​''​ssh-keys.tar.gz'' ​care să conțină un backup făcut pe loc la ''​PC2:/​home/​student/​.ssh/​*''​; +    * Pe stațiile vizate, toate pachetele destinate către ​''​10.66.$J.0/28'' ​trebuie trecute prin acest tunel! 
-    * fișierul ​''​.tar.gz'' ​astfel creat **va trebui să păstreze permisiunile originale** ale fișierelor! +    ​* **Hint ^**: o interfață Linux poate avea mai multe adrese asignate ;) pur și simplu, adăugați mai multe intrări de tipul ''​address''​ în ''​interfaces''​. 
-    * în mesaj să fie un hash ''​sha256'' ​al atașamentului.+    * Tunelul wireguard trebuie ​să fie persistent! (folosiți hook-uri în ''​interfaces''​). 
 +  * //Hint//: nu uitați să activați rutarea la ameble capete de tunel (unul ar trebui să aibă deja, însă celălalt sigur nu)!
  
-<note important>​ +=== Ex11 [Bonus - 15p] Advanced NAT ===
-Checkerul NU acceptă mesaje inline cu atașamente UUEncoded! Folosiți formate MIME Multipart.+
  
-**Hint:** scriptul nu trebuie ​să fie obligatoriu în bashputeți folosi ​orice interpretor instalat în container ;+  ​Pe stația ''​PC3''​ va fi pornit un serviciu special pe portul TCP ''​999''​ care va accepta DOAR pachete din rețeaua securizată prin wireguard creată la task-ul anterior (checkerul îl va porni automat; pentru testare puteți folosi ''​nc''​ cu argumentul ''​-l''​ și IP destinație de pe rețeaua WireGuard (+ desigur, portul), trebuie să puteți trimite mesaje bidirecționale prin portul forwardat). 
-</note>+  ​Configurați firewallul pe ''​PC-X''​ (aveți iptables instalat) pentru a realiza DNAT astfel încât conexiunile la ''​PC-X''​ portul ''​666''​ să ducă către acest serviciu ce rulează pe ''​PC3''​. 
 +    ​Accesul la serviciu prin ''​PC-X:​666''​ va trebui ​să fie funcțional din orice rețea (e.g.încercați să vă conectați de pe ''​host''​)! 
 +  * **Restricție:​** este obligatoriu să folosiți DOAR iptables și/sau rutare (care ar trebui să fie deja configurată la ex. anteriorpentru a rezolva acest exercițiu, e.g., nu e voie să folosiți un serviciu auxiliar care să asculte pe portul ''​666''​ și să redirecționeze pachetele la ''​PC3''​! 
 +  * //Hint: <color #​EEE>​unvecva ang</color>// folosiți ''​tcpdump''​ cu încredere când nu funcționează ceva ;)
  
-=== Ex. 11 [Bonus - 10 puncte] Wireguard tunnelling === 
- 
-  * Configurați un tunel Wireguard între ''​PC2''​ și ''​PC-X''​. 
-    * Denumiți interfețele de tunel ''​wg-rl''​ pe ambele capete. ​ 
-    * Folosiți rețeaua IPv4 ''​10.99.$C.0/​24''​ pentru capetele tunelului (''​PC-X''​ va avea a prima adresă IP asignabilă,​ ''​PC2''​ pe cea de-a doua). 
-  * //Hint//: nu uitați să activați rutarea! 
- 
-=== Ex. 12 [Bonus - 15 puncte] Advanced port forwarding === 
- 
-  * Pe stația ''​PC2''​ va fi pornit un serviciu special pe portul TCP ''​16661''​ care va asculta DOAR pe capătul de tunel wireguard creat anterior (checkerul îl va porni automat; pentru testare puteți folosi ''​nc''​ cu argumentul ''​-s'',​ trebuie să puteți trimite mesaje bidirecționale prin portul forwardat). 
-  * Configurați firewallul pe ''​PC-X''​ (aveți iptables instalat) pentru a realiza DNAT astfel încât conexiunile la ''​PC-X''​ portul ''​666''​ să ducă către acest serviciu ce rulează pe ''​PC2''​. 
-    * Accesul la serviciu prin ''​PC-X:​666''​ va trebui să fie funcțional din orice rețea (e.g., încercați să vă conectați de pe ''​host''​ sau ''​Router0''​)! 
-  * **Restricție:​** este obligatoriu să folosiți DOAR rutare (care ar trebui să fie deja configurată la ex. anterior) + reguli ''​iptables''​ pentru a rezolva acest exercițiu. E.g., nu e voie să folosiți un serviciu auxiliar care să asculte pe portul ''​666''​ și să redirecționeze pachetele la ''​PC2''​! 
-  * //Hint:// Folosiți ''​tcpdump''​ cu încredere peste tot ;) 
- 
-<note important>​ 
-Am uitat să instalăm iptables pe containerul ''​CT-X''​ (necesar pentru ultimul bonus). 
-=> instalați-l manual ;) nu uitați să dați ''​apt update''​ înainte (containerele au listele de pachete șterse). 
-</​note>​ 
- 
-</​hidden>​ 
  
rl/teme/tema2.1698829839.txt.gz · Last modified: 2023/11/01 11:10 by florin.stancu
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