Die moderne Arbeitswelt und private Nutzung von Computern erfordert eine immer höhere Flexibilität und Anpassungsfähigkeit unserer Geräte an unterschiedliche Netzwerkumgebungen. Ob im Büro, im Homeoffice, im Café oder bei einem Kunden – der Wechsel zwischen verschiedenen WLAN-Netzwerken (SSIDs) gehört zum Alltag vieler Nutzer und insbesondere von IT-Profis. Doch während Windows 11 den Wechsel der WLAN-Verbindung reibungslos verwaltet, bleiben die zugrunde liegenden Netzwerkeinstellungen, insbesondere die DNS-Server, oft statisch oder werden generisch per DHCP bezogen. Dies kann zu suboptimaler Performance, Sicherheitslücken oder eingeschränktem Zugriff auf bestimmte Ressourcen führen.
Dieser umfassende Leitfaden richtet sich an Systemadministratoren, fortgeschrittene Nutzer und alle Netzwerkprofis, die eine maßgeschneiderte und automatisierte Lösung zur Zuweisung unterschiedlicher DNS-Server pro SSID unter Windows 11 implementieren möchten. Wir zeigen Ihnen, wie Sie mit der Leistungsfähigkeit von PowerShell und der Aufgabenplanung eine robuste und flexible Lösung schaffen, die Ihr Netzwerkmanagement auf ein neues Niveau hebt.
Warum unterschiedliche DNS-Server pro SSID so wichtig sind
Die Notwendigkeit, separate DNS-Einstellungen für verschiedene WLAN-Netzwerke zu verwenden, ergibt sich aus einer Vielzahl von Szenarien und Anforderungen:
* Sicherheit und Datenschutz: In öffentlichen WLANs möchten Sie vielleicht einen DNS-Server nutzen, der bekanntermaßen Adware, Malware oder Phishing-Seiten filtert (z. B. AdGuard DNS, Quad9). Im Unternehmensnetzwerk hingegen benötigen Sie möglicherweise interne DNS-Server, um auf lokale Ressourcen zugreifen zu können, die nicht über das öffentliche Internet erreichbar sind. Durch eine gezielte DNS-Konfiguration kann das Surferlebnis sicherer und privater gestaltet werden.
* Leistung und Zuverlässigkeit: Ein lokaler, schneller DNS-Server kann die Ladezeiten von Webseiten verbessern. Im Büro könnten Sie einen unternehmensinternen Caching-DNS-Server nutzen, während zu Hause ein schneller, öffentlicher DNS-Anbieter wie Google DNS oder Cloudflare DNS bevorzugt wird.
* Zugriff auf interne Ressourcen: Unternehmen nutzen oft Split-Horizon-DNS, bei dem bestimmte Hostnamen intern anders aufgelöst werden als extern. Ohne die korrekten internen DNS-Server können Mitarbeiter im Unternehmens-WLAN nicht auf Intranet-Seiten, Dateiserver oder andere wichtige Dienste zugreifen.
* Werbeblockierung und Kinderschutz: Für das Heimnetzwerk könnte ein DNS-Server wie Pi-hole oder NextDNS verwendet werden, um Werbung netzwerkweit zu blockieren oder den Zugriff auf bestimmte Inhalte zu filtern. Diese Einstellungen sind in anderen Netzwerken möglicherweise nicht gewünscht oder erforderlich.
* Fehlerbehebung: Bei Netzwerkproblemen kann das schnelle Umschalten auf einen bekannten, funktionierenden DNS-Server die Diagnose erheblich erleichtern.
Windows 11 bietet über die grafische Benutzeroberfläche keine direkte Möglichkeit, DNS-Einstellungen an spezifische SSIDs zu binden. Standardmäßig werden DNS-Server entweder global für den Netzwerkadapter festgelegt oder vom DHCP-Server des jeweiligen Netzwerks bezogen. Dies erfordert bei jedem Wechsel des Netzwerks eine manuelle Anpassung – ein zeitraubender und fehleranfälliger Prozess, der für Profis keine akzeptable Lösung darstellt.
Die professionelle Lösung: Automatisierung mit PowerShell
Die Antwort auf diese Herausforderung liegt in der Automatisierung mittels PowerShell und der Windows-Aufgabenplanung. Wir werden ein Skript entwickeln, das bei jeder Änderung der WLAN-Verbindung die aktuelle SSID erkennt und basierend darauf die vordefinierten DNS-Server für den WLAN-Adapter konfiguriert.
Schritt 1: Vorbereitung und grundlegendes Verständnis
Bevor wir ins Detail gehen, stellen Sie sicher, dass Sie über Administratorrechte auf Ihrem Windows 11 System verfügen. Des Weiteren benötigen Sie eine Liste der SSIDs, für die Sie unterschiedliche DNS-Einstellungen vornehmen möchten, und die entsprechenden IPv4- und/oder IPv6-DNS-Serveradressen.
Die wichtigsten PowerShell-Cmdlets, die wir verwenden werden:
* Get-NetAdapter
: Zum Identifizieren Ihres WLAN-Netzwerkadapters.
* Get-NetConnectionProfile
: Zum Abrufen von Informationen über die aktuelle Netzwerkverbindung, einschließlich der SSID.
* Set-DnsClientServerAddress
: Zum Festlegen der DNS-Server für einen bestimmten Netzwerkadapter.
Schritt 2: Identifizierung Ihres WLAN-Adapters
Zuerst müssen wir den genauen Namen Ihres WLAN-Netzwerkadapters ermitteln. Öffnen Sie PowerShell als Administrator und geben Sie Folgendes ein:
„`powershell
Get-NetAdapter -Name „Wi-Fi”
„`
Falls Ihr WLAN-Adapter nicht „Wi-Fi” heißt (was in einigen Sprachversionen oder bei Umbenennung vorkommen kann), können Sie alle Adapter auflisten und den richtigen Namen finden:
„`powershell
Get-NetAdapter | Format-Table -AutoSize
„`
Suchen Sie in der Spalte „Name” oder „InterfaceAlias” nach Ihrem WLAN-Adapter (oft „WLAN” oder „Wi-Fi”). Merken Sie sich den genauen Namen, da wir diesen im Skript verwenden werden. Für dieses Beispiel nehmen wir an, der Name ist „Wi-Fi”.
Schritt 3: Erstellen des PowerShell-Skripts
Nun erstellen wir das Kernstück unserer Lösung: ein PowerShell-Skript. Dieses Skript wird die aktuelle SSID abfragen und basierend auf einer Mapping-Tabelle die DNS-Server anpassen.
Öffnen Sie einen Texteditor (z. B. Notepad++) oder die PowerShell ISE und speichern Sie die Datei als `Set-SSIDSpecificDNS.ps1` an einem sicheren Ort, z. B. unter `C:Scripts`.
„`powershell
# ====================================================================
# Skript: Set-SSIDSpecificDNS.ps1
# Beschreibung: Konfiguriert DNS-Server basierend auf der verbundenen SSID unter Windows 11
# Autor: Ihr Name / KI-Assistent
# Datum: 2023-10-27
# ====================================================================
#region Konfiguration
# ——————————————————————–
# ANPASSBARE VARIABLEN
# ——————————————————————–
# Name Ihres WLAN-Adapters (z.B. „Wi-Fi” oder „WLAN”)
$wifiAdapterName = „Wi-Fi”
# Standard-DNS-Server, wenn keine spezifische SSID-Zuordnung gefunden wird (Fallback)
# Diese werden auch verwendet, wenn keine SSID verbunden ist (z.B. nach Trennung)
$defaultDnsServersIPv4 = @(„8.8.8.8”, „8.8.4.4”) # Google Public DNS
$defaultDnsServersIPv6 = @(„2001:4860:4860::8888”, „2001:4860:4860::8844”) # Google Public DNS IPv6
# Definieren Sie Ihre SSID-zu-DNS-Server-Zuordnungen
# Format: @{ „SSID-Name” = @{ „IPv4” = @(„DNS1_IPv4”, „DNS2_IPv4”); „IPv6” = @(„DNS1_IPv6”, „DNS2_IPv6”) } }
# Lassen Sie „IPv6” oder „IPv4” weg, wenn Sie diese nicht konfigurieren möchten.
$dnsMapping = @{
„MeinBueroWLAN” = @{
„IPv4” = @(„192.168.1.10”, „192.168.1.11”);
„IPv6” = @(„fd00::a”, „fd00::b”) # Beispiel für interne IPv6-DNS
};
„MeinHeimnetz” = @{
„IPv4” = @(„1.1.1.1”, „1.0.0.1”); # Cloudflare DNS
„IPv6” = @(„2606:4700:4700::1111”, „2606:4700:4700::1001”) # Cloudflare DNS IPv6
};
„Public_Coffee_Shop” = @{
„IPv4” = @(„9.9.9.9”, „149.112.112.112”); # Quad9 DNS (sicherheitsorientiert)
„IPv6” = @(„2620:fe::fe”, „2620:fe::9”) # Quad9 DNS IPv6
};
# Fügen Sie hier weitere SSIDs und ihre DNS-Server hinzu
}
#endregion Konfiguration
#region Funktionen
function Log-Message {
Param(
[Parameter(Mandatory=$true)]
[string]$Message,
[Parameter(Mandatory=$false)]
[string]$Level = „INFO” # INFO, WARN, ERROR
)
$timestamp = Get-Date -Format „yyyy-MM-dd HH:mm:ss”
Write-Host „[$timestamp] [$Level] $Message”
# Optional: Log in eine Datei schreiben
# Add-Content -Path „C:Scriptsdns_log.txt” -Value „[$timestamp] [$Level] $Message”
}
function Set-DnsClient {
Param(
[Parameter(Mandatory=$true)]
[string]$InterfaceAlias,
[Parameter(Mandatory=$false)]
[array]$IPv4Servers = $null,
[Parameter(Mandatory=$false)]
[array]$IPv6Servers = $null
)
try {
if ($IPv4Servers) {
Log-Message „Setze IPv4-DNS-Server für ‘$InterfaceAlias’ auf: $($IPv4Servers -join ‘, ‘)”
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses $IPv4Servers -AddressFamily IPv4 -ErrorAction Stop
} else {
Log-Message „Keine IPv4-DNS-Server zum Setzen für ‘$InterfaceAlias’ angegeben. Entferne DHCP-zugewiesene DNS-Server für IPv4.”
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ResetServerAddresses -AddressFamily IPv4 -ErrorAction Stop
}
if ($IPv6Servers) {
Log-Message „Setze IPv6-DNS-Server für ‘$InterfaceAlias’ auf: $($IPv6Servers -join ‘, ‘)”
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses $IPv6Servers -AddressFamily IPv6 -ErrorAction Stop
} else {
Log-Message „Keine IPv6-DNS-Server zum Setzen für ‘$InterfaceAlias’ angegeben. Entferne DHCP-zugewiesene DNS-Server für IPv6.”
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ResetServerAddresses -AddressFamily IPv6 -ErrorAction Stop
}
Log-Message „DNS-Server erfolgreich für ‘$InterfaceAlias’ aktualisiert.”
}
catch {
Log-Message „Fehler beim Setzen der DNS-Server für ‘$InterfaceAlias’: $($_.Exception.Message)” „ERROR”
}
}
#endregion Funktionen
#region Hauptlogik
Log-Message „Skriptausführung gestartet.”
# WLAN-Adapter abrufen
$wifiAdapter = Get-NetAdapter -InterfaceAlias $wifiAdapterName -ErrorAction SilentlyContinue
if (-not $wifiAdapter) {
Log-Message „WLAN-Adapter mit dem Namen ‘$wifiAdapterName’ wurde nicht gefunden. Bitte prüfen Sie den Namen.” „ERROR”
exit 1
}
Log-Message „WLAN-Adapter ‘$($wifiAdapter.InterfaceAlias)’ mit IfIndex $($wifiAdapter.IfIndex) gefunden.”
# Aktuelles Netzwerkprofil abrufen
$connectionProfile = Get-NetConnectionProfile -InterfaceIndex $wifiAdapter.IfIndex -ErrorAction SilentlyContinue
$currentSsid = $null
if ($connectionProfile) {
$currentSsid = $connectionProfile.Name
Log-Message „Aktuell verbundene SSID: ‘$currentSsid'”
} else {
Log-Message „Keine aktive Netzwerkverbindung über den WLAN-Adapter ‘$wifiAdapterName’ gefunden. Setze auf Standard-DNS.”
}
$targetDnsIPv4 = $defaultDnsServersIPv4
$targetDnsIPv6 = $defaultDnsServersIPv6
$isFallback = $true
if ($currentSsid -and $dnsMapping.ContainsKey($currentSsid)) {
$ssidConfig = $dnsMapping[$currentSsid]
if ($ssidConfig.ContainsKey(„IPv4”)) {
$targetDnsIPv4 = $ssidConfig.IPv4
} else {
$targetDnsIPv4 = $null # Wenn SSID spezifisch ist, aber kein IPv4 definiert, lösche vorhandene statische
}
if ($ssidConfig.ContainsKey(„IPv6”)) {
$targetDnsIPv6 = $ssidConfig.IPv6
} else {
$targetDnsIPv6 = $null # Wenn SSID spezifisch ist, aber kein IPv6 definiert, lösche vorhandene statische
}
$isFallback = $false
Log-Message „SSID ‘$currentSsid’ in der Zuordnung gefunden. Verwende spezifische DNS-Server.”
} elseif ($currentSsid) {
Log-Message „SSID ‘$currentSsid’ nicht in der Zuordnung gefunden. Verwende Fallback-DNS-Server.”
}
# DNS-Server setzen
Set-DnsClient -InterfaceAlias $wifiAdapter.InterfaceAlias -IPv4Servers $targetDnsIPv4 -IPv6Servers $targetDnsIPv6
Log-Message „Skriptausführung abgeschlossen.”
#endregion Hauptlogik
„`
**Anpassungen am Skript:**
1. **`$wifiAdapterName`**: Passen Sie diesen Wert an den tatsächlichen Namen Ihres WLAN-Adapters an (standardmäßig oft „Wi-Fi”).
2. **`$defaultDnsServersIPv4` und `$defaultDnsServersIPv6`**: Definieren Sie hier die DNS-Server, die verwendet werden sollen, wenn die aktuell verbundene SSID nicht in Ihrer `$dnsMapping`-Tabelle enthalten ist, oder wenn keine Verbindung besteht. Dies ist Ihr sicherer Fallback.
3. **`$dnsMapping`**: Dies ist der wichtigste Teil. Fügen Sie hier alle Ihre SSIDs und die jeweils gewünschten IPv4- und/oder IPv6-DNS-Server hinzu. Achten Sie auf die genaue Schreibweise der SSIDs. Wenn Sie für eine SSID nur IPv4- oder nur IPv6-DNS konfigurieren möchten, lassen Sie den entsprechenden Schlüssel (`”IPv4″` oder `”IPv6″`) einfach weg. Das Skript wird dann für den nicht definierten Adresstyp die DHCP-zugewiesenen DNS-Server (mittels `-ResetServerAddresses`) wiederherstellen.
Schritt 4: Automatisierung mit der Aufgabenplanung (Task Scheduler)
Das Skript allein ist nur die halbe Miete. Damit es automatisch bei jedem WLAN-Wechsel ausgeführt wird, nutzen wir die Windows-Aufgabenplanung. Wir werden eine Aufgabe erstellen, die durch bestimmte Ereignisse im Windows-Ereignisprotokoll ausgelöst wird, die eine Änderung des Netzwerkprofils oder eine WLAN-Verbindung signalisieren.
1. **Aufgabenplanung öffnen:** Suchen Sie im Startmenü nach „Aufgabenplanung” und öffnen Sie diese.
2. **Neue Aufgabe erstellen:** Klicken Sie im rechten Bereich auf „Aufgabe erstellen…”.
* **Allgemein:**
* **Name:** Geben Sie einen aussagekräftigen Namen ein, z. B. „SSID-abhängige DNS-Konfiguration”.
* **Beschreibung:** „Konfiguriert DNS-Server basierend auf der aktuellen SSID.”
* Wählen Sie „Unabhängig von Benutzeranmeldung ausführen” (empfohlen für maximale Zuverlässigkeit).
* Haken Sie „Mit höchsten Berechtigungen ausführen” an.
* Konfigurieren Sie für „Windows 10” oder „Windows 11” (je nach Systemversion).
* **Trigger:** Hier definieren wir, wann das Skript ausgeführt werden soll. Wir nutzen Ereignisse aus dem Windows-Ereignisprotokoll.
* Klicken Sie auf „Neu…”.
* Wählen Sie unter „Aufgabe starten” die Option „Bei einem Ereignis”.
* **Protokoll:** `Microsoft-Windows-NetworkProfile/Operational`
* **Quelle:** `NetworkProfile`
* **Ereignis-ID:** `10000` (Dieses Ereignis wird ausgelöst, wenn ein Netzwerkprofil erkannt oder verbunden wird).
* Klicken Sie auf „OK”.
* **Erstellen Sie einen ZWEITEN Trigger (optional, aber empfohlen für umfassende Abdeckung):**
* Klicken Sie erneut auf „Neu…”.
* Wählen Sie unter „Aufgabe starten” die Option „Bei einem Ereignis”.
* **Protokoll:** `Microsoft-Windows-WLAN-AutoConfig/Operational`
* **Quelle:** `Microsoft-Windows-WLAN-AutoConfig`
* **Ereignis-ID:** `8001` (Dieses Ereignis wird ausgelöst, wenn eine WLAN-Verbindung erfolgreich hergestellt wurde).
* Klicken Sie auf „OK”.
* **Aktionen:** Hier definieren wir, was das Skript ausführen soll.
* Klicken Sie auf „Neu…”.
* **Aktion:** „Programm starten”.
* **Programm/Skript:** `powershell.exe`
* **Argumente hinzufügen (optional):** `-NoProfile -ExecutionPolicy Bypass -File „C:ScriptsSet-SSIDSpecificDNS.ps1″`
* `-NoProfile`: Verhindert das Laden von PowerShell-Profilen, was die Ausführung beschleunigt und potenzielle Konflikte vermeidet.
* `-ExecutionPolicy Bypass`: Ermöglicht die Ausführung des Skripts, auch wenn die Ausführungsrichtlinie standardmäßig strenger eingestellt ist. Dies ist für Aufgabenplanungsszenarien gängig.
* `-File „C:ScriptsSet-SSIDSpecificDNS.ps1″`: Der Pfad zu Ihrem PowerShell-Skript. Passen Sie diesen an!
* Klicken Sie auf „OK”.
* **Bedingungen:** Hier können Sie zusätzliche Bedingungen festlegen (z. B. nur ausführen, wenn der Computer im Leerlauf ist). Für unsere Aufgabe sind die Standardeinstellungen meist ausreichend.
* **Einstellungen:**
* Stellen Sie sicher, dass „Aufgabe ausführen, sobald wie möglich, nachdem ein geplanter Start verpasst wurde” aktiviert ist.
* Konfigurieren Sie „Wenn die Aufgabe bereits ausgeführt wird, dann die folgende Regel anwenden: Eine neue Instanz starten”.
3. **Aufgabe speichern:** Klicken Sie auf „OK”. Sie werden möglicherweise aufgefordert, die Anmeldeinformationen eines Benutzerkontos mit Administratorrechten einzugeben, um die Option „Unabhängig von Benutzeranmeldung ausführen” zu aktivieren.
Testen Sie nun die Konfiguration, indem Sie zwischen Ihren definierten WLAN-Netzwerken wechseln. Überprüfen Sie mit `ipconfig /all` oder `Get-DnsClientServerAddress -InterfaceAlias „Wi-Fi”`, ob die DNS-Server korrekt zugewiesen wurden.
Erweiterte Überlegungen und Best Practices
* Fehlerbehandlung und Protokollierung: Das bereitgestellte Skript enthält eine einfache `Log-Message`-Funktion. Für produktive Umgebungen sollten Sie eine robustere Protokollierung implementieren, die Fehler, Warnungen und erfolgreiche Ausführungen in eine dedizierte Log-Datei schreibt. Dies erleichtert die Fehlerbehebung erheblich.
* IPv6-Integration: Das Skript unterstützt bereits IPv6. Stellen Sie sicher, dass Sie sowohl für IPv4 als auch für IPv6 die entsprechenden DNS-Server in Ihrer `$dnsMapping`-Tabelle definieren, wenn Ihr Netzwerk und Ihre Anwendungen IPv6 nutzen.
* Fallback-Strategie: Die `$defaultDnsServersIPv4`/`$defaultDnsServersIPv6` sind entscheidend. Sie gewährleisten, dass Ihr System auch dann funktionstüchtig bleibt, wenn Sie sich mit einer unbekannten SSID verbinden.
* Netzwerkadapter-Robustheit: Der Adaptername „Wi-Fi” ist meist stabil, kann aber durch Umbenennung oder bei Systemmigrationen variieren. Eine noch robustere Methode wäre die Identifizierung über `InterfaceDescription` (z.B. `”Intel(R) Wi-Fi 6 AX201 160MHz”`) oder die `GUID` des Adapters, obwohl dies das Skript komplexer macht. Für die meisten Einzelplatzsysteme ist `InterfaceAlias` ausreichend.
* PowerShell Execution Policy: Achten Sie darauf, dass die Execution Policy das Ausführen von Skripten erlaubt. `-ExecutionPolicy Bypass` in den Aufgabenplanungsparametern umgeht dies zwar, es ist aber gut zu wissen, was im Hintergrund passiert. Für normale Skriptausführung kann `Set-ExecutionPolicy RemoteSigned` eine gute Balance zwischen Sicherheit und Funktionalität bieten.
* DoH/DoT: Dieses Skript konfiguriert traditionelle, unverschlüsselte DNS-Server. Für die Nutzung von DNS-over-HTTPS (DoH) oder DNS-over-TLS (DoT) sind separate Einstellungen in Windows (ab Windows 11) oder die Verwendung spezieller Clients erforderlich, die über den Umfang dieses Artikels hinausgehen.
* Deaktivierung der Aufgabe: Sollten Sie diese Funktion nicht mehr benötigen, deaktivieren oder löschen Sie die Aufgabe einfach über die Aufgabenplanung.
Fazit
Die Fähigkeit, unterschiedliche DNS-Server automatisch pro SSID unter Windows 11 zu konfigurieren, ist ein mächtiges Werkzeug für IT-Profis und fortgeschrittene Nutzer. Sie ermöglicht eine fein abgestimmte Netzwerkoptimierung, erhöht die Sicherheit und sorgt für einen reibungslosen Zugriff auf spezifische Ressourcen in heterogenen Netzwerkumgebungen. Mit der hier vorgestellten Kombination aus PowerShell-Skripting und der Windows-Aufgabenplanung haben Sie eine flexible und automatisierte Lösung zur Hand, die die Effizienz und Robustheit Ihrer Netzwerkverbindungen erheblich verbessert. Implementieren Sie diese Strategie, um Ihre täglichen Abläufe zu optimieren und die Kontrolle über Ihre DNS-Konfiguration vollständig zu übernehmen.