VPN mit Zertifikaten von iOS zu Windows RRAS mit Endpoint Manager (Intune) konfigurieren

Wir möchten erfolgreich eine VPN-Verbindung auf iOS-Endgeräte verteilen. Das „OnDemand“ VPN soll verwendet werden und daher muss der Nutzer mit Zertifikaten authentifiziert werden. die Authentifizierung am NPS (Radius) ist noch eine andere Sache, dieser Beitrag konzentriert sich auf das IKEv2 zwischen iOS und Windows Server RRAS.

Unsere iOS-VPN-Intune Checkliste

  • Microsoft Endpoint Manager (ehemals Intune) soll die VPN-Verbindung via Konfigurationsprofil verteilen
    • Die Devices sind schon im EPM angekommen und synchronisieren fröhlich Richtlinien
  • Microsoft Endpoint Manager soll den Nutzern (auf den Geräten) automatisch ein Zertifikat ausstellen (via „Certificate Connector“)
    • Funktioniert perfekt mit einer Microsoft CA
    • Die CA und NPS sind nicht Teil dieses Beitrages, aber mit Anleitung durchaus machbar
  • Die iPhone/iPads Geräte haben iOS 14.2 oder neuer (!)
  • Es wird IKEv2 verwendet
    • Denn das ist die einzige Möglichkeit, iOS mit RRAS unter der Verwendung von Zertifikaten zu verbinden
  • Der RRAS Server ist ein Windows Server 2019
  • RRAS ist korrekt konfiguriert (Ports, Erreichbarkeit, Radius …)
  • NPS ist korrekt konfiguriert (Verbindungsanforderungs- und die Verbindungsrichtlinie …)

Im Prinzip folgen wir dem brauchbaren „Deploy Always On VPN“ Guide von Microsoft unter https://docs.microsoft.com/en-us/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/always-on-vpn-deploy-deployment

Der Trick ist eine funktionierende Kombination aus iOS IKEv2-Parametern und den zugehörigen Phase1/2 Parametern auf der RRAS-Gegenstelle zu erstellen. Denn das ist nicht Default und leider auch praktisch nirgends dokumentiert.

RRAS-Server

Um erfolgreich eine IKEv2 Verbindung von iOS zum RRAS Server herzustellen, ist dem RRAS-Server (und iOS) die richtige Kombination der Ciphersuits vorzugeben. Das geht am RRAS via CustomPolicy. Natürlich exklusiv an der PowerShell.

Viele Kombinationen funktionieren nicht. Diese hier funktioniert:

Set-VpnServerConfiguration -CustomPolicy -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -SALifeTimeSeconds 28800 -MMSALifeTimeSeconds 86400 -SADataSizeForRenegotiationKilobytes 1024000

Dann muss man dem RRAS-Server in aller Regel erklären, das er auch fragmentierte IKE Pakete annehmen soll. Bei einer Schlüsselgröße von 2048bit mit Zertifikaten und einer MTU von 1492 oder 1500byte wird es oft knapp und Pakete fragmentieren:

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\Ikev2\" -Name EnableServerFragmentation -PropertyType DWORD -Value 1 -Force

Wenn beides geschehen ist, muss der RRAS neu starten:

Restart-Service RemoteAccess

Microsoft Endpoint Manager

Innerhalb der VPN-Richtlinie kommt es auf die IKEv2 Parameter an. Die sind in einer bestehenden Richtlinie erreichbar unter Devices > Richtlinie (Name) > Properties > Configuration settings > IKEv2 Settings. Dort gibt es ab etwa der Mitte die „wichtigen“ (und nicht offensichtlichen) Einstellungen:

Perfect forward secrecy: Enable

Certificate revocation check: Disable

Use IPv4/IPv6 internal subnet attributes: Disable

Mobility and multihoming (MOBIKE): Enable

Redirect: Enable

Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 1440

Child Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 480

… und schon geht’s. Also schon ging es bisher bei unseren Systemen 🙂

Vielleicht schreiben wir irgendwann noch einen großen Artikel mit allen Schritten, also von der Zertifizierungsstelle bis zum Endgerät … oder jemand anderes tut das. Oder, wenn ihr sowas braucht, ruft ihr uns an 😋

