Inicia OpenVPN en Docker en 2 segundos

Ola, veciños de Khabrovsk! Algunha vez atopou unha situación na que realmente quería ser transportado virtualmente a outra cidade, país ou continente? Teño esta necesidade con bastante frecuencia, polo que a oportunidade de ter o meu propio servidor VPN, que se pode lanzar en calquera lugar, nun par de segundos, era bastante urxente.Neste artigo quero falar do meu proxecto, que concibín cando estaba buscando unha solución preparada, neste caso Docker unha imaxe que lle permita configurar rapidamente un servidor OpenVPN, cun mínimo de configuración e un nivel de seguridade aceptable.

Inicia OpenVPN en Docker en 2 segundos

prehistoria

A capacidade de executar o servizo en calquera máquina, xa sexa un servidor físico, un servidor privado virtual ou mesmo un espazo de contedores dentro doutro sistema de xestión de contedores, era fundamental. A miña mirada caeu inmediatamente sobre Docker. En primeiro lugar, este servizo está gañando popularidade e, polo tanto, cada vez son máis os provedores que ofrecen solucións preparadas coa súa preinstalación; en segundo lugar, hai un almacenamento centralizado de imaxes desde onde podes descargar e executar o servizo mediante un comando no terminal. A idea de que tal proxecto xa debería existir veume e busquei moito. Pero a maioría dos proxectos que atopei foron demasiado engorrosos (había que crear un contedor para o almacenamento permanente de datos e lanzar o contedor coa aplicación varias veces con diferentes parámetros), ou sen documentación correcta, ou completamente abandonados. Non atopar nada aceptable. , comecei a traballar no teu proxecto. Había noites sen durmir antes de estudar documentación, escribir código e depurar, pero finalmente o meu servizo viu a luz e comezou a brillar con todas as cores do panel LED monocromático do enrutador. Entón, pídoche que ames e favoreces - Docker-OpenVPN. Incluso se me ocorreu un logotipo (arriba, antes do corte), pero non o xulguedes rigorosamente, porque xa non son deseñador (xa).Cando implementei este proxecto, prioricei a velocidade de implantación, un mínimo de configuración e un nivel aceptable de seguridade. A través da proba e erro, atopei o equilibrio óptimo destes criterios, non obstante, nalgúns lugares tiven que sacrificar a velocidade de implantación por mor da seguridade e, polo mínimo de configuración, tiven que pagar pola portabilidade: na configuración actual, O contenedor unha vez creado nun servidor non se pode transferir e lanzar noutro. Por exemplo, todos os certificados de cliente e servidor xéranse cando se inicia o servizo e isto levará uns 2 segundos. Non obstante, a xeración do ficheiro Hellman Defi tivo que ser considerada no tempo de compilación: créase durante a construción da imaxe docker e pode durar ata 10 minutos. Gustaríame moito recibir unha auditoría de seguridade desta solución da comunidade respectada.

Lanzamento

Para comezar o servizo necesitamos varias cousas:

  1. Servidor: físico ou virtual. Teoricamente é posible executar no modo docker-in-docker, pero non probei esta opción a fondo;
  2. En realidade Docker. Moitos provedores de hospedaxe ofrecen solucións preparadas con Docker a bordo;
  3. Enderezo IP público.

Se todos os detalles están no seu lugar, entón todo o que temos que facer é executar o seguinte comando na consola do teu 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 atento podería ter notado que o enderezo IP do servidor determínase automaticamente mediante ipify.org. Se por algún motivo isto non funciona, podes especificar o enderezo manualmente. Se todos os pasos anteriores se completaron correctamente, deberíamos ver algo similar na 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!

Estamos preto do obxectivo: agora hai que copiar example.com (no teu caso será o enderezo do teu servidor) e pégao na barra de enderezos do teu navegador. Despois de premer Intro, descargarase o ficheiro client.ovpn e o propio servidor http desaparecerá no esquecemento. Se esta solución ten dúbidas, pode utilizar o seguinte truco: executar o comando anterior e engadir marcas zp e contrasinal. Agora, se pegas a ligazón xerada nunha xanela do navegador, recibirás un arquivo zip cun contrasinal. Unha vez que teñas un ficheiro de configuración do cliente, podes usar calquera cliente axeitado. Eu uso Tunnelblick para Mac.

Video tutorial

Este vídeo titorial contén instrucións detalladas para implementar o servizo en DigitalOcean.

PS Se cres que este proxecto é útil, dálle unha estrela en GitHub, quítao e dillo aos teus amigos. Os colaboradores e as auditorías de seguridade tamén son moi ben recibidos.PPS Se este artigo acaba en Habr, planeo escribir o seguinte sobre como lancei docker-in-docker e docker-in-docker-in-docker, por que o fixen e que resultou.
EDICIÓN 1:

  1. Correxidos erros na publicación,
  2. Respondendo aos comentarios, decidín poñer esta información aquí: a bandeira —privileged é necesaria para traballar con iptables

EDICIÓN 2:

  1. Mellorouse o comando de lanzamento de imaxes: agora non require a bandeira –privileged
  2. Engadiuse unha ligazón á guía de vídeo en ruso: youtu.be/A8zvrHsT9A0

Fonte: www.habr.com

Engadir un comentario