En este tutorial presentamos algunas de las opciones de configuración avanzada de OpenVPN que pueden pasarse como parámetros desde Vyatta al módulo OpenVPN mediante el comando “openvpn-option“.
Vyatta integra comandos en su CLI que directamente actúan en la configuración del módulo OpenVPN, pero la lista de opciones de configuración de OpenVPN es realmente extensa y como es de esperar no se han incluido todas las opciones de configuración de OpenVPN en el CLI de Vyatta. Aunque algunas de ellas son de gran utilidad, por lo que expondré las que a mi juicio o según mis necesidades bajo demanda me han sido más útiles.

En primer lugar conviene leer la guía de referencia de VPN de Vyatta, concretamente el capitulo 4 es el dedicado al módulo OpenVPN, que podemos descargar de la pagina de documentación de Vyatta. Al menos seria interesante ver las lista de comandos disponibles aunque un repaso a nuestro manual de configuración de OpenVPN en Vyatta también nos dará una amplia idea ya que se usan la mayoría de los comandos de OpenVPN disponibles en el CLI de Vyatta.

Las opciones que vayamos a pasar al módulo OpenVPN mediante el comando “openvpn-option” de Vyatta hay que pasarlas entre comillas y dejando espacios entre ellas, no hay limite de opciones a pasar al módulo OpenVPN pero si es conveniente que las vayamos añadiendo de forma incremental poco a poco una vez vayamos viendo su efecto.
Vamos ahora con la lista de algunas opciones avanzadas de configuración del módulo OpenVPN y su interpretación:

–comp-lzo

Usar compresión fast LZO, lo que agiliza la conexión disminuyendo el consumo de ancho de banda.

–dev-type tun

Tipo de interfaz virtual a usar en la conexión de la VPN, puede ser “tun” o “tap”
Hay que configurar el mismo tipo de dispositivo en ambos extremos del túnel.
“tun” usa encapsulación de capa 3 IPv4 o IPv6
“tap” usa encapsulación de capa 2 Ethernet 802.3
La opción por defecto es “tun” así que por lo general no es necesario ni incluir ni modificar este parámetro.

–plugin modulo-o-ruta [cadena-de-inicio]

Carga el plugin del módulo especificado pasándole la “cadena-de-inicio” como argumento al módulo.
Esta opción es para incluir la activación de plugins cuando se produzca el intento de conexión de VPN, se pueden cargar varios plugins a la vez y se pueden ejecutar scripts mediante ellos.
Un uso muy interesante es la de forzar la autenticación en el sistema local mediante el módulo PAM usando el plugin “/usr/lib/openvpn/openvpn-auth-pam.so” y pasándole el parámetro “openvpn” tal y como explicamos en esta entrada.

–push option

Nos permite ejecutar ordenes de configuración en el cliente, por seguridad no se permite la ejecución de scripts que podrían introducir código malicioso en el cliente, tampoco valores de MTU ni TLS.
En la parte “option” se pueden usar las siguientes opciones, entre otras:
–route, –route-gateway, –route-delay, –redirect-gateway, –ip-win32, –dhcp-option, –inactive, –ping, –ping-exit, –ping-restart, –setenv, –persist-key, –persist-tun, –echo, –comp-lzo, –socket-flags, –sndbuf, –rcvbuf
Una de las más interesantes puede ser la opción “route”, lo que hace es generar rutas en el cliente direccionándolas por nuestra máquina Vyatta.

–remote-cert-tls client/server

Con esta opción se requiere que el certificado del extremo opuesto este firmado con una clave explicita y con clave extendida basada en las reglas TLS de RFC 3280.
Esta es una opción de seguridad muy interesante para los clientes, para poder asegurarse de que el host al que conectan es un servidor designado, lo que previene de ataques man-in-the-middle.
Personalmente uso “–remote-cert-tls client” en los servidores y “remote-cert-tls server” en los clientes.

–script-security level [method]

Esta directiva permite un control de políticas sobre el uso de OpenVPN de programas y scripts externos. Los valores más bajos son más restrictivos.
Los posibles valores del parámetro level son:

0 — No se permite llamada a programas externos desde OpenVPN.
1 — (Opción por defecto) Solo permite llamada a ejecutables de sistema como ipconfig, ip, route, o netsh.
2 — Permite llamada a ejecutables de sistema y a script definidos por el usuario.
3 — Permite pasar passwords a los scripts vía variables de entorno (potencialmente inseguro).

El parámetro method indica como OpenVPN debe llamar a comandos y scripts externos. Posibles configuraciones:

execve — (Por defecto) Usa la función execve() en la SSOO Unix y la función CreateProcess() en Windows.
system — Usa la función system() (obsoleta y menos segura ya que la linea de comandos del programa externo se somete a expansión de consola).

–explicit-exit-notify [n]

En modo cliente UDP o en modo punto a punto, se envía al servidor la notificación de cierre de túnel si este se reinicia o se cierra por completo.
En modo cliente esta opción indica al servidor que debe cerrar inmediatamente la conexión en vez de esperar un timeout.
El parámetro “n” (por defecto 1) controla el numero máximo de reenvíos que el cliente hará del mensaje de notificación de salida.
OpenVPN no enviara notificación alguna a menos que esta opción este habilitada.
Personalmente la uso siempre.

–persist-tun –persist-key –persist-local-ip –persist-remote-ip

Normalmente las uso todas juntas para conexiones VPN STS que siempre mantengo activas, de esta forma, ante caída o corte, ambos extremos no tienen que volver a negociar claves, ips, ni cerrar y levantar interfaces tun.

–reneg-sec [n]

Renegociar la clave de canal de datos tras “n” segundos (por defecto 3600)
Esta opcion puede configurarse tanto en el cliente como en el servidor y cualquiera de los dos que use el valor menor sera el que genere la renegociación.
Para entornos con numerosas VPNs levantadas y que normalmente estén activas puede resultar en una generación innecesaria de trafico y puede ser interesante aumentar la renegociación a más tiempo de solo una hora.
Si se va a modificar este parámetro hay que tener la precaución de hacerlo igual en ambos extremos o poner a 0 (deshabilitada) uno de ellos para que sea el otro el que mande.