Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
openvpn-install — Configura tu propio servidor OpenVPN en Debian, Ubuntu, Fedora, CentOS, Arch Linux y más. | Kitploit
Herramientas/GitHubGitHub/angristan/openvpn-install
Herramientas de Cifrado/DescifradoScripting y AutomatizaciónSeguridad de RedesPrivacidad
GitHubangristan/openvpn-install

openvpn-install

Configura tu propio servidor OpenVPN en Debian, Ubuntu, Fedora, CentOS, Arch Linux y más.

Ver Repositorio
16.1k3.3k52hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

openvpn-install

Say Thanks!

Instalador de OpenVPN para Debian, Ubuntu, Fedora, openSUSE, CentOS, Amazon Linux, Arch Linux, Oracle Linux, Rocky Linux y AlmaLinux.

Este script te permitirá configurar y gestionar tu propio servidor VPN seguro en solo unos segundos.

¿Qué es esto?

Este script está pensado para ejecutarse en tu propio servidor, ya sea un VPS o un servidor dedicado, o incluso un ordenador en casa.

Una vez configurado, podrás generar archivos de configuración de cliente para cada dispositivo que quieras conectar.

Cada cliente podrá enrutar su tráfico de internet a través del servidor, totalmente cifrado.```mermaid graph LR A[Phone] -->|Encrypted| VPN B[Laptop] -->|Encrypted| VPN C[Computer] -->|Encrypted| VPN

VPN[OpenVPN Server]

VPN --> I[Internet]

root@kitploit:~
## ¿Por qué OpenVPN?

OpenVPN era el estándar de facto para VPNs de código abierto cuando se creó este script. WireGuard llegó después y es más simple y rápido para la mayoría de los casos de uso. Echa un vistazo a [wireguard-install](https://github.com/angristan/wireguard-install).

Dicho esto, OpenVPN sigue teniendo sentido cuando necesitas:

- **Soporte TCP**: funciona en entornos restrictivos donde UDP está bloqueado (redes corporativas, aeropuertos, hoteles, etc.)
- **Claves privadas protegidas por contraseña**: las configuraciones de WireGuard almacenan la clave privada en texto plano
- **Compatibilidad heredada**: existen clientes para casi todas las plataformas, incluidos sistemas antiguos

## Características

- Instala y configura un servidor OpenVPN listo para usar
- Interfaz CLI para automatización y scripting (modo no interactivo con salida JSON)
- Renovación de certificados tanto para certificados de cliente como de servidor
- Listar y monitorear clientes conectados
- Desconexión inmediata del cliente al revocar el certificado (a través de la interfaz de gestión)
- Utiliza los [repositorios oficiales de OpenVPN](https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos) cuando es posible para las últimas versiones estables
- Reglas de firewall y reenvío gestionados sin problemas (soporte nativo de firewalld y nftables, con iptables como respaldo)
- Subredes VPN configurables (IPv4: por defecto `10.8.0.0/24`, IPv6: por defecto `fd42:42:42:42::/112`)
- MTU de túnel configurable (por defecto: `1500`)
- Si es necesario, el script puede eliminar OpenVPN limpiamente, incluida la configuración y las reglas de firewall
- Ajustes de cifrado personalizables, configuraciones predeterminadas mejoradas (ver [Seguridad y cifrado](#security-and-encryption) más abajo)
- Utiliza las últimas funciones de OpenVPN cuando están disponibles (ver [Seguridad y cifrado](#security-and-encryption) más abajo)
- Variedad de resolutores DNS para enviar a los clientes
- Opción de usar un resolutor autoalojado con Unbound (compatible con instalaciones de Unbound ya existentes)
- Opción entre TCP y UDP
- Soporte flexible de IPv4/IPv6:
  - Extremo de servidor IPv4 o IPv6 (cómo se conectan los clientes)
  - Clientes solo IPv4, solo IPv6 o de doble pila (direccionamiento VPN y acceso a internet)
  - Todas las combinaciones compatibles: 4→4, 4→4/6, 4→6, 6→4, 6→6, 6→4/6
  - Prevención automática de fugas: bloquea el protocolo no deseado en modos de pila única
- Modo sin privilegios: ejecutar como `nobody`/`nogroup`
- Bloquear fugas de DNS en Windows 10
- Nombre de certificado de servidor aleatorizado
- Opción de proteger a los clientes con una contraseña (cifrado de clave privada)
- Opción para permitir que varios dispositivos usen el mismo perfil de cliente simultáneamente (desactiva las direcciones IP persistentes)
- **Autenticación por huella digital de pares** (OpenVPN 2.6+): autenticación simplificada similar a WireGuard sin CA
- ¡Muchas otras pequeñas cosas!

## Compatibilidad

El script es compatible con estas distribuciones de Linux:

|                     | Soporte |
| ------------------- | ------- |
| AlmaLinux >= 8      | ✅ 🤖   |
| Amazon Linux 2023   | ✅ 🤖   |
| Arch Linux          | ✅ 🤖   |
| CentOS Stream >= 8  | ✅ 🤖   |
| Debian >= 11        | ✅ 🤖   |
| Fedora >= 40        | ✅ 🤖   |
| openSUSE Leap >= 16 | ✅ 🤖   |
| openSUSE Tumbleweed | ✅ 🤖   |
| Oracle Linux >= 8   | ✅ 🤖   |
| Rocky Linux >= 8    | ✅ 🤖   |
| Ubuntu >= 18.04     | ✅ 🤖   |

A tener en cuenta:

- El script se prueba regularmente solo contra las distribuciones marcadas con 🤖.
  - Solo se prueba en arquitectura `amd64`.
- El script requiere `systemd`.

### Proveedores recomendados

- [Vultr](https://umami.stanislas.cloud/q/1HH9Thp8i): Ubicaciones en todo el mundo, soporte IPv6, desde \$2.5/mes
- [Hetzner](https://umami.stanislas.cloud/q/HdzaOJWq7): Ubicaciones en todo el mundo, IPv6, 20 TB de tráfico, desde €3.59/mes
- [Digital Ocean](https://umami.stanislas.cloud/q/sEVh1l79B): Ubicaciones en todo el mundo, soporte IPv6, desde \$4/mes

## Uso

Primero, descarga el script en tu servidor y hazlo ejecutable:```bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh

