Synology Directory Server | Hyper-V Replica schlägt fehl–Kerberos Fehler

Ich arbeite bei kleinen Projekten gerne mit dem Synology Directory Server als Ersatz für das Microsoft Active Directory (AD). Bei ein paar Benutzern, lassen sich hier doch einige Kosten sparen. Nun kommt aber auch dort gelegentlich die Anforderung eine Virtuelle Maschine (VM) hochverfügbar bereitzustellen. Dafür habe ich bisher immer den Microsoft Hyper-V Server (2019) in Verbindung mit der Hyper-V Replica verwendet.

Das klassische Setup, hat auch bis zur Aktivierung der Hyper-V Replication problemlos funktioniert.

  • Join der beiden Hyper-V Hosts in die Domain des Synology Directory Servers
  • Öffnen der Firewall auf den Hyper-V Hosts um über Port 80 der 443 zu replizieren
  • Verwendung der Kerberos Authentifizierung (HTTP) für die Replikation
  • Einrichten der Hyper-V Replica für eine oder zwei VMs

Allerdings wurde ich am Ende der Konfiguration mit dieser Fehlermeldung konfrontiert und konnte auf Anhieb nichts damit anfangen.

image

Ja klar, es gibt ein Problem mit Kerberos … aber wieso?

Die Namensauflösung funktionierte und auch die ServicePrincipalNames sind registriert.

image

Auch die Ports 80 und 443 sind über die Firewall geöffnet und antworten wie erwartet.

Mein Verdacht fiel nach einiger Zeit auf dem Synology Directory Server, dieser stellt quasi eine Domain mit dem folgendem Functional-Level bereit.

  • Domain functional level: Equal to Windows Server 2008 R2

Die Hyper-V Replica wurde mit Windows Server 2012 vorgestellt, was aber nicht zwingend heißen muss, dass die Domain ebenfalls auf diesem Level sein muss. Ich denke aber das darin und vielleicht in Verbindung mit der Tatsache, dass hier eigentlich Samba 4.10 läuft, hier das Problem liegen könnte.

Als Alternative wollte ich die Authentifizierung per Zertifikat verwenden.

image

Dabei bin ich über eine Reihe von Herausforderungen gestolpert, die sich aber letztendlich lösen ließen. Als Grundlage habe ich diese Anleitung verwendet, die aber nur mit kleineren Modifikationen funktionierte.

Ein wichtiger Unterschied ist auf jeden Fall, dass meine beiden Hyper-V Hosts in der Domain verbleiben sollen, also nicht in einer Workgroup betrieben werden.

  • Insgesamt werden n+1 (N = Anzahl der Hyper-V Hosts die an der Replikation teilnehmen) Zertifikate erstellt. Für jeden Hyper-V Host eines (das Server-Zertifikat) und das Root-Zertifikat. Bei zwei Hosts, haben wir damit drei Zertifikate
  • Während das Root-Zertifikat auf jedem der Hyper-V Hosts installiert wird, bekommt jeder Host ein eigenes Server-Zertifikat

Auf dem ersten Knoten wird eine PowerShell-Sitzung als Administrator gestartet und dazu die folgenden Variabel angelegt.

image

Danach wird das Root-Zertifikat erstellt. Dazu habe ich die folgenden Punkte geändert (Zeile 26).

  • KeyUsage CertSign  in
  • KeyUsage CertSign, CRLSign, DigitalSignature

Darüber hinaus in Zeile 27

  • KeyLength 2056 in
  • KeyLength 4096

image

Der Server auf dem das Root-Zertifikat erstellen, muss diesem ebenfalls vertrauen. Darum wird das Zertifikat von Personal nach Trusted Root Certification Authorities kopiert.

image

Nun wird auf demselben Knoten sowohl das Root-Zertifikat exportiert als auch die Server-Zertifikate erstellt.

image

Auch bei der Erstellung der Server-Zertifikaten habe ich ein paar Änderungen vorgenommen.

Hinzufügen eines weiteren Parameters (Zeile 64), wobei ich dazu (Zeile 60) den FQDN erstelle

  • DnsName $fqdn, $name
  • KeyLength 4096

image

Auf allen Hyper-V Hosts muss nun die Prüfung der Zertifikate abgeschaltet werden.

image

Nun werden die Zertifikate auf die anderen Knoten (hier nur einer) verteilt.

image

Kleiner Tipp, der “\” am Ende des Pfads erstellt das Verzeichnis automatisch.

Nun wird auf dem 2ten Knoten sowohl das Root- als auch der Server-Zertifikat importiert

image

Das sieht dann auf jedem Hyper-V Host wie folgt aus.

