Fundamentos de Execução do OpenVPN no Docker no Ubuntu

Você está preocupado com como pode acessar livremente a internet sem muitas restrições envolvidas e inseguranças de dados? Não se preocupe mais! Comece a hospedar seu servidor VPN usando OpenVPN no Docker.

Com as tecnologias Docker e OpenVPN, você pode configurar e executar seu servidor VPN em pouco tempo. E neste tutorial, você aprenderá os fundamentos básicos de executar um servidor OpenVPN hospedado em um contêiner Docker.

Fique ligado e mantenha seu servidor VPN seguro com o OpenVPN Docker!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você acompanhar, precisará do seguinte:

  • A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
  • Docker instalado e em execução – Este tutorial usa o Docker v20.10.17.

Criando um Contêiner Docker para OpenVPN

Containerizar é como empacotar código e todas as suas dependências como uma unidade de software padrão para executar sua aplicação de forma rápida e confiável. Existem várias maneiras de criar um contêiner Docker OpenVPN. Você pode construir o contêiner do zero ou baixar um contêiner pronto do Docker Hub.

Mas neste tutorial, você usará um arquivo de imagem Docker OpenVPN existente. Os contêineres prontos oferecem várias vantagens, pois são minuciosamente testados contra várias vulnerabilidades com o apoio de uma vasta comunidade de desenvolvedores. Além disso, esses contêineres ajudam a economizar tempo e eliminam a necessidade de reinventar a roda.

Para criar um contêiner Docker OpenVPN:

1. Abra o terminal e execute o comando OVPN_DATA abaixo, que não fornece saída, mas define um nome de volume de dados como ovpn-data-test para a variável OVPN_DATA.

OVPN_DATA="ovpn-data-test"

2. Em seguida, execute o seguinte comando docker volume create para criar um volume de dados com o nome que você definiu na variável $OVPN_DATA.

Este comando não fornece saída, mas cria um contêiner de volume de dados para o OpenVPN, onde todos os dados, arquivos de configuração e certificados são armazenados.

docker volume create --name $OVPN_DATA

3. Por fim, execute o seguinte comando docker run para baixar e instalar a imagem Docker OpenVPN com o seguinte:

  • Especifique o espaço de armazenamento (-v) dentro do contêiner que é separado do restante do sistema de arquivos do contêiner. Neste caso, a imagem Docker do OpenVPN é armazenada no diretório /etc/openvpn.
  • Especifique o mecanismo de registro (--log-driver) que mantém as informações dos contêineres e serviços em execução (none).
  • Instrui o Docker a remover automaticamente (–rm) o contêiner quando ele já existe.

Assegure-se de substituir (SeuIPublico.com) pelo IP público ou nome de domínio (se você tiver um) do seu servidor (host) via protocolo UDP. Mas observe que você também pode usar o protocolo TCP.

O TCP é um protocolo orientado à conexão, enquanto o UDP é um protocolo sem conexão

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

Observe que se você pretende usar auto-hospedagem ou IP público, é necessário fazer encaminhamento de porta no seu roteador/modem.

Protegendo o Cliente OpenVPN com Certificados

Você instalou com sucesso o cliente Docker do OpenVPN em sua máquina, então yay! Mas antes de usar o OpenVPN, você deve configurar primeiro a configuração do cliente OpenVPN.

Só porque você está trabalhando com o OpenVPN não significa que você deve abrir seu servidor VPN para o mundo. Você vai precisar de certificados para proteger seu cliente OpenVPN:

1. Execute o comando abaixo de docker run para gerar e recuperar o CA e os certificados do cliente. Este comando cria contêineres OpenVPN em execução (–it) a partir da imagem especificada dentro do contêiner principal.

Na maioria dos casos, gerar certificados do servidor CA leva tempo, dependendo dos recursos da máquina que você está utilizando.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

Digite sim e pressione Enter, como mostrado abaixo, para iniciar o sistema PKI do OpenVPN.

Initiating the OpenVPN PKI system