Windows Hello PIN entfernen/zurücksetzen (PIN entfernen ausgegraut)

Bei dem Versuch eine vergessene Windows Hello PIN innerhalb eines Domänen-Netzwerkes zu löschen, ist mir aufgefallen, dass der „entfernen“ Knopf ausgegraut war.

Um diese PIN trotzdem entfernen zu können, müssen nur die Inhalte von: %windir%\ServiceProfiles\LocalService\AppData\Local\Microsoft\NGC gelöscht werden.

Lösung

Eingabeaufforderung als Administrator ausführen

(um den Besitz an dem Ordner zu übernehmen)

takeown /f %windir%\ServiceProfiles\LocalService\AppData\Local\Microsoft\NGC /r /d j

(garantiert die Administratorberechtigung für diesen Ordner)

icacls %windir%\ServiceProfiles\LocalService\AppData\Local\Microsoft\NGC /grant administratoren:F /t

(den Inhalt des Ordner löschen)

del /f /q C:\Windows\ServiceProfiles\LocalService\AppData\Local\Microsoft\NGC\*.*

Anschließend neu starten

Achtung! Alle Zugangsmöglichkeiten von Windows Hello, wie Fingerabdruck, Gesichtserkennung und sonstige sind nicht mehr verfügbar und müssen neu eingerichtet werden.

VMware ESXi CDP/LLDP mit standard vSwitch

Da ich ständig vergesse, wie man auf einem VMware standard vSwitch CDP bzw. LLDP konfiguriert um Uplinks von/zu physischen Switches schnell und einfach nachvollziehen zu können:

Per SSH auf den ESXi verbinden und folgenden esxcli Befehl ausführen:

esxcli network vswitch standard set --cdp-status=both -v vSwitch0

--cdp-status=both konfiguriert den vSwitch sowohl für’s empfangen, als auch senden von CDP/LLDP Paketen.

Mit dem Parameter -v <vSwitch> wird der Name des zu konfigurierenden vSwitch angegeben.

Alternativ geht das auch per esxcfg:

esxcfg-vswitch -B both vSwitch0

Das war schon alles, nun kann man ganz einfach auf den physischen Switches die CDP/LLDP Infos abrufen.

Z.B. auf HPE (Aruba) Switches:

show cdp neighbors
show lldp info remote-device

Häufig liest man online, dass es nicht möglich ist (oder zumindest nicht supported) auf standard vSwitches CDP/LLDP zu aktivieren. Über den vSphere Client oder den ESXi Host client geht das auch (soweit ich weiß) tatsächlich nicht. Dort heißt es dann bei den vmnics auch „CDP/LLDP steht auf diesem physischen Netzwerkadapter nicht zur Verfügung.“

Dieser KB-Artikel beschreibt das vorgehen aber auch ganz offiziell.

AADConnect Objekte ausschliessen (z.B. Einen Benutzer nicht synchronisieren)

Manchmal muss der Admin genau ein einziges Objekt, oder nur wenige ganz bestimmte Objekte von der Synchronisation vom lokalen AD in das Microsoft 365 Azure AD ausschließen.

Das geht überraschend einfach, mann kann exclude-Regeln einfach im „Synchronization Rule Editor“ hinzufügen.

Schritt für Schritt Anleitung um ein Objekt nicht mehr zu synchroniseren

  1. Zeitplan für die Synchronisation abschalten, damit keine automatischen Aufgaben die Änderungen durcheinander bringen:
Set-ADSyncScheduler -SyncCycleEnabled $False

Der Status des ADSyncSchedulers lässt sich jeder überprüfen mittels:

Get-ADSyncScheduler | Format-List SyncCycleEnabled

2. „Synchronization Rules Editor“ starten (als Administrator)

3. In der „View and manage …“ Liste die „Direction“ auf „Inbound“ stellen und eine freie Nummer unterhalb der bestehenden „Precedence“ Regeln finden (und merken). In der Regel ist das irgendetwas <100.

4. Oben rechts „Add New rule“

