Skip to content

Commit

Permalink
FortiClient MST
Browse files Browse the repository at this point in the history
  • Loading branch information
manelrodero committed Oct 7, 2024
1 parent ed53b54 commit 2fa1485
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 34 deletions.
97 changes: 63 additions & 34 deletions _posts/2022-09-28-instalacion-desatendida-de-forticlient-vpn.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ layout : post
blog-width: true
title: 'Instalación desatendida de FortiClient VPN'
date: '2022-09-28 21:53:46'
last-updated: '2024-10-07 08:48:50'
published: true
tags:
- Software
author:
display_name: Manel Rodero
cover-img: "/assets/img/blog/2024-10-07_cover.png"
thumbnail-img: ""
---

En este artículo se explica como realizar la instalación desatendida de [FortiClient VPN](https://docs.fortinet.com/product/forticlient/7.0) junto a un perfil VPN para que el usuario final ya lo tenga todo configurado.
Expand All @@ -23,20 +26,30 @@ Para realizar este tipo de instalación es necesario obtener el **instalador com

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`
* Ejecutar el instalador `FortiClientVPNOnlineInstaller.exe` desde el dirctorio temporal

{: .box-note}
En el fichero `FCTInstall.log` de la carpeta `%TEMP%` se registran las direcciones IP de los servidores de Fortinet desde donde se descarga la última imagen del instalador, la versión del mismo y la ubicación del ejecutable `FortiClientVPN.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`
* Sin cerrar esta ventana ni avanzar en la instalación:
* Acceder a la carpeta `%TEMP%`
* Copiar el fichero `FortiClientVPN.exe` al directorio temporal
* Acceder a la carpeta `C:\ProgramData\Applications\Cache\{0DC51760-4FB7-41F3-8967-D3DEC9D320EB}\7.4.0.1658`
* Copiar el fichero `FortiClient.msi` al directorio temporal

{: .box-note}
El directorio `{0DC51760-4FB7-41F3-8967-D3DEC9D320EB}\7.4.0.1658` se construye mediante un GUID aleatorio y la versión de FortiClient que se está instalando.

* 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
10/07/2024 08:51 AM 163,995,648 FortiClient.msi
10/07/2024 08:51 AM 176,739,392 FortiClientVPN.exe
10/07/2024 08:49 AM 2,794,560 FortiClientVPNOnlineInstaller.exe
```

## Instalación mediante EXE
Expand Down Expand Up @@ -74,53 +87,65 @@ Un método bastante sencillo para conocer los cambios es el siguiente:
* Description: `VPN Custom`
* Remote Gateway: `<FQDN>` del servidor (p.ej. `vpn.contoso.com`)
* Enable Single Sign On (SSO) for VPN Tunnel: `Habilitar`
* Grabar la conexión
* 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](https://winmerge.org/)):
* `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:
Al comparar estos ficheros se observa que se ha añadido la siguiente información en el registro de máquina `HKLM`:

```
[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"
"DATA1"="EncLM 4a019620d4 ... (un total de 588 carácteres hexadecimales) ... 1bd18b3803"
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000
"DATA3"=""
"ServerCert"="1"
"dual_stack"=dword:00000000
"sso_enabled"=dword:00000001
"use_external_browser"=dword:00000000
"azure_auto_login"=dword:00000000
```

Y la siguiente información en el registro de usuario `HKCU`:

```
[HKEY_CURRENT_USER\SOFTWARE\Fortinet]
[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient]
"installed"=dword:00000001
[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\FA_UI\VPN-7.4.0.1658]
"installed"=dword:6659c336
[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]
[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN UPClink]
"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:
Después de hacer algunas pruebas, y observar que las claves `DATA1` y `DATA3` no son necesarias porque FortiClient las regenera, se generan 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`
* Fichero `FortiClient-VPNCustom-HKLM.reg`

```
Windows Registry Editor Version 5.00
; Conexión VPN Custom
; Borrar conexión VPN Custom existente
[-HKEY_LOCAL_MACHINE\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
; Crear conexión VPN Custom
[HKEY_LOCAL_MACHINE\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"Description"="VPN Custom"
"Server"="vpn.contoso.com:443"
Expand All @@ -132,16 +157,22 @@ Windows Registry Editor Version 5.00
"azure_auto_login"=dword:00000000
```

* Fichero `FortiClient-Custom-HKCU.reg`
* Fichero `FortiClient-VPNCustom-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
[HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient]
"installed"=dword:00000001
; Aceptar el Disclaimer sobre la versión gratuita (depende del número de versión)
[HKEY_CURRENT_USER\software\fortinet\FortiClient\FA_UI\VPN-7.4.0.1658]]
"installed"=dword:6659c336
; Conexión VPN Custom
; Borrar conexión VPN Custom existente
[-HKEY_CURRENT_USER\software\fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
; Crear conexión VPN Custom
[HKEY_CURRENT_USER\software\fortinet\FortiClient\Sslvpn\Tunnels\VPN Custom]
"promptusername"=dword:00000000
"promptcertificate"=dword:00000000
Expand All @@ -157,15 +188,15 @@ Aquellos que lleven mucho tiempo administrando Windows recordarán que el métod

Por este motivo, se utilizará la versión **Community** de [**Master Packager**](https://www.masterpackager.com/) que es gratuita y permite realizar las operaciones más comunes con los ficheros `*.msi` y `*.mst`.

* Descargar e instalar _Master Packager_
* Descargar e instalar _Master Packager_ 24.7.9021 o superior en una máquina limpia
* Ejecutar `MasterPackager.exe`
* Seleccionar la opción _Response Transform_ y seleccionar el fichero `FortiClientVPN.msi`
* Asistente _Welcome to the FortiClient VPN Setup Wizard_
* Seleccionar la opción _Response Transform_ y seleccionar el fichero `C:\FortiClientSetup\FortiClient.msi`
* Aparece el 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`
* Se crea el fichero de transformación `FortiClient.mst`
* Seleccionar _View_ &rarr; _Advanced 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)
Expand All @@ -178,28 +209,21 @@ Por este motivo, se utilizará la versión **Community** de [**Master Packager**
* 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`
* Escoger la opción **_Import as x64_**
* 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 _File_ &rarr; _Save_
* 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 _View_ &rarr; _Table 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](https://learn.microsoft.com/en-us/windows/win32/msi/component-table): `4` &rarr; `260`

# 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
msiexec.exe /i FortiClient.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
msiexec.exe /i FortiClient.msi TRANSFORMS=FortiClientVPN-Custom.mst REBOOT=ReallySuppress /passive
```

# Depuración de MSI
Expand All @@ -217,3 +241,8 @@ Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
"Logging"="voicewarmupx"
```

### Historial de cambios

* **2022-09-28**: Documento inicial (FortiClient 7.0.7.0345)
* **2024-10-07**: Revisión del documento (FortiClient 7.4.0.1658)
Binary file added assets/img/blog/2024-10-07_cover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 2fa1485

Please sign in to comment.