Bereitstellen des Unified Access Gateway auf Hyper-V

Letzte Aktualisierung am 12.10.2024, 09:10:22 Uhr

Für den sicheren Zugriff von außen auf VMware Horizon gibt es seitens des Herstellers schon länger das Produkt Unified Access Gateway (UAG). Dieses ist aktuell kostenlos in den verschiedenen Edition von VMware Horizon enthalten.

Für die Bereitstellung unter VMware vSphere gibt es eine Dokumentation und auch weitere Blog Artikel, wo dies ausführlich beschrieben ist. Leider gibt es für die Bereitstellung unter Microsoft Hyper-V nicht wirklich Informationen durch den Hersteller. Daraus ist die Idee für diesen Beitrag entstanden.

Voraussetzungen

  • Microsoft Hyper-V Server (Windows Server 2012R2 oder höher)
  • Mindestens 2 Prozessor Cores
  • Mindestens 4GB Arbeitsspeicher
  • Mindestens 10GB Festplattenspeicher auf dem Hyper-V Server

Rahmenbedingungen

  • Die Bereitstellung erfolgt in einer DMZ.
  • Das UAG wird als Single NIC konfiguriert.
  • Mindestens Windows PowerShell 5.1 auf dem Hyper-V Server.

Vorbereitungen

VMware stellt für die (automatisierte) Bereitstellung eine Sammlung von PowerShell Skripten bereit. Diese können über das VMware Customer Connect Portal heruntergeladen werden.

Die aktuelle Version (2106.2) des UAG kann hier heruntergeladen werden. Für die Bereitstellung unter Hyper-V Server gibt es keine dedizierte Installationsdatei. Daher greife ich auf die Datei „Unified Access Gateway (UAG) 2106.2 for Microsoft Azure“.

Dies kann auf der selben Internetseite wie oben verlinkt heruntergeladen werden. Nachdem alle Downloads abgeschlossen sind, beide ZIP Archive in ein gemeinsames Verzeichnis ablegen. In meinen Fall ist das „D:\uag“.

Anschlißend entpacke ich beide ZIP Archive mit Hilfe von 7-Zip.

Die Verzeichnis und Dateistruktur sollte wie folgt aussehen:

Bereitstellung

Für die Bereitstellung sind neben der PowerShell Skripte auch eine Initialisierungsdatei (Ini Datei) erforderlich. Darin werden Parameter definiert, welche bei der Bereitstellung an die Appliance übergeben werden.

Initialisierungsdatei

Wie bereits oben geschrieben, handelt es sich um eine Bereitstellung der UAG Appliance als SingleNIC. Nachstehend habe ich meine INI Datei (D:\uag\uag99-hyper-v.ini) in verschiedene Bereich aufgeteilt. Gerade in Hinblick auf Parameter welche erforderlich und optional sind. Der gesamte Inhalt steht auch auf GitHub zur Verfügung.

Basic

Die nachstehenden Parameter sind für den Betrieb des UAG aus meiner Sicht unerlässlich.

[General]

#
# UAG virtual appliance unique name (between 1 and 32 characters).
# If name is not specified, the script will prompt for it.
#
name=uag2106.2

#
# Full path filename of the UAG .ova virtual machine image
# The file can be obtained from VMware
#
source="D:\uag\euc-unified-access-gateway-21.06.2.0-18528989_OVF10.vhd"

#
# Normally used for vSphere Data Store. In Hyper-V used for the virtual Disk Foldername
#
ds=D:\Hyper-V\uag2106.2\Virtual Hard Disks

#
# vSphere Network names. For pre 3.3 UAG versions, a vSphere Network Protocol Profile (NPP) must be associated with every referenced network name. This specifies
# network settings such as IPv4 subnet mask, gateway etc. UAG 3.3 and newer no longer uses NPPs and so for static IPv4 addresses a netmask0, netmask1 and netmask2
# value must be specified for each NIC. Normally a defaultGateway setting is also required.
#
netInternet=Microsoft Network Adapter Multiplexor Driver
#netManagementNetwork=VM Network
#netBackendNetwork=VM Network

defaultGateway=192.168.0.1

deploymentOption=onenic
ip0=192.168.0.2
netmask0=255.255.255.0
routes0=0.0.0.0/0 192.168.0.1

dns=192.168.0.1
dnsSearch=domain.de

#
# SSH settings
#
sshEnabled=true
sshPasswordAccessEnabled=true

#
# Gateway-Standort
#
gatewayLocation=DMZ

Bitte nicht vergessen die Pfade in Zeile 13 und 18 sowie den Namen für den vSwitch in Zeile 25 an eure Installation anzupassen. Damit verbunden auch die Netzwerkeinstellungen eurer Umgebung.

SSL Zertifikate

Das Deployment nutzt standardmäßig Self-Signed SSL Zertifikate sowohl für das Internet als auch Admin Interface. Selbstverständlich können auch (gekaufte) SSL Zertifikate für beide Interfaces angegeben werden.

Die aktuelle Version des PowerShell Skripts unterstützt auch die Nutzung des SSL-Zertifikats im Format pfx. Leider habe ich bei der Prüfung mit Qualys SSL Labs festgetellt, dass die Zertifikatskette (Chain issues) unvollständig ist. 🙁

Wichtig ist an dieser Stelle, dass das eigentliche Zertifikat und das der ausstellenden Zertifizierungsstelle in einer Datei (domain.de.chain.pem) gespeichert werden. Von der Reihenfolge her zuerst das Zertifikat der Domain und dahinter gleich das Zertifikat der Zertifizierungsstelle.

