¿Buscas algo más sencillo? WireGuard es una alternativa moderna de VPN, más fácil de configurar y más rápida. Consulta WireGuard — configura una VPN en Linux en minutos.
El escenario
Dos ubicaciones conectadas a través de Internet mediante un túnel cifrado:
- Servidor (sede central) — IP pública
12.34.56.78, Debian/Ubuntu - Cliente (sucursal) — se conecta a través del túnel VPN
Todo el tráfico del cliente se enruta por el servidor. Es útil cuando quieres controlar el tráfico saliente, tener un único punto de salida o cifrar el tráfico en una red no confiable.
Instalar OpenVPN y Easy-RSA
Debian / Ubuntu:
sudo apt install openvpn easy-rsa
RHEL / Fedora / Rocky Linux:
sudo dnf install openvpn easy-rsa
Configurar la PKI con Easy-RSA 3
Easy-RSA 3 gestiona la Autoridad Certificadora (CA) y todas las claves. Ejecuta estos comandos como usuario normal — no uses Easy-RSA como root.
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
Inicializa la PKI:
./easyrsa init-pki
Crea la CA (te pedirá un nombre):
./easyrsa build-ca nopass
Genera la clave y la solicitud de certificado del servidor:
./easyrsa gen-req server nopass
Firma el certificado del servidor:
./easyrsa sign-req server server
Escribe yes cuando se te pida confirmación.
Genera los parámetros Diffie-Hellman (mínimo 2048 bits; 4096 es más seguro pero tarda más):
./easyrsa gen-dh
Genera una clave TLS auth para protección adicional contra DoS y escaneo de puertos:
openvpn --genkey secret ta.key
Copiar archivos a /etc/openvpn/server/
sudo cp pki/ca.crt /etc/openvpn/server/
sudo cp pki/issued/server.crt /etc/openvpn/server/
sudo cp pki/private/server.key /etc/openvpn/server/
sudo cp pki/dh.pem /etc/openvpn/server/
sudo cp ta.key /etc/openvpn/server/
Configuración del servidor
Crea /etc/openvpn/server/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
key-direction 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
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
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
Notas de seguridad:
cipher AES-256-GCM— estándar actual; no uses Blowfish (BF-CBC) ni DESauth SHA256— autenticación HMAC; no uses MD5 ni SHA1comp-lzose omite intencionalmente — la compresión es vulnerable al ataque VORACLE
Habilita el reenvío de IP en el servidor:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Arrancar el servidor con systemd
sudo systemctl enable --now openvpn-server@server
sudo systemctl status openvpn-server@server
Generar un certificado de cliente
De vuelta en ~/openvpn-ca:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Configuración del cliente
Transfiere estos archivos desde el servidor al equipo cliente:
pki/ca.crtpki/issued/client1.crtpki/private/client1.keyta.key
Crea client1.conf en el cliente:
client
dev tun
proto udp
remote 12.34.56.78 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
key-direction 1
cipher AES-256-GCM
auth SHA256
verb 3
Conéctate:
sudo openvpn --config client1.conf
O instálalo como servicio de systemd:
sudo cp client1.conf /etc/openvpn/client/
sudo systemctl enable --now openvpn-client@client1
Véase también
- WireGuard — configura una VPN en Linux en minutos — alternativa moderna más sencilla y rápida
man openvpn— referencia completa- Documentación de Easy-RSA:
./easyrsa help