Necesitas ejecutar el script como root y tener el módulo TUN habilitado.

Modo Interactivo

La forma más fácil de empezar es el menú interactivo:```bash ./openvpn-install.sh interactive

root@kitploit:~
Esto te guiará a través de la instalación y la gestión de clientes.

En tu directorio personal, tendrás archivos `.ovpn`. Estos son los archivos de configuración del cliente. Descárgalos desde tu servidor (usando `scp`, por ejemplo) y conéctate usando tu cliente OpenVPN favorito.

Si tienes alguna pregunta, dirígete primero a las [FAQ](#faq). Y si necesitas ayuda, puedes abrir una [discusión](https://github.com/angristan/openvpn-install/discussions). Por favor, busca primero en los issues y discusiones existentes.

### Modo CLI

> [!WARNING]
> No se garantiza la compatibilidad de la API. Pueden ocurrir cambios que rompan la compatibilidad entre versiones. Si usas este script programáticamente (p. ej., en automatización o CI/CD), fija un commit específico en lugar de usar la rama master.

Para automatización y scripting, usa la interfaz CLI:```bash
# Install with defaults
./openvpn-install.sh install

# Add a client
./openvpn-install.sh client add alice

# List clients
./openvpn-install.sh client list

# Revoke a client (immediately disconnects if connected)
./openvpn-install.sh client revoke alice

Comandos```text

openvpn-install [options]

Commands: install Install and configure OpenVPN server uninstall Remove OpenVPN server client Manage client certificates server Server management interactive Launch interactive menu

Global Options: --verbose Show detailed output --log Log file path (default: openvpn-install.log) --no-log Disable file logging --no-color Disable colored output -h, --help Show help

root@kitploit:~
Ejecuta `./openvpn-install.sh <command> --help` para conocer las opciones específicas de cada comando.

#### Gestión de clientes```bash
# Add a new client
./openvpn-install.sh client add alice

# Add a password-protected client
./openvpn-install.sh client add bob --password

# Revoke a client
./openvpn-install.sh client revoke alice

# Renew a client certificate
./openvpn-install.sh client renew bob --cert-days 365

Listar todos los clientes:```text $ ./openvpn-install.sh client list ══ Client Certificates ══ [INFO] Found 3 client certificate(s)

Name Status Expiry Remaining


alice Valid 2035-01-15 3650 days bob Valid 2035-01-15 3650 days charlie Revoked 2035-01-15 unknown

root@kitploit:~
Salida JSON para scripting:```text
$ ./openvpn-install.sh client list --format json | jq
{
  "clients": [
    {
      "name": "alice",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "bob",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "charlie",
      "status": "revoked",
      "expiry": "2035-01-15",
      "days_remaining": null
    }
  ]
}

