- 1. Introdução
- 2. Preparação do Ambiente
- 3. Instalação e Configuração do OpenVPN
- 4. Configuração de Clientes OpenVPN
1. Introdução
Neste artigo vou explicar como podes configurar um servidor OpenVPN utilizando um container no software gratuito de virtualização Proxmox. A segurança e a privacidade online são preocupações cada vez mais relevantes, tanto para utilizadores domésticos como para empresas. Uma das soluções mais eficazes para garantir comunicações seguras é a utilização de redes privadas virtuais (VPNs), que permitem estabelecer ligações encriptadas entre dispositivos remotos e redes privadas.
O OpenVPN é uma das ferramentas mais populares para criar uma VPN segura e altamente configurável. Com esta solução, é possível aceder remotamente a dispositivos, proteger a navegação em redes públicas e até mesmo interligar diferentes locais de forma privada e segura.
Neste artigo, iremos explorar a configuração de um servidor OpenVPN num container LXC no Proxmox, tirando partido da eficiência e leveza dos containers. Além disso, para simplificar a gestão dos perfis de ligação, iremos instalar uma interface gráfica, permitindo a criação e administração dos ficheiros .ovpn
de forma intuitiva, sem necessidade de recorrer à linha de comandos.
No final deste guia, terás um servidor OpenVPN totalmente funcional, pronto para estabelecer ligações seguras e fácil de gerir através de uma interface amigável.
2. Preparação do Ambiente
Antes de avançarmos para a instalação e configuração do OpenVPN, é necessário garantir que o ambiente está devidamente preparado. Neste guia, iremos utilizar um container LXC no Proxmox, uma solução leve e eficiente em comparação com máquinas virtuais tradicionais.
Requisitos
Antes de começar, certifica-te de que tens:
- Um servidor Proxmox funcional e com acesso root.
- Ligação à internet para descarregar os pacotes necessários.
- Conhecimentos básicos de gestão de containers e rede no Proxmox.
Criação do Container LXC
Escolha da imagem
No Proxmox, acede ao menu Content do teu armazenamento e descarrega uma imagem de Debian ou Ubuntu.


Criação do container

Define um nome para o container (Hostname) e uma palavra-passe para a conta root. Como este container vai ser usado para transporte de pacotes IP vamos ainda tirar o visto da opção Unprivileged Container.

Configura os recursos do sistema:



Configuração da rede
Escolher Bridge (vmbr0) para Permitir que o container tenha um IP na mesma rede do host.
Certifica-te de que o container tem acesso à internet para instalar pacotes.
Configurações finais da máquina virtual
Editar o arquivo /etc/pve/lxc/<ID do container>.conf
nano /etc/pve/lxc/<ID fo container>.conf
e adicionar os seguintes parametros:
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
Estes parâmetros permitem montar o dispositivo tun0 no container.
Aceder ao container
Após a criação, inicia o container e liga-te via console. Insere as credenciais (root e a palavra-passe que escolheste).
Configuração da rede
Verifica qual é a interface de rede usada.
ip a
No meu caso a interface é a eth0. Vamos agora editar o ficheiro /etc/network/interfaces
nano /etc/network/interfaces
e colar o seguinte:
auto eth0
iface eth0 inet static
address x.x.x.x
netmask x.x.x.x
gateway x.x.x.x
dns-nameservers x.x.x.x
Em address colocar o ip do container. No meu caso vou escolher 192.168.1.25. Netmask colocar a máscara para identificar a rede, que no meu caso é 255.255.255.0. Gateway colocar qual o endereço de saída, e nesta configuração será o endereço do meu router. No dns-nameservers colocar onde o dns vai ser resolvido. Na minha rede quem está responsável por este serviço também é o router.
No final para gravar o ficheiro é só clicar ctrl + o, y para gravar e ctrl + x para sair. Finalmente vamos aplicar as configurações com o comando:
systemctl restart networking
Atualiza os pacotes antes de avançar:
apt update && apt upgrade -y
Com o container pronto e atualizado, podemos avançar para a instalação e configuração do OpenVPN.
3. Instalação e Configuração do OpenVPN
Agora que o container LXC está criado e atualizado, podemos prosseguir com a instalação e configuração do OpenVPN. O objetivo desta secção é configurar um servidor VPN funcional, pronto para aceitar ligações de clientes.
Instalar o OpenVPN e EasyRSA
Antes de mais, certifica-te de que estás ligado ao container via consola.
Depois, instala os pacotes necessários:
apt install openvpn easy-rsa -y
O EasyRSA é um conjunto de scripts que facilita a criação dos certificados de segurança necessários para o OpenVPN.
Criar a Autoridade Certificadora (CA)
O OpenVPN utiliza certificados para autenticar servidores e clientes. Para isso, vamos criar uma Autoridade Certificadora (CA) dentro do diretório do EasyRSA:
mkdir -p /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
Inicializa o ambiente do EasyRSA:
./easyrsa init-pki
Cria a CA e define uma palavra-passe segura quando solicitado:
./easyrsa build-ca
Agora, gera a chave e o certificado do servidor OpenVPN:
./easyrsa gen-req server nopass
./easyrsa sign-req server server
#A palavra-passe pedida é a que foi definida para o PEM
Em seguida, gera os certificados dos clientes (cada cliente precisa de um ficheiro .ovpn
individual):
./easyrsa gen-req cliente1 nopass
./easyrsa sign-req client cliente1
#A palavra-passe pedida é a que foi definida para o PEM
Cria os parâmetros Diffie-Hellman, necessários para a encriptação segura:
./easyrsa gen-dh
#Este passo poderá demorar um pouco
Configurar o Servidor OpenVPN
Copia os ficheiros necessários para a pasta do OpenVPN:
cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem /etc/openvpn/
Cria um ficheiro de configuração para o servidor:
nano /etc/openvpn/server.conf
Adiciona o seguinte conteúdo:
port 1194
proto udp
dev tun0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
topology subnet
server 10.10.20.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
log /etc/openvpn/openvpn.log
push "route <rede interna acabada em 0> 255.255.255.0"
Guarda e sai do ficheiro (CTRL + X
, Y
, ENTER
). Por fim vamos adicionar alguns parâmetros ao binário do OpenVPN com o seguinte comando:
setcap cap_net_admin,cap_net_raw=eip /usr/sbin/openvpn
Ativar o redirecionamento IP
Para os nossos pacotes chegarem ao seu destino é necessário ativar o redirecionamento IP com o seguinte comando:
nano /etc/sysctl.conf
e adicionar
net.ipv4.ip_forward = 1
Crtl + o, Y para guardar e Ctrl + X para sair. Reinicia o serviço.
sysctl -p
e finalmente temos de adicionar umas regras NAT com o iptables
apt install iptables-persistent
iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -d 192.168.1.0/24 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -s 10.10.20.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -d 10.10.20.0/24 -s 192.168.1.0/24 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
Ativar e Iniciar o OpenVPN
Habilita e inicia o serviço OpenVPN:
systemctl enable openvpn@server
systemctl start openvpn@server
systemctl status openvpn@server
Se tudo estiver correto, o OpenVPN já estará a correr e pronto para aceitar ligações de clientes!
Na próxima secção, veremos como configurar os clientes e gerar os ficheiros .ovpn
.
4. Configuração de Clientes OpenVPN
Com o servidor OpenVPN operacional, o próximo passo é configurar os clientes para se conectarem à VPN. Para isso, precisamos criar perfis de configuração .ovpn
e testá-los.
Criando Perfis .ovpn Manualmente
Cada cliente OpenVPN necessita de um ficheiro de configuração específico para estabelecer a ligação ao servidor. Esse ficheiro contém informações como o endereço do servidor, certificados e chaves de autenticação.
Para criar um perfil .ovpn
, cria um novo ficheiro no servidor:
nano /etc/openvpn/client/client1.ovpn
E adiciona o seguinte conteúdo, ajustando conforme necessário:
client
dev tun
proto udp
remote SEU_IP_OU_DOMÍNIO 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
comp-lzo
verb 3
<ca>
# Conteúdo do ficheiro /etc/openvpn/ca.crt
</ca>
<cert>
# Conteúdo do ficheiro /etc/openvpn/easy-rsa/issued/client1.crt
</cert>
<key>
# Conteúdo do ficheiro /etc/openvpn/easy-rsa/private/client1.key
</key>
Guarda e fecha o ficheiro. Depois, transfere-o para o dispositivo cliente (PC, smartphone, etc.).
Testando a Conexão de um Cliente
No cliente, instala o OpenVPN (caso ainda não esteja instalado) e testa a conexão com o servidor utilizando o ficheiro .ovpn
gerado.
Linux/macOS:
openvpn --config client1.ovpn
Windows:
- Instala o OpenVPN Connect.
- Copia o ficheiro
.ovpn
para a pasta de configurações do OpenVPN. - Abre o OpenVPN Connect e inicia a conexão.
Se tudo estiver configurado corretamente, o cliente deverá estabelecer a conexão com sucesso ao servidor OpenVPN!
Num próximo artigo irei explicar como podemos afinar o servidor VPN e instalar a interface gráfica para gerar os ficheiros .ovpn com facilidade.
Obrigado por leres até aqui e se encontrares algum erro ou tiveres alguma duvida, por favor, faz um comentário que tentarei responder o mais breve possivel.