En este artículo se explica como realizar la instalación desatendida de FortiClient VPN junto a un perfil VPN para que el usuario final ya lo tenga todo configurado.

Descarga del instalador

Para realizar este tipo de instalación es necesario obtener el instalador completo (ya sea en formato *.exe o, mucho mejor aún, en formato *.msi):

Este fichero descargado es realmente un stub que se conecta a los servidores de Fortinet para descargar la imagen del verdadero instalador:

  • Ejecutar FortiClientVPNOnlineInstaller.exe
  • Esperar a que aparezca la pantalla del asistente Welcome to the FortiClient VPN Setup Wizard
  • Sin cerrar esta ventana ni avanzar en la instalación, acceder a la carpeta %TEMP% donde se encontrará:
    • El fichero FortiClientVPN.exe
    • Un directorio con un GUID aleatorio (p.ej. {32123CA3-C24D-4A99-9347-70049B8E4C23}) y dentro el fichero FortiClientVPN.msi
  • Copiar estos dos ficheros al directorio temporal
  • Cerrar el asistente de instalación

El contenido del directorio temporal será similar al siguiente:

09/28/2022  10:26 PM       130,755,136 FortiClientVPN.exe
09/28/2022  10:26 PM       116,649,984 FortiClientVPN.msi
09/23/2022  05:15 PM         3,217,072 FortiClientVPNOnlineInstaller.exe

Instalación mediante EXE

A continuación se podría crear un script que instalase el cliente de forma desatendida mediante alguno de los siguientes comandos:

# Instalación completamente silenciosa, sin interacción del usuario
FortiClientVPN.exe /quiet /norestart /log "C:\Logs\FortiClient.log"

# Instalación desatendida, con una barra de progreso
FortiClientVPN.exe /passive /norestart /log "C:\Logs\FortiClient.log"

Ahora bien, este método requeriría realizar algunas acciones a posteriori para personalizar la instalación:

  • Borrar el acceso directo que se crea en el escritorio común (CommonDesktop = C:\Users\Public\Desktop)
  • Añadir el perfil VPN para que el usuario final ya lo tenga todo configurado

Perfil VPN

Para crear el perfil VPN durante la instalación desatendida hay que saber que, en el caso de FortiClient VPN, esta configuración se guarda en el registro de Windows.

Por tanto, hay que averiguar qué cambios se producen en el registro cuando se crea una configuración de forma manual y guardarlos en un fichero *.reg que se importará durante la instalación desatendida.

Un método bastante sencillo para conocer los cambios es el siguiente:

  • Exportar el registro de máquina: reg.exe export HKLM\SOFTWARE\Fortinet hklm1.reg
  • Exportar el registro de usuario: reg.exe export HKCU\SOFTWARE\Fortinet hkcu1.reg
  • Ejecutar el programa y realizar los cambios que se consideren oportunos, en este caso:
    • Aceptar el disclaimer acerca de utilizar una versión gratuita y sin soporte de FortiClient VPN
    • Configurar la conexión VPN que se necesite, por ejemplo:
      • VPN: SSL-VPN
      • Connection Name: VPN Custom
      • Description: VPN Custom
      • Remote Gateway: <FQDN> del servidor (p.ej. vpn.contoso.com)
      • Enable Single Sign On (SSO) for VPN Tunnel: Habilitar
  • Cerrar el programa
  • Exportar el registro de máquina: reg.exe export HKLM\SOFTWARE\Fortinet hklm2.reg
  • Exportar el registro de usuario: reg.exe export HKCU\SOFTWARE\Fortinet hkcu2.reg
  • Comparar cada pareja de ficheros (por ejemplo mediante WinMerge):
    • WinMergeU.exe hklm1.reg hklm2.reg
    • WinMergeU.exe hkcu1.reg hkcu2.reg

Al comparar estos ficheros se observa que se ha añadido la siguiente información en el registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"Description"="VPN Custom"
"Server"="vpn.contoso.com:443"
"DATA1"="EncLM 9de085fc4f ... (un total de 588 carácteres hexadecimales) ... a28ec1c13a"
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000
"DATA3"=""
"ServerCert"="1"
"sso_enabled"=dword:00000001
"use_external_browser"=dword:00000000
"azure_auto_login"=dword:00000000
[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\FA_UI]

[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\FA_UI\VPN-7.0.7.0345]
"installed"=dword:630f39a6

[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\Sslvpn]

[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels]