Gestión de servidores```bash

Renew server certificate

./openvpn-install.sh server renew

Uninstall OpenVPN

./openvpn-install.sh uninstall

root@kitploit:~
Mostrar clientes conectados (los datos se actualizan cada 60 segundos):```text
$ ./openvpn-install.sh server status
══ Connected Clients ══
[INFO] Found 2 connected client(s)

   Name    Real Address          VPN IP      Connected Since   Transfer
   ----    ------------          ------      ---------------   --------
   alice   203.0.113.45:52341    10.8.0.2    2025-01-15 14:32  ↓1.2M ↑500K
   bob     198.51.100.22:41892   10.8.0.3    2025-01-15 09:15  ↓800K ↑200K

[INFO] Note: Data refreshes every 60 seconds.

Opciones de instalación

El comando install admite muchas opciones de personalización:```bash

Custom port and protocol

./openvpn-install.sh install --port 443 --protocol tcp

Custom DNS provider

./openvpn-install.sh install --dns quad9

Custom encryption settings

./openvpn-install.sh install --cipher AES-256-GCM --cert-type rsa --rsa-bits 4096

Custom VPN subnet

./openvpn-install.sh install --subnet-ipv4 10.9.0.0

Enable dual-stack (IPv4 + IPv6) for clients

./openvpn-install.sh install --client-ipv4 --client-ipv6

IPv6-only clients (no IPv4)

./openvpn-install.sh install --no-client-ipv4 --client-ipv6

IPv6 endpoint (server listens on IPv6, clients connect via IPv6)

./openvpn-install.sh install --endpoint-type 6 --endpoint 2001:db8::1

Custom IPv6 subnet for dual-stack setup

./openvpn-install.sh install --client-ipv6 --subnet-ipv6 fd00🔢5678::

Skip initial client creation

./openvpn-install.sh install --no-client

Full example with multiple options

./openvpn-install.sh install
--port 443
--protocol tcp
--dns cloudflare
--cipher AES-256-GCM
--client mydevice
--client-cert-days 365

root@kitploit:~
**Opciones de red:**

- `--endpoint <host>` - IP pública o nombre de host para clientes (por defecto: auto-detectado)
- `--endpoint-type <4|6>` - Versión de IP del endpoint (por defecto: `4`)
- `--ip <addr>` - IP de escucha del servidor (por defecto: auto-detectada)
- `--client-ipv4` - Habilitar IPv4 para clientes VPN (por defecto: habilitado)
- `--no-client-ipv4` - Deshabilitar IPv4 para clientes VPN
- `--client-ipv6` - Habilitar IPv6 para clientes VPN (por defecto: deshabilitado)
- `--no-client-ipv6` - Deshabilitar IPv6 para clientes VPN
- `--subnet-ipv4 <x.x.x.0>` - Subred VPN IPv4 (por defecto: `10.8.0.0`)
- `--subnet-ipv6 <prefix>` - Subred VPN IPv6 (por defecto: `fd42:42:42:42::`)
- `--port <num>` - Puerto OpenVPN (por defecto: `1194`)
- `--port-random` - Usar puerto aleatorio (49152-65535)
- `--protocol <udp|tcp>` - Protocolo (por defecto: `udp`)
- `--mtu <size>` - MTU del túnel (por defecto: `1500`)

**Opciones de DNS:**

- `--dns <provider>` - Proveedor de DNS (por defecto: `cloudflare`). Opciones: `system`, `unbound`, `cloudflare`, `quad9`, `quad9-uncensored`, `fdn`, `dnswatch`, `opendns`, `google`, `yandex`, `adguard`, `nextdns`, `custom`
- `--dns-primary <ip>` - DNS primario personalizado (requiere `--dns custom`)
- `--dns-secondary <ip>` - DNS secundario personalizado (requiere `--dns custom`)

**Opciones de seguridad:**

- `--cipher <cipher>` - Cifrado de datos (por defecto: `AES-128-GCM`). Opciones: `AES-128-GCM`, `AES-192-GCM`, `AES-256-GCM`, `AES-128-CBC`, `AES-192-CBC`, `AES-256-CBC`, `CHACHA20-POLY1305`
- `--cert-type <ecdsa|rsa>` - Tipo de certificado (por defecto: `ecdsa`)
- `--cert-curve <curve>` - Curva ECDSA (por defecto: `prime256v1`). Opciones: `prime256v1`, `secp384r1`, `secp521r1`
- `--rsa-bits <2048|3072|4096>` - Tamaño de clave RSA (por defecto: `2048`)
- `--hmac <alg>` - Algoritmo HMAC (por defecto: `SHA256`). Opciones: `SHA256`, `SHA384`, `SHA512`
- `--tls-sig <mode>` - Modo TLS (por defecto: `crypt-v2`). Opciones: `crypt-v2`, `crypt`, `auth`
- `--auth-mode <mode>` - Modo de autenticación (por defecto: `pki`). Opciones: `pki` (basado en CA), `fingerprint` (peer-fingerprint, requiere OpenVPN 2.6+)
- `--tls-version-min <1.2|1.3>` - Versión mínima de TLS (por defecto: `1.2`)
- `--tls-ciphersuites <list>` - Suites de cifrado TLS 1.3, separadas por dos puntos (por defecto: `TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256`)
- `--tls-groups <list>` - Grupos de intercambio de claves, separados por dos puntos (por defecto: `X25519:prime256v1:secp384r1:secp521r1`)
- `--server-cert-days <n>` - Validez del certificado del servidor en días (por defecto: `3650`)

**Opciones de cliente:**

- `--client <name>` - Nombre inicial del cliente (por defecto: `client`)
- `--client-password [pass]` - Proteger con contraseña la clave del cliente (por defecto: sin contraseña)
- `--client-cert-days <n>` - Validez del certificado del cliente en días (por defecto: `3650`)
- `--no-client` - Omitir la creación inicial del cliente

**Otras opciones:**

- `--multi-client` - Permitir el mismo certificado en varios dispositivos (por defecto: deshabilitado)

#### Ejemplos de automatización

**Creación de clientes en lote:**```bash
#!/bin/bash
for user in alice bob charlie; do
  ./openvpn-install.sh client add "$user"
