
Montar un servidor VPN en Linux es una de las formas más útiles de acceder de manera segura a una red privada desde Internet. Con una VPN puedes conectarte a tu servidor, oficina, laboratorio, NAS, servicios internos o red doméstica usando un túnel cifrado.
En esta guía veremos dos opciones: WireGuard y OpenVPN. WireGuard se presenta oficialmente como una VPN moderna, simple, rápida y basada en criptografía actual; OpenVPN, por su parte, es una solución madura, muy configurable y compatible con SSL/TLS, TUN/TAP y autenticación mediante certificados.
Resumen rápido: usa WireGuard si quieres una VPN moderna, rápida y sencilla. Usa OpenVPN si necesitas máxima compatibilidad con clientes antiguos, routers, redes empresariales o configuraciones muy personalizadas.
Entorno usado en esta guía: Ubuntu Server o Debian actualizado, usuario con sudo, IP pública o dominio apuntando al servidor, firewall activo y acceso SSH funcional.
1. WireGuard vs OpenVPN: cuál elegir
| Criterio | WireGuard | OpenVPN |
|---|---|---|
| Facilidad | Más simple de configurar. | Más pasos por certificados y PKI. |
| Rendimiento | Muy rápido y ligero. | Robusto, pero generalmente más pesado. |
| Compatibilidad | Muy buena en sistemas modernos. | Excelente en routers, clientes antiguos y entornos empresariales. |
| Autenticación | Claves públicas y privadas por peer. | Certificados, CA, claves y TLS. |
| Mejor uso | VPN personal, servidores modernos, móviles, acceso remoto rápido. | Empresas, compatibilidad amplia, redes antiguas, clientes variados. |
WireGuard trabaja con el concepto de peers, donde cada extremo del túnel tiene una clave privada y una clave pública. Ubuntu documenta WireGuard como una solución apta para escenarios peer-to-site, site-to-site y puerta de enlace por defecto.
OpenVPN puede funcionar con claves precompartidas o con seguridad basada en SSL/TLS usando certificados de cliente y servidor. Para despliegues serios, lo recomendable es usar certificados y una PKI generada con herramientas como Easy-RSA.
2. Preparar el servidor Linux
Antes de instalar la VPN, actualiza el sistema, revisa la interfaz de red pública y confirma que el servidor tiene salida a Internet.
sudo apt update sudo apt full-upgrade -y hostnamectl ip -br address ip route ss -lntup
También debes identificar la interfaz que sale a Internet. En muchos servidores se llama eth0, ens3, ens18 o enp1s0.
ip route | grep default
En los ejemplos usaremos eth0 como interfaz pública. Si tu servidor muestra otro nombre, reemplázalo en los comandos.
3. Activar reenvío de paquetes en Linux
Para que los clientes VPN puedan salir a Internet o acceder a otras redes a través del servidor, Linux debe reenviar paquetes entre interfaces.
sudo tee /etc/sysctl.d/99-vpn-forward.conf > /dev/null <<'EOF' net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 EOF sudo sysctl --system
4. Configurar firewall básico con UFW
Ubuntu documenta UFW como una herramienta sencilla para permitir o restringir acceso por puertos, protocolos y redes. Antes de activar el firewall, permite SSH para no perder el acceso remoto.
sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH sudo ufw enable sudo ufw status verbose
Precaución: no cierres tu sesión SSH hasta confirmar que puedes abrir otra conexión al servidor después de activar UFW.
5. Instalación de WireGuard en Linux
WireGuard puede administrarse con herramientas como wg y wg-quick. La documentación de WireGuard muestra el uso de claves públicas y privadas, y wg-quick permite levantar o bajar interfaces de forma sencilla.
sudo apt update sudo apt install -y wireguard qrencode sudo install -d -m 700 /etc/wireguard cd /etc/wireguard sudo sh -c 'umask 077; wg genkey > servidor.key' sudo sh -c 'wg pubkey < servidor.key > servidor.pub' sudo cat /etc/wireguard/servidor.key sudo cat /etc/wireguard/servidor.pub
Guarda la clave pública del servidor porque la usarás en la configuración de cada cliente. La clave privada nunca debe compartirse.
6. Crear la configuración del servidor WireGuard
Edita el archivo principal de WireGuard:
sudo nano /etc/wireguard/wg0.conf
Pega esta configuración. Cambia eth0 por tu interfaz pública real y reemplaza PEGA_AQUI_LA_CLAVE_PRIVADA_DEL_SERVIDOR por el contenido de /etc/wireguard/servidor.key.
[Interface] Address = 10.8.0.1/24 ListenPort = 51820 PrivateKey = PEGA_AQUI_LA_CLAVE_PRIVADA_DEL_SERVIDOR SaveConfig = false PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Protege el archivo y abre el puerto UDP de WireGuard:
sudo chmod 600 /etc/wireguard/wg0.conf sudo ufw allow 51820/udp sudo systemctl enable --now wg-quick@wg0 sudo wg show sudo systemctl status wg-quick@wg0 --no-pager
Puerto recomendado: WireGuard usa UDP. El puerto 51820 es común, pero puedes cambiarlo si tu política de red lo exige.
7. Crear un cliente WireGuard
En el servidor, genera claves para el primer cliente:
cd /etc/wireguard sudo sh -c 'umask 077; wg genkey > cliente1.key' sudo sh -c 'wg pubkey < cliente1.key > cliente1.pub' sudo cat cliente1.key sudo cat cliente1.pub
Ahora añade el cliente al servidor editando /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
Agrega al final:
[Peer] PublicKey = PEGA_AQUI_LA_CLAVE_PUBLICA_DEL_CLIENTE AllowedIPs = 10.8.0.2/32
Reinicia WireGuard:
sudo systemctl restart wg-quick@wg0 sudo wg show
8. Archivo de configuración del cliente WireGuard
En el cliente Linux, crea un archivo llamado cliente1.conf. También puedes usarlo en la aplicación oficial de WireGuard para Windows, macOS, Android o iOS.
[Interface] PrivateKey = PEGA_AQUI_LA_CLAVE_PRIVADA_DEL_CLIENTE Address = 10.8.0.2/32 DNS = 1.1.1.1 [Peer] PublicKey = PEGA_AQUI_LA_CLAVE_PUBLICA_DEL_SERVIDOR Endpoint = IP_PUBLICA_O_DOMINIO_DEL_SERVIDOR:51820 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25
Si quieres que todo el tráfico del cliente pase por la VPN, deja AllowedIPs = 0.0.0.0/0, ::/0. Si solo quieres acceder a la red VPN, usa algo más limitado como:
AllowedIPs = 10.8.0.0/24
Para conectar desde Linux:
sudo apt install -y wireguard sudo cp cliente1.conf /etc/wireguard/wg0.conf sudo chmod 600 /etc/wireguard/wg0.conf sudo wg-quick up wg0 sudo wg show
Para generar un QR y usarlo en móvil:
qrencode -t ansiutf8 < cliente1.conf
9. Instalación de OpenVPN en Linux
OpenVPN requiere más pasos porque trabaja normalmente con certificados. Ubuntu documenta la instalación de OpenVPN junto con Easy-RSA para crear una infraestructura de clave pública, conocida como PKI.
sudo apt update sudo apt install -y openvpn easy-rsa
Crea el directorio de trabajo de Easy-RSA:
make-cadir ~/openvpn-ca cd ~/openvpn-ca
10. Crear certificados con Easy-RSA
Easy-RSA permite crear una autoridad certificadora, solicitudes de certificado, certificados de servidor, certificados de cliente y listas de revocación. Su documentación lo define como una utilidad de línea de comandos para construir y administrar una PKI.
./easyrsa init-pki ./easyrsa build-ca nopass ./easyrsa gen-req server nopass ./easyrsa sign-req server server ./easyrsa gen-dh openvpn --genkey secret ta.key ./easyrsa gen-req cliente1 nopass ./easyrsa sign-req client cliente1
Copia los archivos necesarios al directorio del servidor OpenVPN:
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/
11. Configurar el servidor OpenVPN
Crea el archivo de configuración:
sudo nano /etc/openvpn/server/server.conf
Pega esta configuración base:
port 1194 proto udp dev tun topology subnet server 10.9.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 1.1.1.1" ca ca.crt cert server.crt key server.key dh dh.pem tls-crypt ta.key data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305 auth SHA256 keepalive 10 120 user nobody group nogroup persist-key persist-tun explicit-exit-notify 1 verb 3
OpenVPN recomienda endurecer la seguridad reduciendo privilegios después de la inicialización mediante opciones como user nobody y group nobody/nogroup, lo que reduce el impacto si el servicio llega a ser comprometido.
12. Abrir firewall y activar NAT para OpenVPN
Abre el puerto UDP de OpenVPN:
sudo ufw allow 1194/udp sudo ufw route allow in on tun0 out on eth0
Activa NAT para que los clientes de OpenVPN puedan salir a Internet a través del servidor. Cambia eth0 por tu interfaz pública real:
sudo iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE sudo apt install -y iptables-persistent netfilter-persistent sudo netfilter-persistent save
Inicia OpenVPN:
sudo systemctl enable --now openvpn-server@server sudo systemctl status openvpn-server@server --no-pager ip -br address | grep tun
13. Crear un perfil de cliente OpenVPN
Para un cliente llamado cliente1, necesitas estos archivos:
~/openvpn-ca/pki/ca.crt ~/openvpn-ca/pki/issued/cliente1.crt ~/openvpn-ca/pki/private/cliente1.key ~/openvpn-ca/ta.key
Un perfil básico de cliente puede verse así:
client dev tun proto udp remote IP_PUBLICA_O_DOMINIO_DEL_SERVIDOR 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305 auth SHA256 verb 3 ca ca.crt cert cliente1.crt key cliente1.key tls-crypt ta.key
En clientes gráficos de OpenVPN, normalmente puedes importar un archivo .ovpn. Si usas certificados separados, asegúrate de que el cliente tenga todos los archivos necesarios en la misma carpeta o usa un perfil inline con certificados embebidos.
14. Probar la conexión VPN
Desde un cliente Linux con WireGuard:
sudo wg-quick up wg0 sudo wg show ping -c 4 10.8.0.1 curl ifconfig.me
Desde un cliente Linux con OpenVPN:
sudo apt install -y openvpn sudo openvpn --config cliente1.ovpn
En el servidor, revisa logs y estado:
sudo wg show sudo journalctl -u wg-quick@wg0 --since today --no-pager sudo systemctl status openvpn-server@server --no-pager sudo journalctl -u openvpn-server@server --since today --no-pager
15. Buenas prácticas de seguridad
- Usa claves únicas por cliente: nunca compartas la misma clave entre varios usuarios.
- Revoca accesos: si un cliente se pierde, elimina su peer en WireGuard o revoca su certificado en OpenVPN.
- No publiques claves privadas: ni en GitHub, ni en correos, ni en tickets de soporte.
- Usa firewall: expón solo SSH, WireGuard/OpenVPN y los servicios necesarios.
- Mantén el sistema actualizado: kernel, OpenVPN, WireGuard, OpenSSL y paquetes de seguridad.
- Registra cambios: documenta qué usuario tiene qué IP VPN y qué permisos.
- Prefiere UDP: suele funcionar mejor para VPN que TCP sobre TCP.
- Protege SSH: usa claves, desactiva login root y limita intentos con herramientas como Fail2Ban.
Aclaración importante: una VPN no te vuelve automáticamente anónimo. El servidor VPN puede ver tráfico saliente, metadatos y destinos. La VPN protege el túnel entre el cliente y el servidor, pero no reemplaza buenas prácticas de privacidad, DNS seguro, HTTPS y control de logs.
16. Errores frecuentes al instalar una VPN en Linux
- Olvidar activar net.ipv4.ip_forward.
- No abrir el puerto UDP en el firewall o en el proveedor cloud.
- Confundir la IP privada del servidor con la IP pública.
- Usar eth0 en reglas NAT cuando la interfaz real tiene otro nombre.
- Compartir la misma clave WireGuard con varios usuarios.
- No guardar la CA de OpenVPN de forma segura.
- No probar la renovación o revocación de certificados OpenVPN.
- Usar scripts desconocidos sin revisar qué modifican en el sistema.
- No documentar qué clientes están autorizados.
- No hacer copia de seguridad de configuraciones y certificados.
Preguntas clave
¿Cuál es mejor para principiantes, WireGuard u OpenVPN?
WireGuard suele ser mejor para principiantes porque usa menos archivos, menos parámetros y un modelo simple de claves públicas y privadas. OpenVPN sigue siendo excelente cuando necesitas compatibilidad amplia o una configuración más tradicional basada en certificados.
¿Puedo instalar WireGuard y OpenVPN en el mismo servidor?
Sí. Puedes tener WireGuard en UDP 51820 y OpenVPN en UDP 1194. Solo asegúrate de usar subredes distintas, por ejemplo 10.8.0.0/24 para WireGuard y 10.9.0.0/24 para OpenVPN.
¿Necesito IP pública fija?
Es lo ideal. Si tu IP cambia, puedes usar un dominio con DNS dinámico. Los clientes deben conocer siempre la dirección pública del servidor VPN.
¿Qué puerto debo abrir?
WireGuard usa normalmente UDP 51820. OpenVPN usa frecuentemente UDP 1194. También debes permitir SSH para administrar el servidor.
¿Una VPN protege todo mi tráfico?
Solo si el cliente está configurado para enviar todo el tráfico por la VPN. En WireGuard eso se hace con AllowedIPs = 0.0.0.0/0, ::/0. En OpenVPN se usa redirect-gateway.
¿Qué pasa si pierdo un dispositivo cliente?
En WireGuard debes eliminar su peer del servidor. En OpenVPN debes revocar su certificado y actualizar la lista de revocación si tu despliegue la usa.
Recomendamos
- Cómo proteger un servidor Linux con herramientas gratuitas de seguridad.
- Guía completa para instalar y configurar un servidor web seguro con Nginx y Apache en Linux.
- Cómo montar tu propio servidor de nube privada con Linux.
- Guía práctica para aprender redes en Linux utilizando herramientas open source.
En resumen
WireGuard y OpenVPN siguen siendo dos de las mejores opciones para montar un servidor VPN en Linux. WireGuard destaca por simplicidad, velocidad y facilidad de mantenimiento. OpenVPN destaca por madurez, compatibilidad y flexibilidad en entornos empresariales o mixtos.
Para principiantes, la mejor ruta es empezar con WireGuard, crear un cliente, probar conexión, revisar firewall y documentar claves. Luego, si necesitas certificados, compatibilidad con clientes antiguos o políticas más avanzadas, OpenVPN sigue siendo una opción sólida y ampliamente soportada.
Conclusión editorial
Una VPN bien configurada no es solo “un túnel”: es una puerta segura hacia tu infraestructura. WireGuard ofrece rapidez y sencillez; OpenVPN ofrece compatibilidad y control. La clave está en elegir según tu escenario, proteger las claves, limitar accesos y mantener el servidor actualizado.