2. Em seguida, forneça e confirme uma nova senha para o certificado do CA e pressione Enter. Anote a senha em algum lugar seguro, pois você precisará dela posteriormente ao configurar e gerar um certificado de cliente.

Setting a new CA certificate password

3. Defina um nome único para o certificado do seu CA e pressione Enter.

Naming the new CA certificate

4. Agora, digite a frase secreta do CA que você definiu no passo dois para verificar se a solicitação corresponde à assinatura.

Checking \the request matches the signature

5. Digite sua frase secreta novamente para gerar uma chave privada.

Generate a private key by entering the CA passphrase

6. Em seguida, execute o comando abaixo para iniciar o serviço do servidor OpenVPN no Docker para configurar um cliente OpenVPN, onde:

  • A opção -p define a porta (1194) que escuta e inicia a conexão entre o servidor e o cliente.

Você pode alterar a porta 1194 para atender às suas preferências se não estiver confortável usando a porta padrão do OpenVPN.

  • O argumento –cap-add=NET_ADMIN aplica as capacidades adicionais do Linux modificando as interfaces de rede que o Docker não concede por padrão.
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. Uma vez que a porta está configurada, execute o comando de docker run abaixo para executar o seguinte:

  • Gerar o certificado do cliente e baixar o arquivo de configuração do cliente (.ovpn) do contêiner Docker para o servidor host. O certificado gerado não possui senha, conforme especificado no argumento no-pass no comando.
  • Defina o nome do arquivo do certificado OpenVPN e identificação do cliente como CLIENTAPP. O certificado é armazenado no diretório do usuário do host, não no contêiner Docker.
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

Insira sua frase de acesso, conforme mostrado abaixo, para concluir a geração do certificado.

Generating the VPN client certificate

8. Em seguida, execute o comando abaixo para gerar e baixar o arquivo de configuração da conexão OpenVPN (ovpn_getclient) do contêiner para o servidor host.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

9. Navegue até o diretório user/home no seu servidor host (máquina Linux) e transfira o arquivo .ovpn (CLIENTAPP.ovpn) para o seu dispositivo Android.

10. Por fim, inicie o seu aplicativo cliente OpenVPN Connect no seu dispositivo Android.

Toque em NAVEGAR na aba ARQUIVO e selecione o arquivo .ovpn (CLIENTAPP.ovpn) que você transferiu para o seu dispositivo Android. Fazendo isso, adiciona um novo perfil ao cliente OpenVPN Connect.

Importing the .ovpn file to the OpenVPN Connect client

Após uma conexão bem-sucedida, você verá o resultado abaixo.

Verifying successful connection to the VPN server

Acessando a Interface de Usuário Web do OpenVPN

Está preocupado com a quantidade de comandos que teve que executar para acessar o seu servidor VPN? Por que não experimentar uma interface de usuário web simples?

O OpenVPN oferece um conjunto de ferramentas de instalação e configuração baseado na web que possibilita a implantação rápida de soluções de acesso remoto VPN. O kit de ferramentas está disponível em um único pacote chamado OpenVPN Access Server.

Para acessar a interface web do OpenVPN, é necessário instalar o pacote:

1. Execute o seguinte comando docker pull para baixar e instalar o contêiner Docker mais recente do OpenVPN (openvpn-as) do Linux Server Docker Hub (linuxserver).

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

