--- title: OpenVPN - Guía de instalación description: Guía de instalación utilizada durante la realización de la práctica published: true date: 2022-05-31T23:30:08.097Z tags: vpn, servidor editor: markdown dateCreated: 2022-05-31T21:04:15.280Z --- # Panel Títulos (⌘1) ```bash unimatrix -f -n -s 96 -w && clear && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && perl -pe "system 'sleep .06'" openvpn.txt && echo "" && echo "" && echo "" && sleep 10 && clear ``` ```bash clear && cowsay -W 220 -f ovpn 'En esta práctica vamos a realizar una instalación de OpenVPN con un PKI compuesto de una CA y una SubCA. El esquema propuesto será este:' ``` ```bash unimatrix -f -n -s 96 -w && clear && perl -pe "system 'sleep .06'" ovpn-scheme.txt && echo "" && echo "" && echo "" && sleep 10 && clear ``` ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 130 -f ansi-shadow 'Instalacion de ' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'EasyRSA' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel CA (⌘2), Luego Panel Signer (⌘3), luego Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Para comenzar con la instalación de "OpenVPN" será necesario realizar la instalación de EasyRSA, para ello se descargará la última versión de esta aplicación en nuestro CA y nuestro signer, y luego simplemente habrá que descomprimirlo' ``` ```bash wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.0/EasyRSA-3.1.0.tgz ``` ```bash cd ~ tar xvf EasyRSA-3.1.0.tgz mv EasyRSA-3.1.0 EasyRSA cd EasyRSA ``` ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 130 -f ansi-shadow 'Configuracion' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 240 -f ansi-shadow 'de EasyRSA' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` ```bash clear && cowsay -W 76 -f ovpn 'Creamos nuestro fichero de propiedades `vars`' ``` ```bash nano vars # o vim vars ``` ```bash set_var EASYRSA_REQ_COUNTRY "ES" set_var EASYRSA_REQ_PROVINCE "Valladolid" set_var EASYRSA_REQ_CITY "Valladolid" set_var EASYRSA_REQ_ORG "Bastionado" set_var EASYRSA_REQ_EMAIL "admin@bastionado.es" set_var EASYRSA_REQ_OU "Community" set_var EASYRSA_CA_EXPIRE 7090 # La CA durará 20 años set_var EASYRSA_CERT_EXPIRE 180 # Los certificados cliente caducan cada 6 meses set_var EASYRSA_CRL_DAYS 90 # La lista de revocaciones se actualiza aproximadamente cada 3 meses set_var EASYRSA_CERT_RENEW 20 # Los certificados se pueden renovar con 20 días de antelación ``` ```bash clear && cowsay -W 76 -f ovpn 'Se hará uso de criptografía de curva elíptica para el cifrado, concretamente una Curva Edwards' ``` ```bash set_var EASYRSA_ALGO ed ``` ```bash clear && cowsay -W 76 -f ovpn 'La especificación de curva elíptica usada será Curva 25519, definida como una curva segura según SafeCurves' ``` ```bash set_var EASYRSA_CURVE ed25519 ``` ```bash clear && cowsay -W 220 -f ovpn 'Repetiremos este proceso en Signer y Ovpn' ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 140 -f ansi-shadow 'Creacion de CA' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel CA (⌘2) ```bash clear && cowsay -W 76 -f ovpn 'Para poder realizar la creación de la CA será necesario inicialzar nuestra Infreaestructura de Clave Pública en la propia CA. Se informará de que el fichero vars, anteriormente modificado se ha movido a la PKI, por lo que se borra el inicial, y finalemnte creamos nuestra CA' ``` ```bash ./easyrsa init-pki mv vars pki/vars ./easyrsa build-ca # Podríamos añadir 'nopass' para no establecer una Passphrase ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 150 -f ansi-shadow 'Creacion de SubCA ' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 240 -f ansi-shadow 'en Signer' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel Signer (⌘3) ```bash clear && cowsay -W 76 -f ovpn 'Primero se inicializa la infraestructura de Clave Pública en el SubCA, y como anteriormente, se informa que el fichero var ha sido movido a la PKI, por lo que se elimina. Se genera una solicitud de nuestra SubCA y se envía a la CA para que sea validada' ``` ```bash ./easyrsa init-pki mv vars pki/vars ./easyrsa build-ca subca scp ~/EasyRSA/pki/reqs/ca.req ca@ca.bastionado.es:/tmp ``` # Panel CA (⌘2) ```bash clear && cowsay -W 76 -f ovpn 'Nos situamos sobre la CA e importamos y firmamos la solicitud, después devolvemos el certificado encadenado de la CA con la SubCA válido a nuestra SubCA, y se regresa a la SubCA y se mueve el certificado a la ruta del puesto PKI' ``` ```bash ./easyrsa import-req /tmp/ca.req signer ./easyrsa sign-req ca signer cat pki/issued/signer.crt \ pki/ca.crt \ > /tmp/signer.crt scp /tmp/signer.crt signer@signer.bastionado.es:/tmp rm -rf /tmp/signer.crt ``` # Panel Signer (⌘3) ```bash mv /tmp/signer.crt ~/EasyRSA/pki/ca.crt ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 170 -f ansi-shadow 'Creacion de Certificado ' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'en oPVN' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Primero inicializamos nuestra infraestructura de Clave Pública en oVPN, como se informa que el fichero vars se ha movido a la PKI, se procede a mover el fichero personalizado, luego generamos la solicitud de nuesta VPN, y enviamos la solicitud de nuestra VPN a la SubCA para validarla' ``` ```bash ./easyrsa init-pki mv vars pki/vars ./easyrsa gen-req ovpn nopass # Aquí no establecemos Passphrase scp ~/EasyRSA/pki/reqs/ovpn.req signer@signer.bastionado.es:/tmp ``` # Panel Signer (⌘3) ```bash clear && cowsay -W 76 -f ovpn 'Nos situamos sobre la SubCA e importamos y firmamos la solicitud, y devolvemos el certificado válido a nuestro oVPN junto con el certificado de la SubCA' ``` ```bash ./easyrsa import-req /tmp/ovpn.req ovpn ./easyrsa sign-req server ovpn scp pki/ca.crt ovpn@ovpn.bastionado.es:/tmp scp pki/issued/ovpn.crt ovpn@ovpn.bastionado.es:/tmp ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 170 -f ansi-shadow 'INSTALACION DE' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'OPEN VPN' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Comenzamos actualizando nuestro repositorio apt para después realizar la instalación de unas dependencias previas' ``` ```bash sudo apt update sudo apt -y install ca-certificates wget net-tools gnupg ``` ```bash clear && cowsay -W 76 -f ovpn 'Vamos a utilizar el repositorio mantenido por OpenVPN para instalar una versión más actualizada del mismo, por lo que, en primer lugar, debemos añadir las claves GPG creando un Keyring ya que `APT Key` está obsoleto.' ``` ```bash wget -qO- https://swupdate.openvpn.net/repos/repo-public.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/openvpn-archive-keyring.gpg > /dev/null ``` ```bash clear && cowsay -W 76 -f ovpn 'Añadimos el repositorio de OpenVPN apuntando el firmado al Keyring que acabos de crear.' ``` ```bash echo "deb [signed-by=/usr/share/keyrings/openvpn-archive-keyring.gpg] http://build.openvpn.net/debian/openvpn/stable bullseye main" | sudo tee /etc/apt/sources.list.d/openvpn-repo.list > /dev/null ``` ```bash clear && cowsay -W 76 -f ovpn 'Turno de volver a actualizar el lista de repositorios y ya se puede proceder a la instalación de OpenVPN.' ``` ```bash sudo apt update sudo apt -y install openvpn ``` ```bash clear && cowsay -W 76 -f ovpn 'Es el momento de recuperar los certificados que dejamos en /tmp y la clave privada.' ``` ```bash sudo cp ~/EasyRSA/pki/private/ovpn.key /etc/openvpn/ sudo cp /tmp/ovpn.crt ~/EasyRSA/pki/ovpn.crt sudo mv /tmp/{ovpn.crt,ca.crt} /etc/openvpn/ ``` ```bash clear && cowsay -W 76 -f ovpn 'Ahora volvemos a la ruta de EasyRSA para generar la clave Diffie-Hellman. Se trata de un algoritmo que permite crear una clave secreta entre dos equipos que nunca han tenido contacto previo, a través de un canal inseguro, y mediante el envío de solo dos mensajes. Aunque es algo lento, generaremos una clave de 4096 bits.' ``` ```bash cd ~/EasyRSA/ ./easyrsa --keysize=4096 gen-dh ``` ```bash clear && cowsay -W 76 -f ovpn 'En el modo de clave estática, se genera una clave precompartida que se comparte entre ambos pares de OpenVPN antes de iniciar el túnel. Esta clave estática contiene 4 claves independientes: HMAC de envío, HMAC de recepción, cifrado y descifrado. Por defecto, en el modo de clave estática, ambos hosts utilizarán la misma clave HMAC y la misma clave de cifrado/descifrado. Sin embargo, utilizando el parámetro `--secret`, es posible utilizar las 4 claves de forma independiente.' ``` ```bash sudo openvpn --genkey secret ta.key ``` ```bash clear && cowsay -W 76 -f ovpn 'Ya podemos mover las claves generadas a la instalación de OpenVPN.' ``` ```bash sudo mv ~/EasyRSA/ta.key /etc/openvpn/ sudo mv ~/EasyRSA/pki/dh.pem /etc/openvpn/ ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 170 -f ansi-shadow 'CERTIFICADOS DE' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'CLIENTE' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Con la estructura propuesta las solicitudes de certificados cliente serán generadas desde el servidor de OpenVPN `oVPN` y firmadas desde la SubCA `Signer`, de tal modo que, posteriormente, el cliente simplemente recibirá un fichero de configuración para conectar a la VPN junto con sus certificados sin tener que estar intercambiando certificados inicialmente si fuera el propio cliente el que realizara la solicitud de creación de certificado.' ``` ```bash clear && cowsay -W 76 -f ovpn 'Crearemos un directorio en `oVPN` para almacenar las configuraciones de cliente y restringiremos los permisos' ``` ```bash mkdir -p ~/client-configs/keys chmod -R 700 ~/client-configs ``` ```bash clear && cowsay -W 76 -f ovpn 'Volvemos a la ruta EasyRSA para generar las solicitudes de certificado cliente. Crearemos múltiples solicitudes para distintos clientes. Después copiaremos las claves privadas a nuestra ruta de configuración de clientes.' ``` ```bash cd ~/EasyRSA/ ./easyrsa gen-req client1 nopass ./easyrsa gen-req client2 nopass ./easyrsa gen-req client3 nopass ./easyrsa gen-req client4 nopass cp pki/private/{client1.key,client2.key,client3.key,client4.key} ~/client-configs/keys/ ``` ```bash clear && cowsay -W 76 -f ovpn 'Enviamos las solicitudes de nuestra VPN a la SubCA para validarlas.' ``` ```bash scp ~/EasyRSA/pki/reqs/{client1.req,client2.req,client3.req,client4.req} signer@signer.bastionado.es:/tmp ``` # Panel Signer (⌘3) ```bash clear && cowsay -W 76 -f ovpn 'Nos situamos sobre `Signer` e importamos y firmamos las solicitudes, después devolveremos los certificacdos válidos a nuestra oVPN.' ``` ```bash ./easyrsa import-req /tmp/client1.req client1 ./easyrsa import-req /tmp/client2.req client2 ./easyrsa import-req /tmp/client3.req client3 ./easyrsa import-req /tmp/client4.req client4 ./easyrsa sign-req client client1 ./easyrsa sign-req client client2 ./easyrsa sign-req client client3 ./easyrsa sign-req client client4 scp pki/issued/{client1.crt,client2.crt,client3.crt,client4.crt} ovpn@ovpn.bastionado.es:/tmp ``` # Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Copiamos los certificados firmados a nuestra ruta de configuración de clientes. También copiaremos dos ficheros clave: `ca.crt` y ta.key`. En el fichero que tendrá el cliente para conectar a nuestra VPN estará la cadena de certificados (es decir, de claves públicas) de la autoridad de certificación ya que el proceso de autenticación es recíproco, los clientes también validan la identidad del servidor. Por otra parte, también incluimos la clave precompartida que se utilizará para la derivación de las claves simétricas y de autenticación.' ``` ```bash cp /tmp/{client1.crt,client2.crt,client3.crt,client4.crt} ~/client-configs/keys/ sudo cp /etc/openvpn/{ca.crt,ta.key} ~/client-configs/keys/ ``` # Panel Títulos (⌘1) ```bash clear && echo "" && echo "" && echo "" && echo && echo "" && echo "" && echo "" && echo "" && echo "" && echo "" && figlet -w 170 -f ansi-shadow 'CONFIGURACION DE' -c | lolcat && echo "" && echo "" && echo "" && figlet -w 220 -f ansi-shadow 'OPEN VPN' -c | lolcat -a -d 1 && echo "" && echo "" && echo "" && sleep 10 && clear ``` # Panel oVPN (⌘4) ```bash clear && cowsay -W 76 -f ovpn 'Una vez hemos finalizado completamente la infraestructura de Clave Pública es el momento de configurar el servicio OpenVPN.' ``` ```bash clear && cowsay -W 76 -f ovpn 'Crearemos un fichero de configuración desde cero para conocer detalladamente todas las características que utilizaremos.' ``` ```bash sudo nano /etc/openvpn/server.conf # sudo vim /etc/openvpn/server.conf ``` ```bash clear && cowsay -W 76 -f ovpn 'No utilizaremos el puerto estándar, 1194, para reducir la superficie de exposición. Por otra parte, utilizaremos el protocolo UDP para reducir los tiempos de latencia.' ``` ```bash port 6174 proto udp ``` ```bash clear && cowsay -W 76 -f ovpn 'Trabajaremos con una interfaz tipo `tun`. OpenVPN puede trabajar con interfaces tipo `tun` a nivel de red (Capa 3 OSI) y tipo `tap`, a nivel de enlace (Capa 2 OSI). Si utilizarámos una interfaz de tipo `tap` tendríamos acceso automáticamente a la subred completa del servidor, ya que la interfaz estaría actuando como un `switch`, pero también generaríamos grandes problemas de enrutamiento. Utilizando `tun` estaremos realizando un enlace punto a punto, por lo que, si queremos tener visibilidad de otras redes deberemos añadir otras opciones. Hablaremos más adelante de ellas.' ``` ```bash dev tun0 ``` ```bash clear && cowsay -W 76 -f ovpn 'Ahora apuntaremos a nuestros certificados que hemos generado anteriormente y establecemos la directiva Diffie-Hellman con nuestra clave generada anteriormente.' ``` ```bash ca ca.crt cert ovpn.crt key ovpn.key dh dh.pem ``` ```bash clear && cowsay -W 76 -f ovpn 'Establecemos la subred que se establecerá en las conexiones, teniendo en cuenta que el servidor tendrá automáticamente la primera IP de está subred, es decir, 10.10.10.1.' ``` ```bash server 10.10.10.0 255.255.255.0 ``` ```bash clear && cowsay -W 76 -f ovpn 'Establecemos un fichero de persistencia para que los clientes vuelvan a tener la misma asignación de IP en caso de una caída del servicio' ``` ```bash ifconfig-pool-persist /var/log/openvpn/ipp.txt ``` ```bash clear && cowsay -W 76 -f ovpn 'Como comentamos anteriormente, al utilizar `tun`, si queremos que los clientes puedan ver algo más que al servidor deberemos habilitar enrutamientos. Supongamos que oVPN se encuentra conectado a una sub red tipo `192.168.128.0/24` y queremos que los clientes tengan conectvidad. En este caso deberíamos añadir la siguiente directiva: `push "route 192.168.128.0 255.255.255.0"`. Además, si nuestro servidor VPN no es la puerta de enlace de esta subred deberemos añadir un enrutamiento en ésta para que redirija el tráfico de `10.10.10.0/24` hacia la IP de oVPN.' ``` ```bash clear && cowsay -W 76 -f ovpn 'En nuestro escenario no vamos a habilitar el enrutamiento de subredes, sin embargo forzaremos que todo el tráfico de los clientes sea redirigido por la VPN. `push` hace referencia a que la directiva se volcará sobre los clientes, `def1` Modifica la tabla de enrutamiento de los clientes para redirigir todo el tráfico hacia la intrerfaz VPN y `bypass-dhcp` Añade una ruta directa al servidor DHCP de OpenVPN.' ``` ```bash push "redirect-gateway def1 bypass-dhcp" ``` ```bash clear && cowsay -W 76 -f ovpn 'También podemos sobrescribir los servidores DNS de los clientes, estableciendo los que queramos.' ``` ```bash push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" ``` ```bash Establecemos una directiva para consultar que los clientes siguen conectados cada 10 segundos y se consideran desconectados si no responden en 2 minutros. ``` ```bash keepalive 10 120 ``` ```bash clear && cowsay -W 76 -f ovpn 'Ahora habilitaremos la directiva `tls-auth`. Como comentamos anteriormente, esta directiva 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 pocas palabras, --tls-auth habilita una especie de "cortafuegos HMAC" en el puerto TCP/UDP de OpenVPN, donde los paquetes del canal de control TLS que lleven una firma HMAC incorrecta pueden ser descartados inmediatamente sin respuesta.' ``` ```bash tls-auth ta.key 0 ``` ```bash clear && cowsay -W 76 -f ovpn 'La directiva `cipher` cifra los paquetes del canal de datos con el algoritmo de cifrado escogido, en este caso `AES-256-CBC`, un modelo de cifrado por bloques de bloques de 256 bits. En todo caso, éste es el nivel de cifrado mínimo exigido por el servidor, si el cliente puede utilizar un esquema de cifrado más potente y moderno (por ejemplo AES-256-GCM, más rápido) éste cambiará de forma dinámica.' ``` ```bash cipher AES-256-CBC ``` ```bash clear && cowsay -W 76 -f ovpn 'La directiva `auth` nos permitirá autenticar los datos encriptados enviados y recibidos respectivamente. Utilizaremos un `Hash` seguro para este menester como `SHA512`.' ``` ```bash auth SHA512 ``` ```bash clear && cowsay -W 76 -f ovpn 'Haremos que el servicio OpenVPN realice una desescalada de privilegios ejecutándose con el usuario `nobody` y grupo `nogroup` tras iniciarse.' ``` ```bash user nobody group nogroup ``` ```bash clear && cowsay -W 76 -f ovpn 'Estas opciones de persistencia tratarán de evitar el acceso a ciertos recursos en el reinicio que puedan dejar de ser accesibles debido a una reducción de privilegios' ``` ```bash persist-key persist-tun ``` ```bash clear && cowsay -W 76 -f ovpn 'Escribimos el estado (un resumen de las conexiones) cada minuto en un fichero y también escribimos un fichero de registro que se mantendrá entre sesiones.' ``` ```bash status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log ``` ```bash clear && cowsay -W 76 -f ovpn 'También establecemos el nivel de detalle que va desde 0 (nada) a 9 (ultra detallado), utilizando un valor propicio para producción.' ``` ```bash verb 3 ``` ```bash clear && cowsay -W 76 -f ovpn 'Para finalizar nuestro fichero de configuraciób informamos a los clientes ante un reinicio del servidor para que puedan reconectar posteriormente.' ``` ```bash explicit-exit-notify 1 ``` -'Directivas adicionales' clear && cowsay -W 76 -f ovpn 'Se habilita la redirección de tráfico' sudo nano /etc/sysctl.conf # sudo vim /etc/sysctl.conf net.ipv4.ip_forward=1 # Descomentar esta línea sudo sysctl -w net.ipv4.ip_forward=1 -'Puesta en funcionamiento del servicio' clear && cowsay -W 76 -f ovpn 'Arrancar y comprobar el estado del servicio OpenVPN, comprobar la existencia de la interfaz virtual de OpenVPN y habilitar el arranque automático de OpenVPN' sudo systemctl restart openvpn@server && sudo systemctl status openvpn@server ip addr show tun0 sudo systemctl enable openvpn@server "Configuración para el cliente" -'Plantilla de cliente' clear && cowsay -W 76 -f ovpn 'Ahora que ya tenemos nuestra VPN funcionando es el momento de generar la configuración que los clientes importarán para poder conectar a nuestra VPN.' clear && cowsay -W 76 -f ovpn 'Se comienza creando en nuestro directorio de configuración de clientes un directorio donde almacenar la configuración individual, se copian las plantillas de configuración de cliente por defecto y se procede a editar' mkdir -p ~/client-configs/files nano ~/client-configs/base.conf # vim ~/client-configs/base.conf clear && cowsay -W 76 -f ovpn 'Especificamos que estamos ante un fichero cliente, se configura el modo de interfaz igual que en el servidor, se hace lo mismo con el protocolo, y establecemos la IP y el puerto de nuestro servidor VPN' client dev tun proto udp remote ovpn.bastionado.es 6174 clear && cowsay -W 76 -f ovpn 'Intentamos que el intento de resolución de nombre del servidor VPN sea infinita, útil para equipos que están permanentemente conectados a internet, y con la siguiente regla se hará que el puerto local de salida sea dinámico' resolv-retry infinite nobind user nobody group nogroup clear && cowsay -W 76 -f ovpn 'Se realiza un descenso de privilegios después de inicializar en sistemas que no son de Windows, se intenta persisistir los siguientes valores entre reinicios, realizamos la verificación del servidor y sus usos extendidos, en los que establecemos las mismas directivas cipher y auth que establecimos en el servidor, y establecemos el nivel de detalle que va desde 0 (nada) a 9 (ultra detallado) y se establece la directiva key-direction' user nobody group nogroup persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA512 verb 3 key-direction 1 -'Script de configuración de clientes' +'Generaremos un script que se encargará de crear un fichero incrustado con la configuración de conexión plantilla y los certificados apropiados para cada cliente'