done

Crear clientes desde un archivo:```bash #!/bin/bash while read -r user; do ./openvpn-install.sh client add "$user" done < users.txt

root@kitploit:~
**Salida JSON para scripting:**```bash
# Get client list as JSON
./openvpn-install.sh client list --format json | jq '.clients[] | select(.status == "valid")'

# Get connected clients as JSON
./openvpn-install.sh server status --format json

Fork

Este script se basa en el gran trabajo de Nyr y sus colaboradores.

Desde 2016, los dos scripts han divergido y ya no se parecen, especialmente bajo el capó. El objetivo principal del script era mejorar la seguridad. Pero desde entonces, el script ha sido reescrito por completo y se han añadido muchas funciones. Sin embargo, el script solo es compatible con distribuciones recientes, por lo que si necesitas usar un servidor o cliente muy antiguo, te aconsejo usar el script de Nyr.

FAQ

Más preguntas y respuestas en FAQ.md.

P: ¿Qué proveedor recomiendas?

R: Te recomiendo estos:

  • Vultr: Ubicaciones en todo el mundo, soporte IPv6, a partir de $2.5 al mes
  • Hetzner: Ubicaciones en todo el mundo, IPv6, 20 TB de tráfico, a partir de €3.59 al mes
  • Digital Ocean: Ubicaciones en todo el mundo, soporte IPv6, a partir de $4 al mes

P: ¿Qué cliente de OpenVPN recomiendas?

R: Si es posible, un cliente oficial de OpenVPN 2.4.

  • Windows: El cliente oficial de la comunidad OpenVPN.
  • Linux: El paquete openvpn de tu distribución. Hay un repositorio APT oficial para distribuciones basadas en Debian/Ubuntu.
  • macOS: Tunnelblick, Viscosity, OpenVPN para Mac.
  • Android: OpenVPN para Android.
  • iOS: El cliente oficial OpenVPN Connect.

P: ¿Estoy a salvo de la NSA usando tu script?

R: Por favor, revisa tus modelos de amenaza. Aunque este script tiene en cuenta la seguridad y utiliza cifrado de última generación, no deberías usar una VPN si quieres ocultarte de la NSA.


P: ¿Hay documentación de OpenVPN?

