Rețea virtuală

În vederea optimizării resurselor și limitării dezastrelor în cadrul sistemelor de calcul putem folosi cu succes rețelele virtuale.
Acestea sunt construite cu ajutorul mașinilor și în același timp deservește astfel de mașini sau mașini reale atunci când se realizează punți între mașina virtuală și placa de rețea reală la care avem conectată o mașină reală.
O topologie de acest gen este exemplificată în imaginea de mai jos:

Rețeaua virtuală este alcătuită din router/firewall virtual și mașini virtuale ce rulează diferite sisteme de operare și îndeplinesc anumite funcții. De exemplu se poate crea o mașină virtuală ce ține serviciul de web, una ce pune la dispoziție un server de baze de date, o mașină configurată ca NAS, respectiv un desktop cu serviciul de ssh activat, etc. Toate aceste mașini virtuale sunt rulate de mediul de virtualizare Proxmox VE ce este instalat într-o mașină dedicată.
Elementul central al rețelei virtuale este routerul ce are capabilități multiple și care poate fi realizat cu ajutorul unui sistem de operare astfel configurat, ca de exemplu pfSense sau ZeroShell. pfSense este bazat pe sistemul de operare freeBSD iar ZeroShell este realizat în jurul unui nucleu de Linux.

Instalare ZeroShell

Atenție: ZeroShell momentan este abandonat dar tot rămâne o unealtă excepțională, poate cineva va continua proiectul

Am să încerc cândva VyOS o altă distribuție linux dezvoltată pentru a face față ca router, firewall și vpn dar aici totul se desfășoară în consolă.

