Como rodar um client OpenVPN dentro de um container docker
Com certa frequência eu preciso me conectar a redes VPN para realizar serviços em clientes com servidores em outros continentes, de forma que a latência de todos os aplicativos do meu computador que utilizam a internet acabam por sofrer - e muitas vezes eu preciso apenas fazer uma conexão SSH.
Neste tutorial eu vou te mostrar como eu resolvi este problema ao mover o cliente VPN para um contêiner docker de forma que toda a rede da minha máquina se manteve com a conexão local comum.
Como já é de costume, fiz um vídeo rápido explicando como seguir o passo a passo deste artigo:
Configurar um contêiner docker para conectar-se à VPN
Para este tutorial vamos utilizar a imagem alpine:3.17
, mas este passo a passo deverá funcionar com qualquer outra distribuição - talvez com alguns ajustes aqui e ali.
Vamos então baixar a imagem:
$ docker pull alpine:3.17
Após baixada a imagem podemos já rodar o nosso contêiner. Para executar o contêiner precisamos passar alguns parâmetros relacionados à rede e como ele vai criar o túnel VPN. A linha de comando completa fica assim:
$ docker run --rm -it --cap-add=NET_ADMIN alpine:3.17
O comando acima vai rodar um contêiner em modo interativo (-it
) e este contêiner vai ser removido assim que você terminar sua sessão (--rm
). Além disso nós vamos dar a capacidade ao contêiner de mexer na nossa interface de rede (--cap-add=NET_ADMIN
). Por fim, estamos invocando uma sessão shell da imagem alpine:3.17
.
Como instalar e configurar o cliente openvpn no contêiner docker
Agora que o contêiner já tem a capacidade de modificar a nossa interface de rede (--cap-add=NET_ADMIN
) nós podemos instalar os pacotes necessários e configurar o ambinte.
Vamos criar um device que será capaz de abrir um túnel VPN dentro do contêiner seguindo as instruções de configuração do driver TAP/TUN do manual do Kernel GNU/Linux:
$ mkdir /dev/net
$ mknod /dev/net/tun c 10 200
$ chmod 0666 /dev/net/tun
Agora podemos instalar o cliente openvpn diretamente no nosso contêiner alpine:
$ apk update
$ apk add openvpn
Como ligar a rede VPN dentro do contêiner docker
Agora que tudo está instalado e configurado, podemos conectar o nosso contêiner à rede VPN através da linha de comando seguinte:
$ openvpn client.ovpn > /dev/null &
Onde client.ovpn
é um arquivo de configuração no formato do OpenVPN com os dados de conexão e credenciais da rede externa. Repare que o fim do comando redireciona qualquer texto para o limbo de forma que não apareça na sua tela (> /dev/null
) e joga o comando para executar em plano de fundo (&
) de maneira que você possa rodar outros comandos imediatamente.
Desta forma você consegue rodar o cliente VPN dentro de um contêiner docker sem precisar conectar a sua máquina host ao servidor externo, de forma a poder utilizar outros serviços online sem o problema da latência.
Comentários