[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000
"DATA3"=""

Después de hacer algunas pruebas se consiguen los siguientes ficheros con el contenido mínimo indispensable para que un usuario tenga el perfil VPN ya configurado y pueda conectarse sin problemas:

  • Fichero FortiClient-Custom-HKLM.reg
Windows Registry Editor Version 5.00

; Conexión VPN Custom
[HKEY_LOCAL_MACHINE\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"Description"="VPN Custom"
"Server"="vpn.contoso.com:443"
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000
"ServerCert"="1"
"sso_enabled"=dword:00000001
"use_external_browser"=dword:00000000
"azure_auto_login"=dword:00000000
  • Fichero FortiClient-Custom-HKCU.reg
Windows Registry Editor Version 5.00

; Aceptar el Disclaimer sobre la versión gratuita
[HKEY_CURRENT_USER\software\fortinet\FortiClient\FA_UI\VPN-7.0.7.0345]
"installed"=dword:630f39a6

; Conexión VPN Custom
[HKEY_CURRENT_USER\software\fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000

Estos ficheros se deberían instalar para todos los perfiles de usuario existentes y futuros del ordenador. Esto se puede conseguir usando el script WriteToHKCUFromSystem.ps1 que se encarga de introducir la información en cada uno de los SID en HKEY_USERS\$sid y en C:\Users\Default\NTUSER.DAT (el registro del usuario por defecto).

Transformación del MSI

Aunque el método anterior permite instalar FortiClient VPN de forma desatendida y con un perfil personalizado, se puede simplificar la instalación transformando el *.msi.

Aquellos que lleven mucho tiempo administrando Windows recordarán que el método tradicional para generar un fichero *.mst era utilizar el editor ORCA que, aunque aún sigue siendo válido, tiene una interfaz poco amigable.

Por este motivo, se utilizará la versión Community de Master Packager que es gratuita y permite realizar las operaciones más comunes con los ficheros *.msi y *.mst.

  • Descargar e instalar Master Packager
  • Ejecutar MasterPackager.exe
  • Seleccionar la opción Response Transform y seleccionar el fichero FortiClientVPN.msi
    • Asistente Welcome to the FortiClient VPN Setup Wizard
      • Marcar la casilla para aceptar el License Agreement
      • Pulsar sobre el botón Next
      • Pulsar sobre el botón Install
      • Pulsar sobre el botón Finish
    • Se crea el fichero de transformación FortiClientVPN.mst
  • Seleccionar ViewAdvanced Editor - Overview
  • Ir a la sección Property y pulsar sobre el lapiz para editar
    • Buscar la propiedad DESKTOPSHORTCUT y cambiar el valor a 0 (evita la creación de accesos directos en el escritorio)
  • Ir a la sección Custom Actions y pulsar sobre el lapiz para editar
    • Seleccionar Predefined Actions
    • Agregar una nueva acción predefinida pulsando sobre [+]
      • Seleccionar Apply HKCU registries to all users
        • Explorar y seleccionar el fichero FortiClient-Custom-HKCU.reg
  • Ir a la sección Registries
    • Seleccionar la rama HKEY_LOCAL_MACHINE
    • Seleccionar la opción Import Registry con el botón derecho
      • Explorar y seleccionar el fichero FortiClient-Custom-HKLM.reg
      • Comprobar que se han añadido las claves en HKEY_LOCAL_MACHINE\Software\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom
  • Grabar el fichero de transformación mediante FileSave
  • Salir del programa y renombrar el fichero de transformación a FortiClientVPN-Custom.mst

Update: si se deja el fichero *.mst así, las claves de registro que se han añadido en HKLM se crearán bajo HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node. Hay que forzar el componente añadido para que sea de 64-bits de la siguiente manera:

  • Seleccionar ViewTable Editor
  • Ir a la tabla Registry
  • Buscar el nombre del componente que se ha creado al añadir las claves de registro (p.ej HKLM_C)
  • Ir a la tabla Component y buscar el componente anterior
  • Modificar los atributos: 4260

Instalación mediante MSI

A continuación se podría crear un script que instalase el cliente de forma desatendida mediante alguno de los siguientes comandos:

# Instalación completamente silenciosa, sin interacción del usuario
msiexec.exe /i FortiClientVPN.msi TRANSFORMS=FortiClientVPN-Custom.mst REBOOT=ReallySuppress /quiet

# Instalación desatendida, con una barra de progreso
msiexec.exe /i FortiClientVPN.msi TRANSFORMS=FortiClientVPN-Custom.mst REBOOT=ReallySuppress /passive

Depuración de MSI

Se puede activar la depuración de MSI para forzar la creación de un fichero de registro en la carpeta %TEMP%:

  • Para ver si el instalador EXE inició una instalación de MSI
  • Para comprobar si hay errores
  • Para comprobar las propiedades modificadas durante la instalación de MSI
  • Para omitir agregar el interruptor /l*v a todas las instalaciones de MSI
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] 
"Logging"="voicewarmupx"