Salut, comunitatea Habr! V-ați confruntat vreodată cu situația în care v-ați dori foarte mult să călătoriți virtual într-un alt oraș, țară sau chiar pe un alt continent? Această nevoie îmi apare destul de des, așa că posibilitatea de a avea propriul server VPN, pe care să-l pot porni de oriunde, în câteva secunde, a fost destul de acută. În acest articol vreau să vă povestesc despre proiectul meu, pe care l-am gândit atunci când căutam o soluție gata făcută, în acest caz imaginea Docker, care să permită ridicarea rapidă a unui server OpenVPN, cu un minim de setări și un nivel acceptabil de securitate.
Povestea
Posibilitatea de a rula serviciul pe orice mașină: fie că este vorba de un server fizic, un server privat virtual sau, pur și simplu, un spațiu de containere într-un alt sistem de gestionare a containerelor — a fost critică. În prima fază, atenția mea a fost atrasă de Docker. În primul rând, acest serviciu câștigă popularitate, ceea ce înseamnă că din ce în ce mai mulți furnizori oferă soluții gata pregătite cu instalarea sa; în al doilea rând, există un depozit centralizat de imagini, de unde poți descărca și rula serviciul cu un singur comanda în terminal. Gândul că un astfel de proiect ar trebui să existe deja m-a vizitat și am căutat insistent. Dar majoritatea proiectelor pe care le-am găsit erau fie prea voluminoase (era nevoie să creezi un container pentru stocarea permanentă a datelor și să lansezi containerul cu aplicația de mai multe ori cu diferite parametrii), fie fără o documentație rezonabilă, fie complet abandonate. Neavând găsit nimic acceptabil, am început să lucrez la propriul meu proiect. În fața mea erau nopți nedormite de studiu al documentației, scriere de cod și depanare, dar, în cele din urmă, serviciul meu a văzut lumina zilei și a început să strălucească cu toate culorile panoului LED monochrom al routerului. Așadar, vă rog să-l primiți cu brațele deschise — . Am creat chiar un logo (deasupra, înainte de cat), dar nu-l judecați prea aspru, deoarece nu sunt designer (încă). Când am realizat acest proiect, am pus pe primul loc viteza de desfășurare, un minim de setări și un nivel acceptabil de securitate. Prin încercări și erori, am găsit un echilibru optim între aceste criterii, deși în unele locuri a fost necesar să sacrific viteza de desfășurare pentru securitate, iar pentru un minim de setări a fost necesară o plată în portabilitate: în configurația actuală, un container creat pe un server nu poate fi mutat și lansat pe altul. De exemplu, toate certificatele client și server sunt generate la pornirea serviciului și acest proces durează aproximativ 2 secunde. Totuși, generarea fișierului Diffie-Hellman a fost mutată în timpul compilării: acesta se creează în timpul construirii imaginii Docker și poate dura până la 10 minute. Mi-ar plăcea foarte mult să obțin un audit de securitate al unei asemenea soluții din partea comunității foarte respectate.
Pornire
Pentru a porni serviciul, avem nevoie de câteva lucruri:
- Server: fizic sau virtual. Teoretic, se poate rula în modul Docker-in-Docker, dar nu am efectuat teste la scară largă pentru această opțiune;
- Docker propriu-zis. Mulți furnizori de servicii de găzduire oferă soluții gata făcute cu Docker „la bord”;
- O adresă IP publică.
Dacă toate datele sunt în ordine, trebuie doar să rulăm următoarea comandă în consola serverului dumneavoastră:
docker run --cap-add=NET_ADMIN
-it -p 1194:1194/udp -p 80:8080/tcp
-e HOST_ADDR=$(curl -s https://api.ipify.org)
alekslitvinenk/openvpnCineva atent ar fi putut observa că adresa IP a serverului este determinată automat folosind ipify.org. Dacă din anumite motive acest lucru nu funcționează, se poate specifica manual adresa. Dacă toate pașii anteriori au fost efectuați corect, ar trebui să vedem în consolă ceva de genul:
Sun Jun 9 08:56:11 2019 Secvență de inițializare completată
Sun Jun 9 08:56:12 2019 Fișierul Client.ovpn a fost generat
Sun Jun 9 08:56:12 2019 Serverul de configurație a fost pornit, descărcați configurația client.ovpn de la http://example.com/
Sun Jun 9 08:56:12 2019 NOTĂ: După ce descărcați configurația client, serverul HTTP va fi oprit!Suntem aproape de țintă: acum trebuie să copiem (în cazul dumneavoastră va fi adresa serverului dvs.) și introduceți în bara de adrese a browserului. După ce apăsați Enter, fișierul client.ovpn va fi descărcat, iar serverul http va dispărea. Dacă această soluție ridică semne de întrebare, puteți folosi următorul truc: rulați comanda anterioară și adăugați flgile zp și parola. Acum, dacă introduceți linkul generat în fereastra browserului, veți obține un arhivă zip cu parola. Când aveți fișierul cu configurația clientului, puteți folosi orice client potrivit. Eu folosesc Tunnelblick pentru Mac.
Tutorial video
Acest tutorial video conține instrucțiuni detaliate pentru implementarea serviciului pe DigitalOcean.

EDIT1:
- Am corectat erorile din publicație,
- Răspunzând comentariilor, am decis să pun aceste informații aici: flag-ul —privileged este necesar pentru a lucra cu iptables
EDIT2:
- Am îmbunătățit comanda de lansare a imaginii: acum nu mai necesită flag —privileged
- Am adăugat un link la un ghid video în limba română:
Sursa: habr.com