Am fost impresionat încă de la citirea capabilităților acestei mici distribuții Linux, care oferă, în conformitate cu cele descrise aici, o multitudine de servicii:

  • Realizează echilibrarea și în caz de eșec a mai multor conexiuni la Internet;
  • Realizarea de conexiuni UMTS / HSDPA prin modem 3G;
  • Server RADIUS pentru a asigura autentificarea și gestionarea automată a cheilor de criptare la rețelele wireless 802.11b, 802.11g și 802.11a care acceptă protocolul 802.1x sub formele EAP-TLS, EAP-TTLS și PEAP; Sunt acceptate WPA cu TKIP și WPA2 cu CCMP conform standardului 802.11i; Serverul RADIUS poate, de asemenea, pe baza numelui de utilizator, grupul din care face parte solicitantul sau adresa MAC, să ordoneze accesul pe un VLAN 802.1Q alocat unui SSID;
  • Captive Portal (portal captiv) pentru a sprijini conectarea web pe rețele fără fir și cu fir. Zeroshell acționează ca o poartă de acces pentru rețeaua pe care este activ Captive Portal și pe care adresele IP (de obicei aparținând claselor private) sunt furnizate în mod dinamic de DHCP. Un client care accesează această rețea privată trebuie să se autentifice folosind un browser web cu Kerberos 5 nume de utilizator și parolă înainte ca firewall-ul Zeroshell să îi permită accesul la LAN-ul public. Gateway-urile Captive Portal sunt adesea folosite pentru a oferi acces la Internet în HotSpots ca o alternativă la autentificarea 802.1X, care este prea complicată pentru configurarea utilizatorilor. Zeroshell implementează în mod nativ funcționalitatea Captive Portal, fără a utiliza alte programe software, cum ar fi NoCat sau Chillispot;
  • Managementul calității serviciilor (QoS) și modelarea traficului pentru controlul traficului în rețelele congestionate. Constrângerile pot fi impuse pe banda minimă garantată, pe banda maximă și pe prioritatea unui pachet (util în conexiunile în timp real, cum ar fi VoIP). Aceste constrângeri pot fi aplicate pe interfețele Ethernet, pe VPN-uri, pe punctul PPPoE către puncte, pe punți și pe legătura (agregată) a VPN. Clasificarea traficului poate avea loc, de asemenea, prin filtrele Layer 7 care permit Deep Packet Inspection (DPI) și, prin urmare, să ajusteze banda și prioritatea care să fie alocate fluxurilor de aplicații precum VoIP și P2P;
  • Proxy HTTP cu antivirus open source ClamAV capabil să blocheze central paginile web care conțin virus. Proxy-ul, creat cu HAVP, va funcționa în modul proxy transparent , ceea ce înseamnă că nu este necesar să configurați browserele web ale utilizatorilor pentru a utiliza serverul proxy, dar solicitările http vor fi redirecționate automat către acesta din urmă. Este evident că, în acest caz, mașina care acționează ca un proxy trebuie să fie și un gateway (router IP sau bridge);
  • Asistență pentru funcționalitatea Wireless Point Point cu Multi SSID folosind carduri/plăcile de rețea WiFi bazate pe chipset-uri Atheros. Cu alte cuvinte, un dispozitiv Zeroshell cu una dintre aceste carduri WI-FI poate funcționa ca punct de acces pentru rețelele IEEE 802.11 care acceptă protocoale 802.1X, WPA pentru autentificare și generare dinamică de chei. Evident, autentificarea are loc prin EAP-TLS sau PEAP folosind serverul RADIUS integrat;
  • VPN host-to-lan cu protocol L2TP / IPsec în care L2TP (Layer 2 Tunneling Protocol) autentificat cu Kerberos v5 nume de utilizator și parolă este încapsulat în IPsec autentificat prin IKE cu certificate X.509;
  • VPN Lan-to-Lan cu încapsulare a cadrelor Ethernet în tunelurile SSL / TLS, cu suport pentru VLAN-uri 802.1Q și agregat în echilibrarea sarcinii (creștere a lățimii de bandă) sau toleranță la erori (creșterea fiabilității);
  • Router cu adrese statice și dinamice (RIPv2 cu MD5 sau autentificare text simplu și algoritmi Split Horizon și Poisoned Reverse);
  • 802.1d punte (bridge) cu protocolul Spanning Tree pentru a evita bucle chiar și în prezența căilor redundante;
  • Firewall Packet Filter și Stateful Packet Inspection (SPI), cu filtre aplicabile atât în rutare, cât și în conexiunile la toate tipurile de interfață de rețea, inclusiv VPN-uri și VLAN-uri;
  • Firewall și QoS Classifier control al traficului de partajare a fișierelor P2P;
  • NAT pentru a utiliza adrese de clasă private pe LAN, mascându-le pe WAN cu adrese publice;
  • Redirecționarea porturilor TCP / UDP (PAT) pentru a crea Virtual Server, adică grupuri de servere reale văzute cu o singură adresă IP (adresa Virtual Server). Cererile de pe serverul virtual vor fi sortate pe serverele reale din Round-Robin (ciclic) păstrând conexiunile și sesiunile deja existente. Acest lucru permite echilibrarea încărcării pe serverele web, grupurile SQL și serverele de calcul;
  • Server DNS multizone și cu gestionare automată a Reverse Resolution (rezoluției inversate) în-addr.arpa;
  • Server DHCP multi subnet (subrețea) cu posibilitatea de a atribui adresa IP pe baza adresei MAC a solicitantului;
  • Virtual LAN 802.1Q (VLAN cu etichetare) aplicabilă pe interfețele Ethernet, pe VPN-urile lan-to-lan, pe legăturile VPN și pe punțile (bridge) formate din legături Ethernet, VPN și VPN;
  • Client PPPoE pentru conectarea la WAN prin ADSL, DSL și linii de cablu (necesită MODEM adecvat);
  • Client DNS dinamic care permite trasabilitatea pe WAN chiar și atunci când IP-ul este dinamic. Gestionarea dinamică a înregistrării DNS MX pentru dirijarea SMTP a e-mailului pe serverele de poștă cu IP variabilă;
  • Servere și clienți Network Time Protocol (NTP) pentru a menține sincronizate ceasurile dispozitvelor gazdă;
  • Server Syslog pentru primirea și catalogarea jurnalelor de sistem produse de dispozitivele de la distanță precum sisteme Unix, routere, switch-uri, Access Point WI-FI, imprimante de rețea și altele compatibile cu protocolul syslog;
  • Autentificare Kerberos 5 printr-o autentificare KDC și cross-domain integrată;
  • Autorizare LDAP, NIS și RADIUS;
  • X.509 - autoritate de certificare pentru eliberarea și gestionarea certificatelor electronice;
  • Integrarea între sistemele Unix și domeniile Windows Active Directory într-un singur sistem de autentificare și autorizare folosind autentificarea LDAP și Kerberos 5 pe domenii încrucișate.

Felicitări autorului Fulvio Ricciardi și comunității pentru realizare.

În vederea instalării în mediul virtual vom dercărca imaginea iso de aici și o vom încărca în mediul de virtualizare în spațiul de stocare local(pve).
Apăsăm butonul Upload:

Apăsăm butonul Select file:

Căutăm locația unde se află imaginea iso:

După încărcare în mediul de stocare imaginea va apărea în lista cu imaginile iso:

Creare interfață de rețea

