OpenVPN
PKI completa com certificado por cliente, revogação individual, compatibilidade ampla — da arquitetura à operação real em ISP.
Nesta página
1. Contexto histórico e normativo
O OpenVPN foi criado em 2001 por James Yonan como uma alternativa open source aos protocolos VPN proprietários da época. Utiliza a biblioteca OpenSSL para criptografia e pode operar sobre UDP ou TCP, o que lhe confere flexibilidade única para atravessar firewalls restritivos e redes que bloqueiam UDP.
Por mais de duas décadas, foi o padrão de fato para VPNs de acesso remoto e túneis site‑a‑site. Sua principal força está na PKI completa (Public Key Infrastructure) com emissão e revogação de certificados individuais, algo que o WireGuard não possui nativamente.
Embora tenha perdido espaço para o WireGuard em cenários de alta performance e simplicidade, o OpenVPN continua amplamente suportado em roteadores, firewalls (incluindo pfSense), appliances e sistemas legados — e segue sendo a escolha quando compatibilidade máxima é requisito.
2. Arquitetura interna
O OpenVPN opera em espaço de usuário (userspace), o que significa que os pacotes são processados fora do kernel. Isso adiciona overhead de troca de contexto, mas permite uso flexível da biblioteca OpenSSL para negociação de cifras e protocolos.
- Interface virtual tun/tap — cria uma interface de rede virtual para o túnel.
- PKI — usa certificados X.509, chaves privadas e CRLs (Certificate Revocation Lists).
- Transporte UDP ou TCP — flexível, mas com trade‑off (seção 8).
- Data Channel Offload (DCO) — em versões recentes, move parte do processamento para o kernel, melhorando performance (seção 9).
3. Instalação
apt update
apt install openvpn easy-rsa
4. PKI com easy-rsa
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass # cria a CA própria
./easyrsa gen-req servidor-vpn nopass
./easyrsa sign-req server servidor-vpn
./easyrsa gen-dh # chave Diffie-Hellman
# Um certificado por técnico/PoP
./easyrsa gen-req tecnico-joao nopass
./easyrsa sign-req client tecnico-joao
5. Configuração do servidor
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert servidor-vpn.crt
key servidor-vpn.key
dh dh.pem
server 10.200.0.0 255.255.255.0
push "route 10.0.0.0 255.255.0.0" # rede interna do ISP
data-ciphers AES-256-GCM:CHACHA20-POLY1305
auth SHA256
keepalive 10 60
persist-key
persist-tun
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
systemctl enable --now openvpn-server@server
6. Perfil de cliente (.ovpn)
client
dev tun
proto udp
remote vpn.exemplo-isp.com.br 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-GCM:CHACHA20-POLY1305
verb 3
<ca>
... ca.crt ...
</ca>
<cert>
... tecnico-joao.crt ...
</cert>
<key>
... tecnico-joao.key ...
</key>
7. Revogação de acesso
Diferencial estrutural frente ao WireGuard: o OpenVPN possui processo formal de revogação via CRL (Certificate Revocation List).
cd /etc/openvpn/easy-rsa
./easyrsa revoke tecnico-joao
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/server/
# server.conf precisa referenciar: crl-verify crl.pem
systemctl restart openvpn-server@server
8. TCP Meltdown
Rodar OpenVPN sobre TCP pode degradar performance de forma não óbvia, conhecida como "TCP Meltdown": quando pacotes TCP (do tráfego real do usuário) são encapsulados dentro de outra camada TCP (o túnel), qualquer perda de pacote dispara controle de congestionamento nas duas camadas simultaneamente. Use UDP sempre que possível; TCP só se a rede de trânsito bloquear UDP de forma incontornável.
9. DCO — Data Channel Offload
Versões recentes do OpenVPN suportam DCO (Data Channel Offload), que move parte do processamento de dados para o kernel, reduzindo o overhead histórico de userspace. Com DCO, a diferença de throughput para o WireGuard em transferência sustentada diminui consideravelmente, embora a simplicidade e o handshake rápido do WireGuard continuem sendo diferenciais.
10. Verificação e logs
# Clientes conectados
cat /var/log/openvpn/status.log
# Log detalhado
tail -f /var/log/openvpn/openvpn.log
11. Monitoramento e métricas
Script de health check para Zabbix/PRTG:
#!/bin/bash
# check_openvpn.sh
if systemctl is-active openvpn-server@server >/dev/null 2>&1; then
echo "OK: OpenVPN ativo"
exit 0
else
echo "CRITICAL: OpenVPN inativo"
exit 2
fi
Métricas úteis: número de clientes conectados, bytes transferidos, tempo médio de sessão, erros de autenticação. Todas extraíveis dos logs e do arquivo status.log.
12. Backup e recuperação
O backup deve incluir toda a PKI e configurações, seguindo a regra 3‑2‑1‑1‑0:
- Diretório easy-rsa —
/etc/openvpn/easy-rsa/pki/(CA, chaves, certificados). - Configurações —
/etc/openvpn/. - CRL —
crl.pem, para manter revogações.
A perda da chave privada da CA significa ter que emitir novos certificados para todos os clientes — mantenha backup seguro e atualizado.
13. Dimensionamento e performance
O OpenVPN em userspace pode lidar com centenas de túneis simultâneos em hardware adequado, mas é mais sensível à CPU do que o WireGuard:
- CPU — criptografia AES‑GCM consome CPU; hardware com AES‑NI é recomendado.
- DCO — ative para melhorar throughput em até 3‑5x em cenários de alta carga.
- MTU —
tun-mtu 1500pode ser ajustado para evitar fragmentação em enlaces com overhead. - Número de clientes — para dezenas de túneis, é suficiente; para centenas, considere hardware dedicado.
14. Comparativo com WireGuard
| Característica | OpenVPN | WireGuard |
|---|---|---|
| Código | Dezenas de milhares | ~4.000 linhas |
| Transporte | UDP e TCP | Somente UDP |
| Criptografia | Negociável (TLS/OpenSSL) | Fixa (Curve25519, ChaCha20) |
| PKI e revogação | Completa (CRL) | Não possui (remover chave manualmente) |
| Compatibilidade | Muito ampla | Moderna (RouterOS v7+, Linux) |
| Performance | Boa com DCO | Excelente (kernel) |
Para ISP, o OpenVPN é ideal quando se precisa de revogação individual, compatibilidade com equipamentos legados ou tunelamento via TCP. O WireGuard vence em simplicidade, performance e handshake rápido.
15. Troubleshooting
Verificar se o certificado não foi revogado, se a CA bate entre servidor e cliente, e se o relógio do sistema está correto — data/hora errada é causa comum e não óbvia.
Confirmar que está em UDP (não TCP, ver seção 8), e avaliar DCO se disponível.
Checar push "route ..." no server.conf, ip_forward habilitado e regras de firewall para a interface tun0.
16. Glossário
17. Referências
- Documentação oficial OpenVPN (openvpn.net/community-resources).
- Página relacionada: WireGuard.
Conteúdo técnico independente. Nenhum trecho é cópia literal de fonte de terceiro.