5. Den „Create inbound synchronization rule“ Assistenten nun ausfüllen:

  • Name: Ein beschreibender Name, z.B. „In from AD – Bernd auslassen“
  • Connected System: Der lokale AD Forest
  • Connected System Object Type: user
  • Metaverse Object Type: Person
  • Link Type: join
  • Precedence: Die gemerkte Nummer von oben (z.B. „90“)
  • „Tag“, „Enable Password Sync“ oder „Disabled“ nicht verändern
  • Next > …

6. „Add group“ > dann > „Add clause“

7. Als „Attribut“ ein zu filterned Attribut wählen, zum Beispiel den „name“ oder ein anderes Attribut. Bei größeren Mengen an Objekten nutzen wir hier gerne die „Extended Attributes“, die normalerweise solange ungenutzt und leer sind. Der Operator ist im Beispiel „equal“, der „Value“ der zu matchende Inhalt.

8. „Next >“, an den nun angezeigten „Add join Rules“ nichts ändern > „Next >“

9. Bei den „Add join rules“ eine Transformation hinzufügen:

  • „Add transformation“ >
  • FlowType: Constant
  • Target Attribute: cloudFiltered
  • Source: True
  • Apply Once: leer lassen
  • Merge Type: Update
  • Unten auf „Add“

10. „Synchronization Rules Editor“ schliessen, „Synchronization Service“ öffnen

11. „Connectors“ > Actions > Run > Full Synchronization > OK

12. „Operations“ Den Zyklus abwarten, Full dauert immer einen Moment …

13. Den Synchronization Schedule wieder einschalten:

Set-ADSyncScheduler -SyncCycleEnabled $True

14. Und einmal die Initial-Synchronisation laufen lassen:

Start-ADSyncSyncCycle -PolicyType Initial 

Remote-Postfächer in Exchange Hybrid-Konfiguration im lokalen ECP anzeigen und bearbeiten

Problem

Wenn ein Benutzer in einer Hybrid-Umgebung erstellt wird und ihm dann eine Exchange Online-Lizenz zugeordnet wird, wird für diesen Benutzer ein Cloud-Postfach erstellt.

Der OnPremises Exchange Server erfährt davon aber nichts, daher ist der Benutzer im lokalen ECP nicht aufzufinden und das Mailrouting („Nachrichtenfluss“) von intern nach extern schlägt fehl.

Wenn man Office 365 zum ersten Mal im Hybridmodus verwendet, erstellt man oft neue Benutzer, indem man einfach ein AD-Konto erstellt und dieses via ADConnect synchronisiert. Danach wird der neue User lizenziert und bekommt ein Postfach. Das erzeugt genau das oben genannte Problem – die OnPremises Exchange Adressliste weiss nichts von dem neuen Objekt und routet keine E-Mails in die Cloud.

Beim Verschieben einer solchen Mailbox zurück nach On Premises tritt dieser Fehler auf:

Error: MigrationPermanentException: Cannot find a recipient that has mailbox GUID ''. --> Cannot find a recipient that has mailbox GUID '<‎GUID>'

Die „richtige“ Methode zum Bereitstellen neuer Benutzer in Office 365 besteht darin, neue Remotepostfächer zu erstellen.

Lösung

Man kann einen OnPremises-Benutzer auch nachträglich mit seiner „echten“ Exchange-Online Mailbox verbinden.

Man schaltet einfach die Remote-Mailx im Exchgange ein und trägt die Online-GUID des Postfaches ein.

1. In der OnPremises Exchange PowerShell (EMS) die Remote-Mailbox einschalten:

Enable-RemoteMailbox <USER> –RemoteRoutingAddress <[email protected]>

Die RemoteRoutingAddress via AADConnect und dem Hybrid-Agenten sieht immer gleich aus „[email protected]“.

2. Die GUID der Exchange Online Mailbox in der Exchange Online PowerShell abfragen:

Get-Mailbox –Identity <UPN> | fl Identity,ExchangeGUID

3. In der OnPremises Exchange PowerShell (EMS) genau diese GUID wieder eintragen:

Set-RemoteMailbox <USER> –ExchangeGUID <GUID>

Das funktioniert natürlich in beide Richtungen, also auch für Benutzer-Objekte die in der Exchange Online EMC nicht mehr angezeigt werden. Interessanterweise beschreibt Microsoft in diesem Artikel nur den Weg in die Cloud 😇