image

image

So, damit sollte die Hyper-V Replikation eigentlich funktionieren, was aber nicht der Fall war. Zusätzlich zur certificate-based Authentification (HTTPS), musste ich auch noch die Verwendung von Kerberos (HTTP) aktivieren! Warum, kann ich nicht genau sagen und muss hier nochmals mit einem Netzwerk-Trace der Sache auf den Grund gehen.

image

Mit dieser Konfiguration funktioniert nun die Hyper-V Replikation auch mit Hyper-V Hosts die in einer Samba-Domain und dem Synology Directory Server Mitglied sind.

Enjoy it, b!

Synology Active Backup for Business | Hyper-V PowerShell-Module

Die Sicherung von virtuellen Maschinen (VM) mit Synology Active Backup for Business, die auf einem Microsoft Hyper-V Server oder Windows Server Core betrieben werden, setzt die Existenz des Hyper-V PowerShell-Modules voraus.

image

Ist dieses nicht vorhanden, schlägt die Konfiguration in Active Backup fehl und das PowerShell-Modul muss auf dem Host nachinstalliert werden.

image

Der erste Befehl zeigt, ob das Modul vorhanden ist oder nicht.

# current status of the modules on this Hyper-V server
Get-WindowsFeature *hyper-v*

Mit diesem Aufruf wird das fehlende Modul unter PowerShell installiert.

# install the Hyper-V PowerShell module
Install-WindowsFeature -Name Hyper-V-PowerShell

Danach funktioniert auch die Aufnahme des Hyper-V Hosts in das Management von Synology Active Backup for Business.

image

Enjoy it, b!

Deinstallieren von Software mit PowerShell

Auf einem Windows Server Core, kann installierte Software mit den folgenden PowerShell Befehlen deinstalliert werden.

# Anzeige der installierten Software
Get-WmiObject -Class Win32_Product | Select-Object -Property Name
# Erstellen einer Variablen für die Deinstallation der Software
$App = Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -eq "5nine Manager for Hyper-V"}
# Deinstallieren der Software
$MyApp.Uninstall()

Das funktioniert natürlich nicht nur auf dem Windows Server Core, doch dort ist es die einfachste Möglichkeit Software wieder los zu werden.

Enjoy it, b!

Synology NAS | Löschen eines Checkpoints unter Hyper-V

Vor einiger Zeit startete ein Hyper-V Server neu, während ein Backup-Task des Synology Active Backup for Business aktiv war.

Active Backup for Business, sichert unter Hyper-V virtuelle Maschinen (VMs) dadruch, dass ein Checkpoint / SnapShot auf dem Hyper-V Server erstellt und aus diesem die VM konsistent gesichert wird.

Checkpoint-no-delete

Durch den automatischen Neustart des Hyper-V Hosts blieb der Checkpoint bestehen und konnte nicht über den Hyper-V Manager gelöscht werden.

Checkpoint-no-delete-2

Um den Checkpoint zu entfernen musste ich explizit PowerShell verwenden. Unter PowerShell heißt der Checkpoint dann auch wieder Snapshot (Microsoft wird das hoffentlich im Windows Server 2022 korrigieren).

# Löschen des Active Backup Snapshots
Get-VMSnapshot -VMName 'Name der VM' | Remove-VMSnapshot

Enjoy it, b!

Synology DSM 7 | Nacharbeiten Active Backup 2

Neben dem in diesem Blog beschrieben Problem mit dem Hyper-V PowerShell-Module und Synology Active Backup for Business, bin ich auf ein weiteres Problem nach dem Upgrade auf DSM 7 gestoßen.

Zuvor muss ich aber klarstellen, dass die Probleme nicht explizit durch das Upgrade verursacht wurden, sondern durch die ebenfalls neue Version von Synology Active Backup.

Active Backup for Business und die “geänderten Blöcke” einer VM

Mit dieser Fehlermeldung konnte ich zuerst einmal Garnichts anfangen.

image

Ein wenig mehr Informationen waren dann in diesem Log zu finden.

image

Der manuelle Start des Tasks brachte dazu das folgende Ergebnis.

Untitled

Im deutschen Synology-Forum habe ich dann ein ähnliches Problem mit VMware gefunden, allerdings aus dem Jahr 2018. Die Lösung war das Vergrößern des virtuellen Datenträgers (VHD) der VM, in diesem Fall von 96GB auf 100GB.

Interessant war dabei, dass alle anderen VMs ohne Probleme gesichert wurden. Lediglich diese VM machte mit der Fehlermeldung oben Probleme. Ob der Grund die noch verwendete Generation 1 war, oder möglicher Weise die initiale Erstellung der VHD kann ich aktuell nicht nachvollziehen. Die Erweiterung auf 100GB konnte das Problem lösen und das Backup funktionierte wieder wie vor dem Upgrade.

