¿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 DES
  • auth SHA256 — autenticación HMAC; no uses MD5 ni SHA1
  • comp-lzo se 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.crt
  • pki/issued/client1.crt
  • pki/private/client1.key
  • ta.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