Llançament OpenVPN a Docker en 2 segons

Hola, Habrites! T'has trobat mai en una situació en què realment volies transportar-te virtualment a una altra ciutat, país o continent? Tinc aquesta necessitat força sovint, així que la possibilitat de tenir el meu propi servidor VPN que pogués llançar a qualsevol lloc en qüestió de segons era força urgent. En aquest article, m'agradaria compartir un projecte que vaig concebre mentre buscava una solució ja feta; en aquest cas, una imatge de Docker que em permetés configurar-la ràpidament. OpenVPN servidor amb una configuració mínima i un nivell de seguretat acceptable.

Llançament OpenVPN a Docker en 2 segons

prehistòria

La capacitat d'executar el servei a qualsevol màquina, ja sigui un servidor físic, un servidor privat virtual o fins i tot un espai de contenidors dins d'un altre sistema de gestió de contenidors, era fonamental. La meva mirada immediatament va caure en Docker. En primer lloc, aquest servei està guanyant popularitat i, per tant, cada cop són més els proveïdors que ofereixen solucions ja fetes amb la seva preinstal·lació; en segon lloc, hi ha un emmagatzematge centralitzat d'imatges des d'on podeu descarregar i executar el servei mitjançant una comanda al terminal. La idea que aquest projecte ja hauria d'existir em va sorgir i vaig buscar molt. Però la majoria dels projectes que vaig trobar eren massa feixucs (havies de crear un contenidor per a l'emmagatzematge de dades permanent i llançar el contenidor amb l'aplicació diverses vegades amb diferents paràmetres), o bé sense documentació correcta, o completament abandonats. No trobar res acceptable. , vaig començar a treballar en el teu projecte. Hi havia nits sense dormir abans d'estudiar documentació, escriure codi i depurar, però finalment el meu servei va veure la llum i va començar a brillar amb tots els colors del panell LED monocrom de l'encaminador. Per tant, us demano que estimi i afavoreixi - Docker-OpenVPN. Fins i tot vaig fer un logotip (a dalt, abans del tall), però no ho jutgis estrictament, perquè ja no sóc dissenyador (ja) Quan vaig implementar aquest projecte, vaig prioritzar la velocitat de desplegament, un mínim de configuració i un nivell acceptable de seguretat. Mitjançant assaig i error, vaig trobar l'equilibri òptim d'aquests criteris, però, en alguns llocs vaig haver de sacrificar la velocitat de desplegament per motius de seguretat i vaig haver de pagar per la portabilitat per un mínim de paràmetres: en la configuració actual, un El contenidor un cop creat en un servidor no es pot transferir i llançar en un altre. Per exemple, tots els certificats de client i servidor es generen quan s'inicia el servei i això trigarà uns 2 segons. Tanmateix, la generació del fitxer Hellman Defi s'havia de tenir en compte en el temps de construcció: es crea durant la creació de la imatge de Docker i pot durar fins a 10 minuts. M'agradaria molt rebre una auditoria de seguretat d'aquesta solució per part de la respectada comunitat.

Запуск

Per iniciar el servei necessitem diverses coses:

  1. Servidor: físic o virtual. Teòricament és possible executar-se en mode docker-in-docker, però no he provat àmpliament aquesta opció;
  2. De fet, Docker. Molts proveïdors d'allotjament ofereixen solucions ja fetes amb Docker a bord;
  3. Adreça IP pública.

Si tots els detalls estan al seu lloc, tot el que hem de fer és executar l'ordre següent a la consola del vostre servidor:

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 lector atent podria haver notat que l'adreça IP del servidor es determina automàticament mitjançant ipify.org. Si per algun motiu això no funciona, podeu especificar l'adreça manualment. Si tots els passos anteriors s'han completat correctament, hauríem de veure alguna cosa semblant a la consola:

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!

Estem a prop de l'objectiu: ara cal copiar example.com (en el vostre cas serà l'adreça del vostre servidor) i enganxeu-la a la barra d'adreces del vostre navegador. Després de prémer Intro, es baixarà el fitxer client.ovpn i el propi servidor http desapareixerà en l'oblit. Si teniu dubtes sobre aquesta solució, podeu utilitzar el truc següent: executeu l'ordre anterior i afegiu senyals zp i contrasenya. Ara, si enganxeu l'enllaç generat a una finestra del navegador, rebreu un arxiu zip amb una contrasenya.Un cop tingueu un fitxer de configuració del client, podeu utilitzar qualsevol client adequat. Jo faig servir Tunnelblick per a Mac.

Vídeo tutorial

Aquest vídeo tutorial conté instruccions detallades per implementar el servei a DigitalOcean.

Reprodueix un vídeo
PS Si trobeu útil aquest projecte, poseu-li una estrella a GitHub, forqueu-lo i digueu-lo als vostres amics. Els col·laboradors i les auditories de seguretat també són molt benvinguts.PPS Si aquest article acaba a Habr, penso escriure el següent sobre com vaig llançar docker-in-docker i docker-in-docker-in-docker, per què ho vaig fer i què en va sortir.
EDIT1:
  1. S'han corregit errors en la publicació,
  2. Responent als comentaris, vaig decidir posar aquesta informació aquí: el senyalador —privileged és necessari per treballar amb iptables

EDIT2:

  1. S'ha millorat l'ordre de llançament d'imatges: ara no requereix el senyalador –privileged
  2. S'ha afegit un enllaç a la guia de vídeo en rus: youtu.be/A8zvrHsT9A0

Font: www.habr.com

Compreu allotjament fiable per a llocs amb protecció DDoS, servidors VPS VDS 🔥 Compra allotjament web fiable amb protecció DDoS, servidors VPS VDS | ProHoster