2. Após o download, execute o comando docker create abaixo para criar um novo contêiner Docker chamado openvpn-as com o seguinte:

  • -v /home/docker/openvpn-as/config: /config – Define o diretório para armazenar os arquivos de configuração.
  • --restart=always – Garante que o contêiner sempre inicie durante a inicialização do sistema. Você pode optar por não adicionar esse argumento se não desejar que o contêiner reinicie.
  • -e PGID=1001 -e PUID=1001 – Define o ID do usuário para eliminar problemas de permissão entre o servidor host e o contêiner.
  • –net=host –privileged – Dita como o OpenVPN Access Server é executado no contêiner.
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. Em seguida, execute o comando docker start abaixo para acessar a interface web do OpenVPN por meio do contêiner Docker do OpenVPN Access Server que você criou na segunda etapa.

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. Por fim, abra seu navegador favorito e acesse a interface web do OpenVPN com o endereço IP local (por exemplo, https://SeuIP:943/admin). Substitua SeuIP pelo endereço IP real do seu servidor.

Você será recebido com a página de login do OpenVPN Access Server se tudo correr bem, conforme mostrado abaixo.

Insira “admin” e a senha para o Nome de usuário e Senha, e clique em Entrar para acessar o painel do OpenVPN Access Server.

Observe que o nome de usuário e a senha padrão são admin e password, respectivamente. Você pode alterar as credenciais conforme suas preferências.

Accessing the OpenVPN Access Server web UI

Após fazer login, você verá o painel do OpenVPN Access Server abaixo.

Accessing the OpenVPN Access Server dashboard

Configurando o DNS para uma Conexão Mais Rápida e Segura

Neste ponto, seu OpenVPN Access Server está funcionando corretamente. No entanto, para melhorar o desempenho do seu servidor VPN, é necessário configurar o DNS.

Para configurar o DNS, é preciso acessar a interface web do servidor OpenVPN e atualizar as configurações de DNS com os endereços DNS do Google ou de sua preferência. O Google oferece os servidores DNS mais rápidos disponíveis, que serão utilizados no seu OpenVPN Access Server.

1. Clique em Configurações VPN (painel esquerdo) na guia CONFIGURAÇÃO do painel do seu OpenVPN Access Server.

Role para baixo até a seção Configurações de DNS e ative a opção Fazer com que os clientes usem servidores DNS específicos, conforme mostrado abaixo.

Enabling custom OpenVPN DNS addresses

Em seguida, atualize o Servidor DNS Primário (8.8.8.8) e o Servidor DNS Secundário (8.8.8.4) com os endereços do DNS do Google conforme abaixo e clique em Salvar Configurações para salvar as alterações.

Setting custom OpenVPN DNS addresses

Após salvar as alterações, clique em Atualizar Servidor em Execução para reiniciar o servidor e que as alterações tenham efeito.

Updating the server settings

Agora, vá para o Servidor de Acesso OpenVPN (por exemplo, https://SeuIP:943/admin) em sua máquina Linux. Substitua SeuIP pelo endereço IP do seu servidor. Se a configuração estiver correta, você verá a mesma página abaixo.

Faça login com as credenciais padrão (admin e senha) para nome de usuário e senha.

Logging in to OpenVPN Access Server

Clique em qualquer ícone de plataforma para baixar o aplicativo do cliente e clique em Você mesmo (perfil bloqueado pelo usuário) para baixar o arquivo do cliente .ovpn.

Downloading the .ovpn config file and client app

Por fim, inicie o Cliente OpenVPN que você baixou e importe o arquivo .ovpn como você fez na última etapa do “Segurança do Cliente OpenVPN com Certificados”, conforme mostrado abaixo.

Connecting to the OpenVPN server

Conclusão

Hospedar seu servidor VPN nunca deveria ser uma tarefa complexa, muito menos garantir a conexão do seu servidor. Felizmente, o OpenVPN Docker está bem próximo para salvar o dia. E neste tutorial, você aprendeu a instalar, configurar e configurar o OpenVPN usando o Docker no Ubuntu. Você também aprendeu a garantir o acesso ao OpenVPN em um contêiner Docker com o OpenVPN CA e certificados de cliente.

Além de acessar seu servidor OpenVPN via interface de linha de comando, agora você tem uma maneira visual de fazer isso por meio da interface web do OpenVPN Access Server. Você realizou uma implementação rápida de VPN gerando arquivos de configuração do cliente para os aplicativos cliente OpenVPN.

Que tal expandir esse conhecimento recém-adquirido criando serviços de túnel VPN para seus aplicativos usando o WireGuard VPN? Explore o mundo de possibilidades ilimitadas usando serviços de VPN auto-hospedados!

Source:
https://adamtheautomator.com/openvpn-in-docker/