Windows 11 | Verbindungsspezifisches DNS-Suffix mit PowerShell entfernen

Wer in gemischten Umgebungen oder beim Testen von Routern und DHCP-Servern unterwegs ist, kennt das Phänomen: In der Ausgabe von ipconfig /all taucht plötzlich ein verbindungsspezifisches DNS-Suffix wie home.local oder fritz.box auf.

Das Problem dabei: Selbst wenn man in den erweiterten TCP/IP-Einstellungen des Netzwerkadapters das Feld “DNS-Suffix für diese Verbindung” manuell leert, bleibt der Eintrag stur bestehen. Auch ein gewöhnliches Set-DnsClient -ConnectionSpecificSuffix "" bringt oft keine Abhilfe.

Die Ursache: DHCP Option 119 und die Registry

Der Grund für diese Renitenz liegt tiefer im System. Viele Router übermitteln DNS-Suchlisten über die DHCP Option 119 (oder Option 15). Windows legt diese Werte nicht nur in den Standard-Eigenschaften der Netzwerkschnittstelle ab, sondern schreibt sie als REG_MULTI_SZ-Wert namens DhcpDomainSearchList direkt in die Registry unterhalb der jeweiligen Adapter-GUID.

Da es sich hierbei um ein Multi-String-Array handelt, greifen die Standard-Befehle zum Leeren gewöhnlicher Zeichenfolgen ins Leere. Bei jedem Lease-Renew holt sich Windows die Suchliste wieder ab.

Die Lösung: PowerShell-Skript zur Bereinigung

Um das Suffix endgültig loszuwerden, müssen die entsprechenden Schlüssel in den Interfaces sowie die globalen Suchlisten unter Tcpip\Parameters gezielt abgeräumt werden.

Folgendes PowerShell-Skript (mit Administratorrechten ausführen) erledigt den Hausputz auf allen Netzwerkschnittstellen:


#Requires -RunAsAdministrator

# Target path for network interfaces in the registry
$InterfacesPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"

# 1. Clear and remove DhcpDomainSearchList and related suffix entries on all interfaces
Get-ChildItem -Path $InterfacesPath | ForEach-Object {
    $path = $_.PSPath
    
    # Explicitly remove and clear DhcpDomainSearchList
    Remove-ItemProperty -Path $path -Name "DhcpDomainSearchList" -ErrorAction SilentlyContinue
    Set-ItemProperty -Path $path -Name "DhcpDomainSearchList" -Value ([string[]]@()) -ErrorAction SilentlyContinue

    # Clean up secondary domain suffix properties
    Remove-ItemProperty -Path $path -Name "DhcpDomain" -ErrorAction SilentlyContinue
    Remove-ItemProperty -Path $path -Name "Domain" -ErrorAction SilentlyContinue
    Set-ItemProperty -Path $path -Name "DhcpDomain" -Value "" -ErrorAction SilentlyContinue
    Set-ItemProperty -Path $path -Name "Domain" -Value "" -ErrorAction SilentlyContinue
}

# 2. Clean up global SearchList entries under Tcpip\Parameters
$ParamsPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
Remove-ItemProperty -Path $ParamsPath -Name "DhcpDomainSearchList" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $ParamsPath -Name "SearchList" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $ParamsPath -Name "Domain" -ErrorAction SilentlyContinue

# 3. Flush local DNS client cache
Clear-DnsClientCache

Write-Host "DhcpDomainSearchList successfully cleaned up!" -ForegroundColor Green

Den Wiedergang nach DHCP-Renew verhindern

Falls der lokale DHCP-Server im Netz weiterhin penetrant Option 119 verteilt und Windows das Suffix beim nächsten Re-Lease wieder einspeist, lässt sich Windows per Gruppenrichtlinie / Registry anweisen, die vom DHCP gelieferten Suchlisten schlicht zu ignorieren:

# Enforce policy to ignore DHCP Option 119 (DhcpDomainSearchList) globally
$policyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient"
if (-not (Test-Path $policyPath)) {
    New-Item -Path $policyPath -Force | Out-Null
}
Set-ItemProperty -Path $policyPath -Name "UseDomainNameDevolution" -Value 0 -Type DWord

Kontrolle

Ob die Bereinigung erfolgreich war, lässt sich mit einem kurzen Einzeiler prüfen:

# Verify that DhcpDomainSearchList is empty across all interfaces
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\*" | Select-Object PSChildName, DhcpDomainSearchList

Nach einem anschließenden ipconfig /flushdns zeigt ipconfig /all wieder eine saubere Suchliste ohne unerwünschte Suffix-Leichen an.

Das Skript zum Löschen des Eintrags steht hier zum Download bereit.

Enjoy it, b!

Hyper-V | Windows Server 2022 DHCP Result code 83

Wird unter Microsoft Hyper-V (Windows Server mit der Hyper-V Rolle) eine virtuelle Maschine mit Windows Server 2022 als Gastbetriebssystem installiert, kommt es häufig vor, dass die IP-Konfiguration nicht von DHCP auf eine statische IP umgestellt werden kann.

Der folgende Screenshot zeigt einen Microsoft Hyper-V Network Adapter in der Server Core Configuration (sconfig).

Unbenannt-1

Die Änderung der IP von DHCP auf eine fest zugewiesene, statische Adresse wird mit folgender Fehlermeldung quittiert und der Adapter verbleibt in der dynamischen Konfiguration.

Unbenannt-2

Lösen läßt sich das Problem über die PowerShell und folgende Befehle.

# Ermitteln des Interface-Indexes des Netzwerk-Adapters
Get-NetAdapter
# Entfernen der IP-Adresse
Remove-NetIPAddress -ifIndex 6 -Confirm:$false
# Vergabe einer neuen, statischen IP-Adresse
New-NetIPAddress -ifIndex 6 -IPAddress 192.168.11.141 '
-PrefixLength 24 - DefaultGateway 192.168.11.1

Sieht dann im Screenshot wie folgt aus.

Unbenannt-3

Enjoy it, b!

DHCP-Server Migration auf Windows Server 2016

Migrationen sind ja immer spannend, da man in der Theorie weiß wie es geht und in der Praxis es dann immer anders läuft. Die Migration eines DHCP-Servers von Windows Server 2008 R2 auf Windows Server 2016 stellt hier eine Ausnahme dar, zwei netsh-Aufrufe und die Sache ist im Wesentlichen erledigt.

Ablauf

  1. Export der DHCP-Einstellungen auf dem Windows Server 2008 R2
  2. Kopieren der Datei auf den neuen DHCP Server
  3. Stopp des DHCP-Services auf dem Windows Server 2008 R2, ich habe den Service auf Deaktiviert / Disabled gestellt
  4. Installation der DHCP-Server Rolle auf dem Windows Server 2016 und Autorisierung im Active Directory
  5. Import der DHCP-Einstellungen auf dem Windows Server 2016
  6. Konfiguration der Aktualisierung des DNS durch den DHCP Server (DNS dynamic update credentials)

Befehle / PowerShell

Wer mich kennt, der weiß das ich mit der Eingabeaufforderung/PowerShell liiert bin … daher hier die notwendigen Befehle dafür. Die Eingabeaufforderung / Comannd Prompt / PowerShell bitte mit erhöhten Adminrechten ausführen.

Wählt man PowerShell, dann kann man die Installation der DHCP-Rolle damit ebenfalls erledigen:

Windows Server 2008 R2

:: Export der DHCP-Einstellungen mit netsh auf dem Windows Server 2008 R2

netsh dhcp server export C:\Temp\dhcp-Settings.txt

:: Kopieren der Einstellungen auf den Windows Server 2016

xcopy C:\Temp\dhcp-Settings.txt \\server\c$\temp\ /v

Windows Server 2016

# Installation der DHCP Rolle auf dem Windows Server 2016

Install-WindowsFeature -Name DHCP -IncludeManagementTools

# Autorisierung des neuen DHCP-Servers auf dem Windows Server 2016 = sbs.sbsland.local; IP = 192.168.1.11

Add-DhcpServerInDC -DnsName "sbs.sbsland.local" -IPAddress 192.168.1.11

:: Import der DHCP-Einstellungen mit netsh auf dem Windows Server 2016

netsh dhcp server import C:\Temp\dhcp-settings.txt all

Wer auf dem Windows Server 2016 kein netsh sondern PowerShell verwenden will, der sollte sich mal Import-DHCPServer anschauen.

Enjoy it, b!