Um die Größe der VHD einer Generation 1 VM zu ändern, muss diese heruntergefahren werden. Danach kann mit dem Hyper-V Manager oder PowerShell die Änderung erfolgen.

# Erweitern des virtuellen Datenträgers einer VM
Resize-VHD -Path "D:\Virtual Machines\BaseVHDX.vhd" -SizeBytes 100GB

Enjoy it, b!

Auslesen der Seriennummer einer SSD mit PowerShell

Nachdem ich in ein Notebook eine neue SSD eingebaut hatte und das Gerät auch schon zuverlässig seinen Dienst tat, fiel mir auf das ich mir die Seriennummer nicht notiert hatte.

Wenn man nochmals, z.B. über die Fernwartung oder RDP Zugriff auf das Gerät erhält kann man die Seriennummer über PowerShell und das WMI auslesen.

# Auslesen der Seriennummer
Get-WmiObject -Class Win32_PhysicalMedia | Format-List Tag, Serialnumber

image

PowerShell braucht dazu nicht einmal mit administrativen Rechten gestartet werden.

Enjoy it, b!

Windows 10 Home, Password will never expire …

Oft bekomme ich eine Home-Edition von Windows 10 in die Finger, meistens erfolgt gleich ein Upgrade auf Windows 10 Professional da eine Mitgliedschaft in einer Domäne notwendig ist. Kürzlich war es aber mal wieder soweit und dieses System sollte auf Windows 10 Home belassen werden, damit wollte auf das in diesem Blog beschriebene Script zurück greifen, um das Passwort auf nicht ablaufend zu setzen. Bei einer Passwortlänge von 16 Zeichen, halte ich diese Einstellung für vertretbar.

Gleich vorneweg, ja das Script funktioniert nach wie vor. Mir ist aber aufgefallen, dass ich zum einen weitere Parameter für das Benutzer-Konto setzen will und darüber hinaus PowerShell das doch noch viel besser machen kann  Thumbs up Dazu muss aber mindestens die Version Windows 10 1607 oder neuer im Einsatz sein. Das Script unter der Verwendung von WMIC wurde davor entwickelt.

Aufgabe

Ein Benutzer mit dem, zugegebenen Maßen kurzem Namen “kn” soll erstellt werden. Ich mache das auf Home Systemen oder auch in kleinen Netzwerken gerne da damit der Name des Windows Benutzer Profils hinreichend kurz wird und z.B. OneDrive ein paar Zeichen mehr im Pfadnamen hat. Durch das zusätzliche Setzen eines vollen Namens, erscheint dann dieser am Anmeldebildschirm.

  1. Benutzername = kn
  2. Vollständiger Name = “Karl Napf”
  3. Passwort-Ablauf = nicht ablaufend / never expires

PowerShell Befehle

Mit dem PowerShell-Befehl New-LocalUser erfolgen. Vor dem eigentlichen Befehl, besteht die Möglichkeit das Passwort vertraulich an der Eingabeaufforderung mit Read-Host einzulesen.

Alle PowerShell-Befehle mitt in einer PowerShell-Sitzung mit erhöhten Rechten ausführen.

# Einlesen des Passworts
$Password = Read-Host -AsSecureString

# Anlegen des Benutzers
New-LocalUser -Name 'kn' -FullName 'Karl Napf' -Password $Password -PasswordNeverExpires -Description 'Karl Napf, der Erfinder der Brotsuppe'

Die Kontrolle mit net user, zeigt ein zufriedenstellendes Ergebnis.

image

Enjoy it, b!

Hyper-V Replication State Critical

Nach dem Update einiger Hyper-V Hosts wollte die, für einige VMs eingerichtete Hyper-V Replication nicht mehr starten. Der Replication Health stand auf Critical und das Übliche, über das Menü des Hyper-V Manager verfügbare Resume Replication funktionierte nicht.

image

Eine Abfrage mit PowerShell stellte die Situation wie folgt dar.

image

Zusätzlich wurde im Hyper-V Manager die folgende Information bereitgestellt.

image

Das Problem war, dass ein Resync der Hyper-V Replication notwendig war. Dieser aber über den Hyper-V Manager nicht zur Verfügung stand, also in der GUI nicht angeboten wurde.

Die Lösung stellt hier, wie so oft unter Windows, PowerShell bereit. Hier besteht explizit die Möglichkeit einen Resync der VM anzustoßen.

