Como ter sua própria VPN com OpenVPN e Docker
Nesse artigo mostraremos como você pode hospedar sua própria VPN usando os software OpenVPN e Docker.
Pré-requisitos
- Acesso à shell de um VPS com um endereço IP público
- Acesso à algum usuário do grupo
docker
na VPS - Familiaridade com a linha de comando
Docker OpenVPN
Docker OpenVPN é um projeto que visa automatizar a configuração e set up do software OpenVPN usando Docker.
Como diz a própria página do GitHub
Out of the box stateless openvpn server docker image which starts in just a few seconds and doesn't require persistent storage
Estaremos utilizando esse software nesse tutorial.
Instalando OpenVPN
Primeiro, faça ssh
na sua VPS.
Arquivo .env
Então, crie um diretório onde iremos armazenar algumas configurações que serão usadas posteriormente.
mkdir docker-openvpn && cd docker-openvpn
touch .env
O arquivo .env
terá algumas configurações básica sobre a VPN.
CONTAINER_NAME=openvpn
PUBLIC_IP=127.0.0.1
Substituta 127.0.0.1
pelo seu endereço IP público. Se você não sabe qual é o
endereço, execute o seguinte comando na shell da sua VPS:
curl -s https://api.ipify.org
Que irá imprimir o endereço IP da sua VPS. Então coloque esse endereço no arquivo
.env
.
Usando docker
Há duas formas de instalar Docker OpenVPN
. Usando docker
, execute os seguintes comandos:
source .env
docker run --detach \
--cap-add=NET_ADMIN \
--publish 1194:1194/udp \
--env HOST_ADDR=${PUBLIC_iP} \
--name ${CONTAINER_NAME} \
alekslitvinenk/openvpn
O comando source .env
irá colocar as variáveis espeficadas em .env
como variáveis de ambiente.
A flag --detach
é para o container ser executado como um background process.
A flag --cap-add
adiciona capacidades do Linux ao container, nesse caso, ser
administrador da rede.
A flag --env
especifica variáveis de ambiente do container.
A flag --name
especifica o nome do container.
A flag --publish
irá mapear portas do host para o container usando o protocolo
especificado.
Por fim, temos o nome da imagem usada: alekslitvinenk/openvpn
.
Usando docker-compose
Eis un docker-compose.yml
para facilitar o trabalho:
version: "2.0"
services:
openvpn:
container_name: ${CONTAINER_NAME}
image: alekslitvinenk/openvpn
restart: unless-stopped
cap_add:
- NET_ADMIN
environment:
- HOST_ADDR=${PUBLIC_IP}
ports:
- 1194:1194/udp
Coloque esse arquivo no mesmo diretório que o arquivo .env
, ou seja,
em docker-openvpn/docker-compose.yml
.
Então, nesse mesmo diretório, rode o comando:
docker-compose up --detach
Novamente, a flag detach
é para rodar a VPN no background.
Configurando o cliente
Obtendo o arquivo de configuração
Após ter configurado o servidor, precisamos obter o arquivo de configuração do
OpenVPN. Para isso, usaremos curl
.
Por padrão, essa imagem Docker não vem com curl
. Temos que instala-lo como segue:
docker exec ${CONTAINER_NAME} apk add curl
Onde ${CONTAINER_NAME}
é o nome do container especificado em .env
.
Após isso, execute:
docker exec ${CONTAINER_NAME} curl -s localhost:8080 > client.ovpn
Isso irá executar o comando curl
dentro do container, que irá fazer um
request para localhost:8080, o qual devolverá o arquivo de configuração do
nosso OpenVPN e redirecionar a saída para o arquivo client.ovpn
.
Atenção: Após o request ser feito, o servidor http
que está ativo em
localhost:8080
será automaticamente desativado, o que significa que não será
possível mais obter a configuração do OpenVPN. Entretanto, você pode gerar uma
nova configuração usando o comando docker exec ${CONTAINER_NAME} ./genclient.sh
.
Depois disso você pode transferir o arquivo client.ovpn
para sua máquina local
usando scp
, rsync
, ou copiando e colando o conteúdo do arquivo caso seu terminal
suporte operações de copiar-e-colar.
Usando scp
:
scp username@host_address:/path/to/client.ovpn .
O comando acima irá usar o protocolo ssh
para transferir o arquivo client.ovpn
para o diretório atual na sua máquina local.
Lembre-se de substituir username
, host_address
, e /path/to/client.ovpn
pelo
seu usuário de nome na VPS, o endereço IP da VPS, e o caminho absoluto do arquivo
salvo anteriormente.
Ativando a VPN com o Network Manager
Há inúmros software clientes do OpenVPN
. Essa parte do tutorial pressupõe que você
está usando network-manager
, que é um software gerenciador de rede disponível em
variás distribuições Linux e BSD. Entretanto, mesmo que você não use networkmanager
, é provável que tenha algum cliente que funciona para o seu gerenciador de redes.
Primeiro, instale os pacotes openvpn
, networkmanager
, e networkmanager-openvpn
.
É possível que os nomes dos pacotes sejam diferentes dependendo do seu Sistema Operacional.
Se você está usando alguma Arch-based distro
, instale como segue:
pacman -S openvpn networkmanager networkmanager-openvpn
Após isso, e após habilitar o networkmanager
, execute:
nmcli connection import type openvpn file /path/to/client.ovpn/
Onde /path/to/client.ovpn/
é o caminho do arquivo client.ovpn
na sua máquina
local.
Esse comando irá adicionar uma conexão VPN na sua máquina. Para se conectar à VPN, execute o comando:
nmcli connection up client
Pronto :D, agora você tem sua própria VPN!