R: Sí, dirígete al Manual de OpenVPN, que referencia todas las opciones.


Más preguntas y respuestas en FAQ.md.

Contribuciones

Discutir los cambios

Por favor, abre un issue antes de enviar un PR si quieres discutir un cambio, especialmente si es grande.

Seguridad y cifrado

[!NOTE] Este script fue creado en 2016 cuando los valores predeterminados de OpenVPN eran bastante débiles. En aquel entonces, personalizar la configuración de cifrado era esencial para una instalación segura. Desde entonces, OpenVPN ha mejorado significativamente sus valores predeterminados, pero el script todavía ofrece opciones de personalización.

OpenVPN 2.3 y versiones anteriores incluían valores predeterminados obsoletos como Blowfish (BF-CBC), TLS 1.0 y SHA1. Desde entonces, cada versión principal ha traído mejoras significativas:

  • OpenVPN 2.4 (2016): Añadió ECDSA, ECDH, AES-GCM, NCP (negociación de cifrado) y tls-crypt
  • OpenVPN 2.5 (2020): El cifrado predeterminado cambió de BF-CBC a AES-256-GCM:AES-128-GCM, añadió ChaCha20-Poly1305, tls-crypt-v2 y soporte para TLS 1.3
  • OpenVPN 2.6 (2023): TLS 1.2 como mínimo por defecto, compresión bloqueada por defecto, --peer-fingerprint para configuraciones sin PKI, y aceleración por kernel DCO

Si quieres más información sobre alguna opción mencionada a continuación, dirígete al manual de OpenVPN. Es muy completo.

La gestión de certificados y PKI está a cargo de Easy-RSA. Los parámetros predeterminados están en el archivo vars.example.

Compresión

Este script solía admitir los algoritmos de compresión LZ4 y LZO, pero desaconsejaba su uso debido a la vulnerabilidad del ataque VORACLE.

OpenVPN 2.6+ establece --allow-compression en no por defecto, bloqueando incluso la compresión enviada por el servidor. Ahora que OpenVPN está eliminando por completo el soporte de compresión, este script ya no lo admite.

Versión TLS

[!NOTE] OpenVPN 2.6+ establece TLS 1.2 como mínimo por defecto. Las versiones anteriores aceptaban TLS 1.0 por defecto.

OpenVPN 2.5 y versiones anteriores aceptaban TLS 1.0 por defecto, que tiene casi 20 años.

Este script establece tls-version-min 1.2 por defecto para compatibilidad con todos los clientes OpenVPN 2.4+. Opcionalmente, puedes establecer tls-version-min 1.3 para entornos donde todos los clientes soporten TLS 1.3.

El soporte de TLS 1.3 se añadió en OpenVPN 2.5 y requiere OpenSSL 1.1.1+. TLS 1.3 ofrece una seguridad y un rendimiento mejorados con un protocolo de enlace simplificado.

El script configura las suites de cifrado TLS 1.3 mediante --tls-ciphersuites (separado de la opción --tls-cipher de TLS 1.2). Las suites de cifrado TLS 1.3 predeterminadas son:

  • TLS_AES_256_GCM_SHA384
  • TLS_AES_128_GCM_SHA256
  • TLS_CHACHA20_POLY1305_SHA256

TLS 1.2 es compatible desde OpenVPN 2.3.3. TLS 1.3 es compatible desde OpenVPN 2.5.

Certificado

OpenVPN utiliza un certificado RSA con una clave de 2048 bits por defecto.

OpenVPN 2.4 añadió soporte para ECDSA. La criptografía de curva elíptica es más rápida, ligera y segura.

Este script ofrece:

  • ECDSA: curvas prime256v1/secp384r1/secp521r1
  • RSA: claves de 2048/3072/4096 bits

Por defecto usa ECDSA con prime256v1.

OpenVPN usa SHA-256 como hash de firma por defecto, y el script también. De momento no ofrece otra opción.

Modo de autenticación

El script admite dos modos de autenticación:

Modo PKI (predeterminado)

Autenticación tradicional basada en Autoridad Certificadora (CA). El servidor y todos los clientes tienen certificados firmados por la misma CA. La revocación de clientes se gestiona mediante Listas de Revocación de Certificados (CRL).

Este es el modo recomendado para despliegues más grandes donde necesitas:

  • Gestión centralizada de certificados
  • Revocación estándar basada en CRL
  • Compatibilidad con todas las versiones de OpenVPN