-----BEGIN CERTIFICATE-----
MIICnjCCAgegAwIBAgIKA/G46EpG6ClSQzANBgkqhkiG9w0BAQUFADBaMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEVMBMGA1UECxMMQXBwbGUgaVBo
b25lMR8wHQYDVQQDExZBcHBsZSBpUGhvbmUgRGV2aWNlIENBMB4XDTE4MTAwNzEy
...
OBroz8wij1tl1bnu3ul8XAX67doh7R1CFuWzJzsasEbRjpBhei1ApPqIZJ/yM4XY
UEtI9OzZP/I6E5fBN5nSXVw0KuiN1Nbs3GEteafzCm4NwQyI0veauSrM7jlShfei
Zro=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
...
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----

Der private Schlüssel (domain.de.key.pem) muss ebenfalls zur Verfügung gestellt werden. Anderenfalls kann das SSL-Zertifikat nicht importiert werden.

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
...
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
-----END RSA PRIVATE KEY-----

Alle verwendeten Zertifikate und Schlüssel habe ich im PEM Format (Base64, X509) im Verzeichnis „D:\uag“ abgelegt werden.

Nachstehend die Konfiguration in der INI Datei für das Internet Interface des UAG.

[SSLCert]

#
# From UAG 3.0 and newer, you can specify the name of a .pfx or .12 format certificate file containing the required certificate and private key and
# any required intermediate certificates. In this case there is no need to use openssl commands to convert the .pfx/.p12 file into the
# associated PEM certificates file and PEM private key file.
#
pemCerts=domain.de.chain.pem
pemPrivKey=domain.de.key.pem

Nachstehend die Konfiguration in der INI Datei für das Admin Interface des UAG.

[SSLCertAdmin]

#
# From UAG 3.0 and newer, you can specify the name of a .pfx or .12 format certificate file containing the required certificate and private key and
# any required intermediate certificates. In this case there is no need to use openssl commands to convert the .pfx/.p12 file into the
# associated PEM certificates file and PEM private key file.
#
pemCerts=domain.de.chain.pem
pemPrivKey=domain.de.key.pem

Radius Server

Heutzutage erfolgt die Anmeldung über das Internet neben Benutzername und Passwort auch mit Hilfe von 2 Faktor Authentifizierung (2FA). In dem meisten mir bekannten Lösungen erfolgt dies mit Hilfe eines Radius Servers. Nachstehen ein Konfigurationsbeispiel für Gemalto SafeNet Authentication Service.

[RADIUSAuth]

#
# hostName is the name or IP address of the primary RADIUS server
#
hostName=server01.domain.de

#
# authtype must match the configuration of the RADIUS server. It is one of
# PAP, CHAP, MSCHAP1, or MSCHAP2
#
authType=CHAP

#
# authPort is the authentication destination UDP port configured on the RADIUS server. It is
# usually 1812
#

athPort=1812

#
# radiusDisplayHint is a short string that will be included in the client prompt.
# In this example, the user prompt will be "Enter your XXX Token username and passcode".
#
radiusDisplayHint=2FA

Die vollständige INI Datei habe ich in einem Git Repository bereitgestellt.

Deployment

Sind alle Parameter gesetzt, kann die Bereitstellung der UAG Appliance durchgeführt werden. Dazu eine PowerShell als Administrator auf dem Hyper-V Server starten. Anschließend in das Verzeichnis „D:\uag“ wechseln.

cd "d:\uag"

In der PowerShell Datei muss vor Beginn die Zeile 279 angepasst werden. Und zwar funktioniert die Konvertierung der Vorlage von .vhd in .vhdx nicht. Wird die Änderung nicht durchgeführt, kann die Festplatte nicht in die neue virtuelle Maschine (VM) eingebunden werden.

$vhdxFile+=".vhd"

Wer gerne noch den Pfad der neuen VM anpassen möchte, ergänzt im selben PowerShell Skript Zeile 279 um den Parameter -Path. Durchaus sinnvoll, wer nicht die Standardverzeichnisse für virtuelle Maschinen und Festplatten bei sich nutzt.

$out=New-VM -Name $VMName -MemoryStartupBytes $vRAM -VHDPath $vhdxFile -SwitchName $netInternet -Path "D:\Hyper-V" -ErrorVariable Error -ErrorAction SilentlyContinue Zeile 294

Bereitstellung starten

.\uagdeployhv.ps1 -iniFile .\uag99-hyper-v.ini -ceipEnabled "false"

Abfrage des Passworts für den Benutzer „root“. Dieser Zugang ist später notwendig, um sich an der Konsole oder per SSH an der UAG Appliance anmelden zu können.

Abfrage des Passworts für den Benutzer „admin“. Dieser Zugagn ist später notwendig, um sich an der Weboberfläche der UAG Appliance anmelden zu können.

Hinweis: Beide Passwörter dürfen nicht identisch sein. Das Passwort muss mindestens 8 Zeichen lang sein. Mindestens ein Groß- und Kleinbuchstaben, eine Zahl und Sonderzeichen. Folgende Sonderzeichen sind erlaubt: >>! @ # $% * (<<

Nach wenigen Minuten, wenn es zu keinen Probleme bei der Bereitstellung gekommen ist, ist das UAG einsatzbereit.

An der Stelle nicht ungeduldig werden. Das UAG selbst benötigt nach dem Start nochmals 1-2 Minuten, bis die Weboberfläche für die Administration erreichbar ist.

Fehlersuche

Sobald Fragen oder Rückmeldungen vorliegen, wird der Bereich mit Informationen gefüllt.

Abonnieren
Benachrichtige mich bei
0 Comments
neueste
älteste
Inline Feedbacks
View all comments