Passo a passo para instalar e configurar um servidor OpenVPN no AlmaLinux 9 ou Ubuntu 24.04 com Easy-RSA 3, gerar o arquivo do cliente e conectar.
Com uma VPN, seus computadores acessam o servidor (e, se você quiser, a internet) por um túnel criptografado. É o jeito certo de proteger serviços que não devem ficar abertos para o mundo, como área de trabalho remota, banco de dados e painéis de administração.
Antes de começar
- Acesso root ao servidor (ou um usuário com
sudo). Todos os comandos abaixo são executados como root. - O IP público do servidor. Nos exemplos usamos
203.0.113.10. - A porta 1194/UDP liberada em qualquer firewall externo (datacenter ou provedor).
- O nome da interface de rede que sai para a internet. Descubra com
ip route get 1.1.1.1: o nome aparece depois dedev(exemplos:eth0,ens18). Nos comandos usamoseth0; troque pelo seu.
Passo 1: instalar o OpenVPN e o Easy-RSA
Ubuntu e Debian:
apt update
apt install openvpn easy-rsa
AlmaLinux e Rocky Linux 9 (os pacotes vêm do repositório EPEL):
dnf install epel-release
dnf install openvpn easy-rsa
Passo 2: criar a autoridade certificadora e os certificados
O OpenVPN autentica servidor e clientes com certificados. O Easy-RSA 3 cria e assina esses certificados. Monte a pasta de trabalho:
# Ubuntu e Debian
make-cadir /root/easy-rsa
# AlmaLinux e Rocky
mkdir /root/easy-rsa
ln -s /usr/share/easy-rsa/3/* /root/easy-rsa/
Agora crie a autoridade certificadora (CA) e o certificado do servidor:
cd /root/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
O build-ca pede um nome (Common Name) para a CA: pode ser algo como VPN da Empresa. O build-server-full pede para você digitar yes e confirmar. Por fim, gere a chave extra que protege o canal de controle (tls-crypt) e copie tudo para a pasta do servidor:
openvpn --genkey secret /etc/openvpn/server/ta.key
cp pki/ca.crt pki/issued/server.crt pki/private/server.key /etc/openvpn/server/
cp e não mv. No AlmaLinux, o arquivo copiado recebe o contexto do SELinux correto da pasta de destino; o movido não, e o OpenVPN não consegue lê-lo.pki/private/ca.key) assina todos os acessos. Em ambientes maiores, mantenha a CA numa máquina separada e protegida por senha (sem o nopass).Passo 3: configurar o servidor OpenVPN
Crie o arquivo /etc/openvpn/server/server.conf com o conteúdo abaixo:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh none
tls-crypt ta.key
topology subnet
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
user nobody
group nogroup
persist-key
persist-tun
verb 3
explicit-exit-notify 1
No AlmaLinux e Rocky, troque a linha group nogroup por group nobody. A linha redirect-gateway faz todo o tráfego do cliente passar pela VPN. Se você só quer acessar a rede do servidor e manter a internet do cliente pelo caminho normal, apague essa linha.
Passo 4: liberar o encaminhamento de pacotes e o NAT
Ative o encaminhamento de IP, nas duas famílias de distribuição:
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-openvpn.conf
sysctl --system
Ubuntu com ufw
Abra /etc/ufw/before.rules e cole no topo do arquivo, antes da linha *filter:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Depois libere as portas e o encaminhamento entre o túnel e a internet:
ufw allow OpenSSH
ufw allow 1194/udp
ufw route allow in on tun0 out on eth0
ufw reload
Se o ufw estiver desativado, ative com ufw enable, sempre depois de liberar o SSH.
Ubuntu ou Debian sem ufw
apt install iptables-persistent
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
netfilter-persistent save
AlmaLinux e Rocky com firewalld
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
Passo 5: iniciar o OpenVPN
systemctl enable --now openvpn-server@server
systemctl status openvpn-server@server
O nome depois do @ é o nome do arquivo de configuração sem o .conf. Confira se a interface do túnel subiu com ip addr show tun0: ela deve ter o IP 10.8.0.1. Se o serviço falhar, veja o motivo com journalctl -u openvpn-server@server -e.
Passo 6: criar o acesso de um cliente
Cada pessoa ou dispositivo deve ter o próprio certificado. Gere um para o cliente cliente1:
cd /root/easy-rsa
./easyrsa build-client-full cliente1 nopass
Agora monte um arquivo .ovpn único, com os certificados embutidos. Ajuste o IP e rode:
CLI=cliente1
{
cat <<EOF
client
dev tun
proto udp
remote 203.0.113.10 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verb 3
EOF
echo "<ca>"; cat pki/ca.crt; echo "</ca>"
echo "<cert>"; sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' pki/issued/$CLI.crt; echo "</cert>"
echo "<key>"; cat pki/private/$CLI.key; echo "</key>"
echo "<tls-crypt>"; cat /etc/openvpn/server/ta.key; echo "</tls-crypt>"
} > /root/$CLI.ovpn
Baixe o arquivo /root/cliente1.ovpn por SFTP. Ele contém a chave de acesso, então trate-o como uma senha: não envie por e-mail aberto nem deixe em pasta compartilhada.
Como conectar no Windows, Mac, Linux e celular
- Windows, macOS, Android e iOS: instale o OpenVPN Connect, baixado do site oficial do OpenVPN ou da loja do celular, e importe o arquivo
.ovpn. - Linux: importe o arquivo no gerenciador de rede do sistema ou conecte pelo terminal com
openvpn --config cliente1.ovpn.
Para conferir se o tráfego está passando pela VPN, abra pophosting.com.br/meu-ip conectado: deve aparecer o IP do servidor.
Como revogar o acesso de um cliente
cd /root/easy-rsa
./easyrsa revoke cliente1
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/server/crl.pem
chmod 644 /etc/openvpn/server/crl.pem
Na primeira revogação, acrescente a linha crl-verify crl.pem ao server.conf e reinicie com systemctl restart openvpn-server@server.
crl.pem) tem validade, de 180 dias por padrão no Easy-RSA. Quando ela vence, o servidor recusa todos os clientes. Rode ./easyrsa gen-crl e copie o arquivo de novo antes do vencimento, de preferência com um agendamento no cron.Alternativa moderna: WireGuard
O WireGuard é uma VPN mais nova, embutida no kernel do Linux, com configuração bem mais curta e desempenho melhor que o OpenVPN. Vale considerar quando você controla os dois lados da conexão e só precisa de um túnel rápido. O pacote é wireguard no Ubuntu e wireguard-tools no AlmaLinux. O OpenVPN continua sendo a melhor escolha quando você precisa passar por redes que só liberam TCP 443, quer autenticação por certificado com revogação centralizada ou já tem clientes OpenVPN espalhados.
Problemas comuns
TLS key negotiation failed to occur within 60 seconds
O cliente não alcança o servidor na porta 1194/UDP. Confira o firewall do servidor (passo 4), o firewall externo e se o IP no arquivo .ovpn está certo. Algumas redes corporativas bloqueiam UDP.
Conecta, mas não navega
Falta o encaminhamento ou o NAT. Confira com sysctl net.ipv4.ip_forward (deve mostrar 1) e verifique se a interface de saída no NAT é mesmo a do seu servidor (eth0 no exemplo).
VERIFY ERROR: CRL has expired
A lista de revogação venceu. Gere outra com ./easyrsa gen-crl, copie para /etc/openvpn/server/ e reinicie o serviço.
O serviço não sobe no AlmaLinux
Veja o erro com journalctl -u openvpn-server@server -e. Se for permissão negada para ler certificados, restaure o contexto do SELinux: restorecon -Rv /etc/openvpn.