Modo Peer Fingerprint (OpenVPN 2.6+)

Un modelo de autenticación simplificado similar a WireGuard que utiliza huellas digitales de certificado SHA256 en lugar de una cadena de CA. Cada peer (servidor y clientes) tiene un certificado autofirmado, y los peers se autentican entre sí verificando las huellas digitales.```bash

Install with fingerprint mode

./openvpn-install.sh install --auth-mode fingerprint

root@kitploit:~
Ventajas:

- Configuración más simple: no se necesita infraestructura de CA
- Más fácil de entender: similar al modelo `known_hosts` de SSH
- Ideal para configuraciones pequeñas: redes domésticas, laboratorios, equipos pequeños

Cómo funciona:

1. El servidor genera un certificado autofirmado y almacena su huella digital
2. Cada cliente genera un certificado autofirmado
3. Las huellas digitales de los clientes se añaden al bloque `<peer-fingerprint>` del servidor
4. Los clientes verifican el servidor mediante la huella digital del servidor
5. La revocación elimina la huella digital de la configuración del servidor (no se necesita CRL)

Compromiso: revocar un cliente requiere recargar OpenVPN (las huellas digitales están en server.conf). En modo PKI, el archivo CRL se vuelve a leer automáticamente en cada nueva conexión.

### Canal de datos

> [!NOTE]
> El cifrado predeterminado del canal de datos cambió en OpenVPN 2.5. Las versiones anteriores usaban `BF-CBC` por defecto, mientras que OpenVPN 2.5+ usa `AES-256-GCM:AES-128-GCM` por defecto. OpenVPN 2.6+ también incluye `CHACHA20-POLY1305` en la lista de cifrados predeterminados cuando está disponible.

Por defecto, OpenVPN 2.4 y anteriores usaban `BF-CBC` como cifrado del canal de datos. Blowfish es un algoritmo antiguo (1993) y débil. Incluso la documentación oficial de OpenVPN lo admite.

> El valor predeterminado es BF-CBC, una abreviatura de Blowfish en modo Cipher Block Chaining.
>
> Ya no se recomienda usar BF-CBC, debido a su tamaño de bloque de 64 bits. Este pequeño tamaño de bloque permite ataques basados en colisiones, como lo demuestra SWEET32. Consulta <https://community.openvpn.net/openvpn/wiki/SWEET32> para más detalles.
> Investigadores de seguridad del INRIA publicaron un ataque contra cifrados de bloque de 64 bits, como 3DES y Blowfish. Demuestran que pueden recuperar texto plano cuando los mismos datos se envían con suficiente frecuencia, y muestran cómo pueden usar vulnerabilidades de cross-site scripting para enviar los datos de interés con la frecuencia necesaria. Esto funciona sobre HTTPS, pero también funciona para HTTP sobre OpenVPN. Consulta <https://sweet32.info/> para una explicación mucho mejor y más detallada.
>
> El cifrado predeterminado de OpenVPN, BF-CBC, se ve afectado por este ataque.

De hecho, AES es el estándar actual. Es el cifrado más rápido y seguro disponible hoy en día. [SEED](https://en.wikipedia.org/wiki/SEED) y [Camellia](https://github.com/angristan/openvpn-install/blob/master/%3Chttps%3A/en.wikipedia.org/wiki/Camellia_%28cipher)>) no son vulnerables hasta la fecha, pero son más lentos que AES y gozan de menos confianza.

> De los cifrados actualmente soportados, OpenVPN recomienda actualmente usar AES-256-CBC o AES-128-CBC. OpenVPN 2.4 y versiones posteriores también admiten GCM. Para 2.4+, recomendamos usar AES-256-GCM o AES-128-GCM.

AES-256 es un 40% más lento que AES-128, y no hay ninguna razón real para usar una clave de 256 bits en lugar de una de 128 bits con AES. (Fuente: [1](http://security.stackexchange.com/questions/14068/why-most-people-use-256-bit-encryption-instead-of-128-bit),[2](http://security.stackexchange.com/questions/6141/amount-of-simple-operations-that-is-safely-out-of-reach-for-all-humanity/6149#6149)). Además, AES-256 es más vulnerable a los [ataques de temporización](https://en.wikipedia.org/wiki/Timing_attack).

AES-GCM es un [cifrado AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption), lo que significa que proporciona simultáneamente garantías de confidencialidad, integridad y autenticidad sobre los datos.

ChaCha20-Poly1305 es otro cifrado AEAD que proporciona una seguridad similar a AES-GCM. Es especialmente útil en dispositivos sin aceleración AES por hardware (AES-NI), como CPUs antiguas y muchos dispositivos basados en ARM, donde puede ser significativamente más rápido que AES.

El script admite los siguientes cifrados:

- `AES-128-GCM`
- `AES-192-GCM`
- `AES-256-GCM`
- `AES-128-CBC`
- `AES-192-CBC`
- `AES-256-CBC`
- `CHACHA20-POLY1305` (requiere OpenVPN 2.5+)

Y usa `AES-128-GCM` por defecto.

OpenVPN 2.4 añadió una función llamada "NCP": _Negotiable Crypto Parameters_. Significa que puedes proporcionar un conjunto de cifrados como con HTTPS. Está configurado en `AES-256-GCM:AES-128-GCM` por defecto y anula el parámetro `--cipher` cuando se usa con un cliente OpenVPN 2.4. Por simplicidad, el script establece `--cipher` (respaldo para clientes sin NCP), `--data-ciphers` (nomenclatura moderna de OpenVPN 2.5+) y `--ncp-ciphers` (alias heredado para compatibilidad con OpenVPN 2.4) al cifrado elegido anteriormente.

### Canal de control

OpenVPN 2.4 negociará el mejor cifrado disponible por defecto (p. ej. ECDHE+AES-256-GCM)

#### Cifrados TLS 1.2 (`--tls-cipher`)

El script propone las siguientes opciones, dependiendo del certificado:

- ECDSA:
  - `TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256` (requiere OpenVPN 2.5+)
- RSA:
  - `TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256` (requiere OpenVPN 2.5+)

Por defecto usa `TLS-ECDHE-*-WITH-AES-128-GCM-SHA256`.

#### Cifrados TLS 1.3 (`--tls-ciphersuites`)

Cuando se negocia TLS 1.3, se utiliza un conjunto separado de suites de cifrado. Estas se configuran mediante `--tls-ciphersuites` y usan las convenciones de nomenclatura de OpenSSL:

- `TLS_AES_256_GCM_SHA384`
- `TLS_AES_128_GCM_SHA256`
- `TLS_CHACHA20_POLY1305_SHA256`

Por defecto, las tres suites de cifrado están habilitadas. Las suites de cifrado TLS 1.3 son más simples porque no incluyen el algoritmo de intercambio de claves (que se negocia por separado mediante key shares).

### Intercambio de claves

OpenVPN usaba históricamente parámetros DH de 2048 bits para el intercambio de claves. Este script solía ofrecer tanto DH (con tamaños de clave configurables) como ECDH como alternativas.

OpenVPN 2.4 añadió soporte para ECDH, y OpenVPN 2.7 hizo de `dh none` (ECDH) el valor predeterminado, ya que el DH de campo finito está en desuso. Dado que ECDH ahora es universalmente compatible y preferido, este script ya no ofrece DH tradicional.

El script configura `tls-groups` con la siguiente lista de preferencia:```
X25519:prime256v1:secp384r1:secp521r1
  • X25519: Curva rápida y moderna (Curve25519), ampliamente compatible
  • prime256v1: NIST P-256, la más compatible
  • secp384r1: NIST P-384, mayor seguridad
  • secp521r1: NIST P-521, la máxima seguridad