Deoarece un router/firewall are nevoie de două interfețe de rețea, una WAN conectată la rețeaua externă (internet) și una LAN conecatată la rețeaua internă, vom fi nevoiți a creea încă o interfață de rețea, de tipul punte (bridge), pe care o vom atribui rețelei LAN. În mod automat Proxmox la instalare a creat o punte (bridge) vmbr0 către unica placă de rețea internă ce o am în acet moment și prin care serverul Proxmox este conectat la router Asus din rețea.
În acest sens selectăm în fereastra din stânga nodul pve iar apoi selectăm în fereastra din dreapta System -> Network și apăsăm butonul Create după care alegem opțiunea Linux Bridge, ca în imaginea de mai jos:

Se va crea o nouă punte (bridge), denumită vmbr1 în acest caz, la care nu vom atribui nimic (IP, interfață fizică, etc). Interfată noastra va arăta ca în imaginea de mai jos:

![](Screenshot2020-02-14 pve-_Proxmox_Virtual_Environment.png)

Acesta va fi atribuită mai târziu router-ului/firewall-ului (mașinii virtuale) ca interfață de rețea LAN.

Creare mașină virtuală

În cele ce urmează vom realiza o mașină virtuală. Pentru acest lucru este necesar a apăsa butonul Create VM:

După care se va deschide o fereastră in care vom atribui diferite caracteristici mașinii noastre virtuale. Pentru început vom denumi mașina noastră, de exemplu ZeroShell și apăsăm butonul Next pentru a trece în tab-ul următor :

Alegem din locația în care sunt ținute imaginile iso imaginea cu sistemul de operare ce va fi instalat, în acest caz fișierul ZeroShell-3.9.3-x86.iso:

După alegerea imaginii iso la Guest OS nu facem modificări lăsând alegerile implicite la Type: Linux și la Version: 5.x - 2.6 Kernel fiind ceea ce ne interesează.
Ferestra va arăta ca mai jos și vom apăsa butonul Next pentru a trece în tab-ul următor:

În tabul System am lăsat alegerile implicite, Graphic card: Default și la SCSI Controller: VirtIO SCSI, ca în imaginea de mai jos, după care vom apăsa din butonul Next pentru a avansa în tab-ul următor:

În tab-ul aferent Hard Disk vom defini caracterisiticile harddisc-ului virtual folosit de mașina noastră virtuală. Am ales să fie creată o imagine de 5 GB (fiind mai mult ca suficient pentru ZeroShell care din documentație cu 0,5GB se descurcă - aici am exagerat dar mă găndesc că poate îl folosesc și la alte servicii) după care am selectat, din obișnuință, Discard, această opțiune este folosită numai de sistemele ce au kernel începând cu versiunea 5.x. Dar cine știe poate primim un upgrade de kernel pentru ZeroShell. După finalizarea modificărilor vom apăsa butonul Next pentru a trece în tab-ul următor:

În acet tab Memory vom defini cantitatea de memorie alocată mașinii noastre virtuale din memoria fizică. În acest caz am ales 1024 MB, fiind și de această dată darnic cu specificațiile tehnice ale mășinii virtuale. Probabil în viitor voi scădea la 512 MB. După definirea cantității de memorie vom apăsa butonul Next pentru a trece în tabul următor:

În tab-ul Network vom alege o interfață de rețea. În acest caz am ales interfața folosită pentru WAN și anume puntea (bridge) vmbr0 către placa fizică de rețea iar modelul ales a fost Model: VirtIO (paravitualized), după care apăsăm butonul Next pentru a trece în fereastra următoare :

În tab-ul Confirm vom avea un sumar a opțiunilor noastre anterioare și dacă suntem de acord cu ele vom apăsa butonul Finish în vederea realizării mașinii virtuale, în acest caz 104(ZeroShell):

Va trebui să adăugăm interfața de rețea creată anterior vmbr1 la mașina noastră virtuală ce va fi folosită pentru LAN. În acest scop selectăm în fereastra din stânga mașina noastră, în acest caz 104(ZeroShell) iar în ferestra din drepta vom alege Hardware - > Add -> Nework Device ca în ecranul următor:

După care vom alege puntea (bridge) creată în acest scop vmbr1, ca în ecranul de mai jos:

Putem modifica modelul plăcii virtuale dar eu l-am păstrat ca fiind Model: VirtIO (paravitualized), după cum se poate observa în imaginea următoare:

Din punct de vedere a opțiunilor hardware mașina noastră virtuală ce va funcționa ca router/firewall va arăta ca mai jos:

Acum suntem gata să pornim mașina virtuală. Acest lucru se realizează prin apăsarea butonului Start, ca în imaginea de mai jos:

După pornirea mașinii virtuale ne vom conecta cu ajutorul consolei la ecranul mașinii virtuale prin apăsarea butonului Console, ca în imaginea de mai jos:

După pornire ecranul nostru va arăta ca mai jos și vom fi gata de instalarea distribuției ZeroShell în mașina noastră virtulă. În acest sens alegem opțiunea A, apăsând evident tasta A:

Apoi vom alege discul folosit la instalare, în acest caz alegem opțiunea 1:

Vom fi întrebați dacă suntem siguri de alegerea noastră deoarece eventualele informații de pe disc vor fi distruse, alegem că suntem de acord prin scrierea cuvăntului yes, ca în imagine de mai jos:

În ecranul următor vom fi întrebați ce tip de consolă dorim pentru interacțiunea cu serverul ZeroShell, consolă de tip video VGA sau consolă de tip serial SERIAL, iar în acest caz vom alege VGA:

În ecranul următor vom fi întrebați dacă dorim să adăugăm parametri kernelului la pornirea mașini, in acest caz am ales valoarea implicită quiet:

În cele ce urmează va trebui să definim un nume al profilului curent. L-am botezat Profil Principal ca în imaginea de mai jos:

Apoi vom defini numele mașinii:

Va trebui să alegem parola administratorului de sistem (root):

Am lăsat adresele implicite pentru serverul LDAP:

și pentru serverul Kerberos 5, urmând să-l configurez când am să am nevoie de ele, deoarece pentru routare/firewall nu le folosesc:

În etapa următoare vom fi solicitați să realizăm managementul la una din interfețele de rețea, am ales interfața ETH00:

Deoarece în această etapă am avut erori în schimbarea IP-ului implicit 192.168.0.75 am lăsat aceasta adresa urmând să o schimb după instalare la repornire:

După repornirea mașinii virtuale vom fi întâmpinați de un ecran ca în imaginea de mai jos iar pentru modificarea adresei IP vom alege opțiunea I:

Apoi alegem opțiunea M și interfața de rețea la care dorim modificarea IP-ului în acest caz ETH00.
Capturile de ecran sunt luate după ce am modificările, așa că pentru voi repeta pașii.

Indicăm care IP dorim să-l schimbăm, vom alege pe cel dorit în acest caz IP-ului implicit 192.168.0.75 în adresa dorită, în cazul meu 192.168.1.133.

Cum spuneam mai sus eu am realizat modificările înainte astfel că sunt nevoit să mă repet.

Indicăm adresa Gateway-ului (poarta de ieșire):

De acum putem să ne logăm cu browserul pentru a face restul modificărilor. Adresa în cazul meu este http://192.168.1.133:

După introducerea utilizatorului admin și a parolei stabilite anterior ParolaAdmin vom fi întâmpinați de pagina principală pentru managementul mediului ZeroShell:

Din meniul System -> Setup vom alege Network, după care se va deschide pagina la care vom avea acces la configurările plăcilor de rețea, ca în imaginea de mai jos:

De aici putem stabili/modifica/verifica:
1 - poarta de ieșire GATEWAY:

2 - stabili translația IP-lor interne spre exterior - NAT

3 - stabilirea IP-ului interfeței LAN. Am stabilit ca rețeaua LAN să fie din clasa de adrese A iar adresa să fie 10.10.10.1 și masca rețelei 255.0.0.0 (recunosc că m-am întins cam mult dar nu văd nici un impediment în acest moment):

După care vom atribui serverului DHCP, interfața și adresele aferente. Pentru acest lucru 4 alegem din meniul NETWORK -> DHCP. În ferestra nou deschisă vom configura acest server iar în final va arăta ca în imaginea de mai jos:

Pentru început apăsăm butonul New și apoi vom alege subrețeaua de care se va ocupa serverul DHCP:

în final va arăta de forma:

În ferestra Static IP Entries putem stabili să alocăm adrese statice anumitor terminale pe baza adresei MAC, ca în imaginea de mai jos:

În ferestra Dinamic IP Configuration putem stabili adresele alocate dinamic de către serverul DHCP. În acest caz am stabilit ca adresele dinamice să fie între 10.10.10.20 -10.10.10.254, deoarece am rezervat adresele de la 10.10.10.2 la 10.10.10.19 pentru alocare statică.
În fereastra Subnet Options am stabilit adresele pentru DNS și poarta de ieșire pentru adresele alocate de DHCP.
Acum avem minimum necesar pentru ca rețeaua noastră sa fie funcțională. Urmează să instalăm sistemele de operare Linux și Windows pe cele două mașini virtuale ce vor fi conectate la LAN în rețea noastră virtuală.