Lansați OpenVPN în Docker în 2 secunde

Bună ziua, locuitorii din Khabrovsk! Te-ai confruntat vreodată cu o situație în care ai vrut cu adevărat să fii transportat virtual într-un alt oraș, țară sau continent? Am această nevoie destul de des, așa că oportunitatea de a avea propriul meu server VPN, care poate fi lansat oriunde, în câteva secunde, a fost destul de urgentă.În acest articol vreau să vorbesc despre proiectul meu, pe care l-am conceput când eram cautand o solutie gata facuta, in acest caz Docker o imagine care sa iti permita configurarea rapida a unui server OpenVPN, cu un minim de setari si un nivel de securitate acceptabil.

Lansați OpenVPN în Docker în 2 secunde

preistorie

Capacitatea de a rula serviciul pe orice mașină - fie că este vorba despre un server fizic, fie un server privat virtual sau chiar un spațiu container în interiorul altui sistem de management al containerelor - a fost critică. Privirea mea a căzut imediat asupra lui Docker. În primul rând, acest serviciu câștigă popularitate și, prin urmare, tot mai mulți furnizori oferă soluții gata făcute cu preinstalarea sa; în al doilea rând, există o stocare centralizată a imaginilor de unde puteți descărca și rula serviciul folosind o singură comandă din terminal. Mi-a venit ideea că un astfel de proiect ar trebui să existe deja și am căutat din greu. Dar majoritatea proiectelor pe care le-am găsit au fost fie prea greoaie (trebuia să creați un container pentru stocarea permanentă a datelor și să lansați containerul cu aplicația de mai multe ori cu parametri diferiți), fie fără documentație corectă, fie abandonate complet. Nu găsim nimic acceptabil. , am început să lucrez la proiectul tău. Au fost nopți nedormite înainte de a studia documentația, scrierea codului și depanarea, dar în cele din urmă serviciul meu a văzut lumina zilei și a început să strălucească cu toate culorile panoului LED monocrom al routerului. Deci, vă cer să iubiți și să favorizați - Docker-OpenVPN. Am venit chiar și cu un logo (mai sus, înainte de tăiere), dar nu-l judeca strict, pentru că nu mai sunt designer (mai) Când am implementat acest proiect, am prioritizat viteza de implementare, un minim de setări și un nivel acceptabil de securitate. Prin încercare și eroare, am găsit echilibrul optim al acestor criterii, totuși, în unele locuri a trebuit să sacrific viteza de implementare de dragul securității și a trebuit să plătesc pentru portabilitate pentru un minim de setări: în configurația actuală, un containerul odată creat pe un server nu poate fi transferat și lansat pe altul. De exemplu, toate certificatele client și server sunt generate la pornirea serviciului și acest lucru va dura aproximativ 2 secunde. Cu toate acestea, generarea fișierului Hellman Defi a trebuit să fie luată în considerare în timpul construirii: este creat în timpul construirii imaginii docker și poate dura până la 10 minute. Mi-ar plăcea foarte mult să primesc un audit de securitate al unei astfel de soluții de la comunitatea respectată.

lansa

Pentru a începe serviciul avem nevoie de mai multe lucruri:

  1. Server: fizic sau virtual. Teoretic, este posibil să rulezi în modul docker-in-docker, dar nu am testat pe larg această opțiune;
  2. De fapt, Docker. Mulți furnizori de găzduire oferă soluții gata făcute cu Docker la bord;
  3. Adresă IP publică.

Dacă toate detaliile sunt la locul lor, atunci tot ce trebuie să facem este să rulăm următoarea comandă în consola serverului tău:

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/openvpn

Un cititor 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ă, atunci puteți specifica adresa manual. Dacă toți pașii anteriori au fost parcurși corect, atunci ar trebui să vedem ceva similar în consolă:

Sun Jun  9 08:56:11 2019 Initialization Sequence Completed
Sun Jun  9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!

Suntem aproape de obiectiv: acum trebuie să copiem example.com (în cazul dvs. va fi adresa serverului dvs.) și lipiți-o în bara de adrese a browserului dvs. După ce apăsați Enter, fișierul client.ovpn va fi descărcat, iar serverul http însuși va dispărea în uitare. Dacă această soluție are îndoieli, puteți folosi următorul truc: rulați comanda anterioară și adăugați steaguri zp si parola. Acum, dacă lipiți linkul generat într-o fereastră de browser, veți primi o arhivă zip cu o parolă.Odată ce aveți un fișier de configurare a clientului, puteți utiliza orice client adecvat. Folosesc Tunnelblick pentru Mac.

Tutorial video

Acest tutorial video conține instrucțiuni detaliate pentru implementarea serviciului pe DigitalOcean.

PS Dacă găsești acest proiect util, te rugăm să-i dai o stea pe GitHub, să-l furifici și să spui prietenilor tăi. Colaboratorii și auditurile de securitate sunt, de asemenea, binevenite.PPS Dacă acest articol ajunge pe Habr, atunci plănuiesc să scriu următorul despre cum am lansat docker-in-docker și docker-in-docker-in-docker, de ce am făcut-o și ce a rezultat din el.
EDIT1:

  1. Erori corectate în publicație,
  2. Răspunzând la comentarii, am decis să pun aceste informații aici: indicatorul —privileged este necesar pentru a funcționa cu iptables

EDIT2:

  1. S-a îmbunătățit comanda de lansare a imaginii: acum nu necesită marcajul –privilegied
  2. S-a adăugat un link către ghidul video în limba rusă: youtu.be/A8zvrHsT9A0

Sursa: www.habr.com

Adauga un comentariu