Puedes personalizar esto con --tls-groups.

Algoritmo de resumen HMAC

De la wiki de OpenVPN, acerca de --auth:

Autentica los paquetes del canal de datos y (si está habilitado) los paquetes del canal de control de tls-auth con HMAC utilizando el algoritmo de resumen de mensaje alg. (El valor predeterminado es SHA1). HMAC es un algoritmo de autenticación de mensajes (MAC) de uso común que utiliza una cadena de datos, un algoritmo hash seguro y una clave para producir una firma digital.

Si se elige un modo de cifrado AEAD (p. ej., GCM), el algoritmo --auth especificado se ignora para el canal de datos, y se utiliza en su lugar el método de autenticación del cifrado AEAD. Ten en cuenta que alg sigue especificando el resumen utilizado para tls-auth.

El script ofrece las siguientes opciones:

  • SHA256
  • SHA384
  • SHA512

Por defecto usa SHA256.

tls-auth, tls-crypt y tls-crypt-v2

De la wiki de OpenVPN, acerca de tls-auth:

Añade una capa adicional de autenticación HMAC sobre el canal de control TLS para mitigar los ataques DoS y los ataques a la pila TLS.

En resumen, --tls-auth habilita una especie de "cortafuegos HMAC" en el puerto TCP/UDP de OpenVPN, donde los paquetes del canal de control TLS con una firma HMAC incorrecta pueden descartarse inmediatamente sin respuesta.