# Hyper-V Replication, resync einer einzelnen VM
Resume-VMReplication -VMName 'mt-app-2.testlab.local' -Resynchronize

Sollten mehrere VMs von dem Problem betroffen sein, können alle mit dem gleichen Health State über die Kombination der folgenden Befehle zu einem Resync bewegt werden.

# Hyper-V Replication, resync aller VMs eines Hosts im Zustand "critical"
Get-VMReplication | Where-Object { $_.Health -eq 'Critical' } | Resume-VMReplication -Resynchronize

Bei einem Resync geht einiges an I/O über die Leitung und abhängig von der Größe der VMs kann das durchaus einige Zeit in Anspruch nehmen.

image

image

In diesem Fall waren es gut 5 Stunden. So, läuft wie man heute gerne dazu sagt.

image

image

Enjoy it, b!

Aktive Computer im Active Directory

Für die Verlängerung von Lizenzen musste ich die Anzahl von Computern, die noch aktiv sind, ermitteln. Leider wurden zwar neue PCs stetig im Active Directory (AD) hinzugefügt, alte Computer-Konten aber einfach dort belassen.

Es bestand also die Notwendigkeit alle Computer zu finden die Ihr Passwort in den letzten 30 Tagen gewechselt hatten. Der Wechsel nach 30 Tagen ist der von Microsoft festgelegte Standard und kann über eine GPO geändert werden.

https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/domain-member-maximum-machine-account-password-age

Zur Auswertung macht es darum Sinn, hier nochmals einen Blick auf die Richtlinie zu werfen.

Geholfen hat mir dieser Einzeiler in PowerShell:

# Ermitteln der vorhandenen Computer im AD
Get-ADComputer -Filter {enabled -eq $true} -Properties * | select Name, DNSHostName, OperatingSystem, LastLogonDate, LastLogonTimestamp | FT Name, @{n='LastLogonTimeStamp';e={[DateTime]::FromFileTime($_.LastLogonTimeStamp)}} -A | Out-File c:\temp\pc.txt

Damit wird im Verzeichnis c:\temp eine Datei mit dem Namen pc.txt erstellt. Deren Inhalt entsprechend analysiert werden kann.

image

In diesem Fall, war der XX_WKS-5 seit März nicht mehr im Betrieb!

Enjoy it, b!

Windows Backup und alte nicht mehr vorhandene Sicherungen

Es ist mal wieder Zeit etwas über Windows Backup und seine Eigenheiten zu schreiben.

Gelegentlich laufen mir die Sicherungsplatten der Small Business Server voll und Windows Backup schafft es nicht die alten Sicherungen zu entfernen.

image

Windows Backup liefert neben wbadmin.exe noch eine Reihe von PowerShell Befehlen mit, die bei der Wartung und damit zu Behebung des Problems hilfreich sind.

# Löschen aller alten Backups bis auf die letzten 10
wbadmin delete backup -keepversions:10 -quiet

Der Aufruf funktioniert sehr gut, allerdings kommt er nicht mit Backups zurecht die nicht mehr erreichbar sind, sich also auf einer Offline-Platte befinden. Damit haben wir die Situation, dass die Backups auf der Platte sind und noch einen Eintrag im Katalog besitzen. Ist die Platte noch da, können die Backups problemlos gelöscht werden. Im Falle eines Defekts oder Verlusts geht das nicht und wbadmin liefert die folgenden Fehlermeldungen (grüner Kasten).

image

The operation to delete backup version … failed with error:
The specified media type is invalid.

Eine Bereinigung des Backup-Katalogs ist über zwei Wege möglich, zum einen bietet wbadmin die Möglichkeit explizit die Backup-Version (blauer Kasten oben) zu löschen, fordert hier aber zweimal die Bestätigung mit [Y]es. Die Verwendung der Option –quiet überspringt leider die optionale Nachfrage zur Löschung des Eintrags aus dem Katalog.

# Löschen von alten Backups über die Versions-ID
wbadmin delete backup -versions:09/20/2014-21:00

Alternativ und effektiver bewerkstelligt man die Aufgabe mit PowerShell.

# Löschen aller alten Backups bis auf die letzten 10
Remove-WBBackupSet -MachineName server.domain.tld -KeepVersions 10

Auch bei dem Aufruf von Remove-WBBackupSet kommt es zu Fehlermeldungen wegen des fehlenden Mediums, diese werden aber ignoriert und der Backup-Katalog bereinigt.

Die nun noch vorhandenen Versionen lassen sich mit Get-WBBackupSet anzeigen

# Anzeige der nun noch vorhandenen Backup Versionen
Get-WBBackupSet

Bis zum nächsten Mal.

Enjoy it, b!