Execute o OpenVPN no Docker em 2 segundos

Olá, cidadãos de Habrovsk! Você já encontrou uma situação em que realmente gostaria de viajar para outra cidade, país ou outro continente? Como tenho essa necessidade com frequência, a possibilidade de ter meu próprio servidor VPN que pode ser iniciado em qualquer lugar em alguns segundos foi bastante aguda.Neste artigo, quero falar sobre o meu projeto, que planejei quando procurava uma solução pronta, neste caso, docker uma imagem que permita aumentar rapidamente o servidor OpenVPN, com um mínimo de configurações e um nível aceitável de segurança.


Antecedentes

A capacidade de executar o serviço em qualquer máquina: seja um servidor físico ou um servidor virtual privado ou, de todo, o espaço do contêiner dentro de outro sistema de gerenciamento de contêineres - era fundamental. Meu olhar imediatamente caiu no Docker. Primeiro, esse serviço está ganhando popularidade e, portanto, mais e mais fornecedores fornecem soluções prontas para uso com sua pré-instalação; em segundo lugar - existe um repositório centralizado de imagens, de onde você pode baixar e iniciar o serviço com um único comando no terminal. A ideia de que esse projeto já deveria existir, me visitou e eu procurei persistentemente. Mas a maioria dos projetos que encontrei era muito complicada (era necessário criar um contêiner para armazenamento permanente de dados e executá-lo várias vezes com um aplicativo com parâmetros diferentes), sem documentação sã ou completamente abandonada. Não encontrando nada aceitável, comecei trabalhe em seu projeto. À frente, passavam noites sem dormir estudando documentação, escrevendo código e depurando, mas no final, meu serviço viu a luz e tocou em todas as cores do painel de LED monocromático do roteador. Portanto, ame e favor - Docker-OpenVPN . Eu até criei um logotipo (acima, na frente do corte), mas não o julgo estritamente, porque eu não sou um designer (já). Quando implementei este projeto, concentrei-me na velocidade de implantação, no mínimo de configurações e em um nível de segurança aceitável. Por tentativa e erro, encontrei o equilíbrio ideal desses critérios, no entanto, em alguns lugares, tive que sacrificar a velocidade de implantação por segurança e tive que pagar a portabilidade por um mínimo de configurações: na configuração atual, o contêiner criado uma vez em um servidor não pode ser transferido e executado em outro. Por exemplo, todos os certificados de cliente e servidor são gerados quando o serviço é iniciado e isso leva cerca de 2 segundos. No entanto, a geração do arquivo Defi Hellman teve que ser retirada no tempo de compilação: é criada durante a compilação da imagem do docker e pode durar até 10 minutos. Gostaria muito de receber uma auditoria de segurança dessa solução de uma comunidade respeitada.

Lançamento

Para iniciar o serviço, precisamos de algumas coisas:
  1. Servidor: físico ou virtual. Teoricamente, você pode executar no modo docker-in-docker, mas não realizei testes extensivos dessa opção;
  2. Na verdade janela de encaixe. Muitos provedores de hospedagem fornecem soluções prontas com o Docker "on board";
  3. O endereço IP público.
Se todos os detalhes estiverem corretos, resta executar o seguinte comando no console do seu 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 
Um leitor atento pode prestar atenção ao fato de que o endereço IP do servidor é determinado automaticamente usando o ipify.org . Se por algum motivo isso não funcionar, você poderá especificar o endereço manualmente.Se todas as etapas anteriores foram concluídas corretamente, devemos ver algo semelhante no console:
 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 perto do objetivo: agora precisamos copiar example.com (no seu caso, haverá o endereço do seu servidor) e colá-lo na barra de endereços do navegador. Depois de pressionar Enter, o arquivo client.ovpn será baixado e o próprio servidor http ficará esquecido. Se esta solução estiver em dúvida, você poderá usar o seguinte truque: execute o comando anterior e adicione os sinalizadores e senha zp . Agora, se você colar o link gerado na janela do navegador, receberá um arquivo zip com uma senha.Quando tiver um arquivo com a configuração do cliente, poderá usar qualquer cliente adequado. Eu uso o Tunnelblick para Mac.

Tutorial em vídeo

Este tutorial em vídeo contém instruções detalhadas para implantar o serviço no DigitalOcean. PS Se você acha este projeto útil, dê um asterisco no GitHub, bifurque-se e conte a seus amigos. Contribuidores e auditorias de segurança também são amplamente bem-vindos. PPS Se este artigo abordar o Habr, planejo escrever o seguinte sobre como lancei o docker-in-docker e o docker-in-docker-in-docker, para o que fiz e o que aconteceu.
EDIT1:
  1. Erros corrigidos na publicação,
  2. Respondendo aos comentários, decidi colocar essas informações aqui: - é necessário sinalizador privilegiado para trabalhar com o iptables

EDIT2:
  1. Comando aprimorado de inicialização de imagem: agora não requer o sinalizador --privileged
  2. Foi adicionado um link ao guia de vídeo em idioma russo: youtu.be/A8zvrHsT9A0

Source: https://habr.com/ru/post/pt458606/


All Articles