Acerca de tls-crypt:

Cifra y autentica todos los paquetes del canal de control con la clave de keyfile. (Consulta --tls-auth para más información.)

Cifrar (y autenticar) los paquetes del canal de control:

  • proporciona más privacidad al ocultar el certificado utilizado para la conexión TLS,
  • hace más difícil identificar el tráfico de OpenVPN como tal,
  • proporciona una seguridad post-cuántica "de pobres", contra atacantes que nunca conocerán la clave precompartida (es decir, sin secreto hacia adelante).

Por lo tanto, ambos proporcionan una capa adicional de seguridad y mitigan los ataques DoS. OpenVPN no los usa por defecto.

tls-crypt es una funcionalidad de OpenVPN 2.4 que proporciona cifrado además de autenticación (a diferencia de tls-auth). Es más respetuoso con la privacidad.

tls-crypt-v2 es una funcionalidad de OpenVPN 2.5 que se basa en tls-crypt mediante el uso de claves por cliente en lugar de una clave compartida. Cada cliente recibe una clave única derivada de una clave de servidor. Esto proporciona:

  • Mejor seguridad: Si una clave de cliente se ve comprometida, los demás clientes no se ven afectados
  • Gestión de claves más sencilla: Las claves de los clientes pueden revocarse individualmente sin regenerar la clave del servidor
  • Escalabilidad: Más adecuado para despliegues grandes con muchos clientes

El script admite las tres opciones:

  • tls-crypt-v2 (predeterminado): Claves por cliente para una mejor seguridad
  • tls-crypt: Clave compartida para todos los clientes, compatible con OpenVPN 2.4+
  • tls-auth: Solo autenticación HMAC (sin cifrado), compatible con clientes más antiguos

Verificación del tipo de certificado (remote-cert-tls)

El servidor está configurado con remote-cert-tls client, lo que requiere que los pares que se conectan tengan un certificado con el uso de clave extendida "TLS Web Client Authentication". Esto evita que un certificado de servidor se utilice para suplantar a un cliente.

Del mismo modo, los clientes se configuran con remote-cert-tls server para asegurarse de que solo se conectan a servidores que presentan certificados de servidor válidos. Esto protege contra un atacante con un certificado de cliente válido que configure un servidor fraudulento.

Data Channel Offload (DCO)

Data Channel Offload (DCO) es una funcionalidad de aceleración del kernel que mejora significativamente el rendimiento de OpenVPN al mantener el cifrado/descifrado del canal de datos en el espacio del kernel, eliminando los costosos cambios de contexto entre el espacio de usuario y el kernel para cada paquete.

DCO se integró en el kernel de Linux 6.16 (abril de 2025).

Requisitos:

  • OpenVPN 2.6.0 o posterior
  • Kernel de Linux 6.16+ (integrado) o módulo del kernel ovpn-dco
  • Protocolo UDP (TCP no es compatible)
  • Cifrado AEAD (AES-128-GCM, AES-256-GCM o CHACHA20-POLY1305)

La configuración predeterminada del script (AES-128-GCM, UDP) es compatible con DCO. Cuando DCO está disponible y la configuración es compatible, OpenVPN lo usará automáticamente para mejorar el rendimiento.

Nota: DCO debe ser compatible tanto en el servidor como en el cliente para una aceleración completa. El soporte para clientes está disponible en OpenVPN 2.6+ (Linux, Windows, FreeBSD) y OpenVPN Connect 3.4+ (Windows). macOS actualmente no admite DCO, pero los clientes aún pueden conectarse a servidores con DCO habilitado, con beneficios parciales de rendimiento en el lado del servidor.

El script mostrará el estado de disponibilidad de DCO durante la instalación.

Da las gracias

Puedes dar las gracias si quieres.

Créditos y Licencia

Muchas gracias a los contribuyentes y al trabajo original de Nyr.

Este proyecto está bajo la Licencia MIT

Historial de estrellas

Star History Chart

Descargar herramienta