Artikel

Automatische Aktualisierung der Windows-Hosts-Datei mit FritzBox-DHCP-Namen

LinuxNetzwerkOracle VM

Warum brauche ich das?

Wer mit virtuellen Maschinen (VMs) auf einem Notebook arbeitet, kennt das Problem: Zuhause sind die VMs problemlos per Hostnamen erreichbar, weil die FritzBox als DHCP-Server die Namensauflösung übernimmt. Doch unterwegs oder in einem fremden Netzwerk klappt das nicht mehr – die Hostnamen werden nicht aufgelöst, und der Zugriff auf die VMs ist nur noch per IP-Adresse möglich.

Die manuelle Lösung besteht darin, die Datei C:\Windows\System32\drivers\etc\hosts zu pflegen und die Namen samt IP-Adressen der VMs einzutragen. Doch das ist mühsam und fehleranfällig. Die bessere Lösung? Ein PowerShell-Skript, das diese Datei automatisch mit den aktuellen DHCP-Geräten aus der FritzBox synchronisiert.

In diesem Artikel zeige ich, wie ich meine Windows-Hosts-Datei so automatisiere, dass meine VMs immer erreichbar bleiben – egal, ob ich zu Hause oder unterwegs bin.


Die Lösung: Ein PowerShell-Skript

Die FritzBox stellt über ihr Webinterface eine Liste aller im Netzwerk registrierten Geräte bereit, inklusive IP-Adressen und Hostnamen. Das PowerShell-Skript ruft diese Daten ab, filtert die relevanten Einträge heraus und aktualisiert die hosts-Datei auf meinem Windows-Notebook.

Hier ist das Skript, das ich in C:\Scripts\Update-Hosts.ps1 speichere:

# FritzBox URL
$fritzBoxUrl = "http://fritz.box"
$hostsFile = "C:\Windows\System32\drivers\etc\hosts"
$tempFile = "C:\Scripts\hosts_fritz.tmp"

# Hole die DHCP-Geräteliste von der FritzBox
$deviceList = Invoke-WebRequest -Uri "$fritzBoxUrl/data.lua?page=netDev" -UseBasicParsing | Select-Object -ExpandProperty Content

# Extrahiere IP-Adressen und Hostnamen
$matches = [regex]::Matches($deviceList, '"ip":"(?<ip>[\d\.]+)","name":"(?<name>[^\"]+)"')

# Sicherstellen, dass eine Datei existiert
New-Item -ItemType File -Path $tempFile -Force | Out-Null

# Header für die neue Hosts-Datei
"### FritzBox-DHCP-Hosts ###" | Set-Content -Path $tempFile

# Füge jedes Gerät in die Hosts-Datei ein
foreach ($match in $matches) {
    $ip = $match.Groups["ip"].Value
    $name = $match.Groups["name"].Value
    "$ip`t$name" | Add-Content -Path $tempFile
}

# Backup der aktuellen Hosts-Datei anlegen
Copy-Item -Path $hostsFile -Destination "$hostsFile.bak" -Force

# Aktualisiere die Hosts-Datei (mit Admin-Rechten)
Get-Content $hostsFile | Where-Object { $_ -notmatch "### FritzBox-DHCP-Hosts ###" } | Set-Content $hostsFile
Get-Content $tempFile | Add-Content -Path $hostsFile


Automatische Ausführung als geplante Aufgabe

Damit das Skript regelmäßig läuft, richte ich es in der Windows-Aufgabenplanung ein:

Schritt 1: Skript mit Admin-Rechten testen

  • PowerShell als Administrator öffnen
  • Skript manuell ausführen: powershell -ExecutionPolicy Bypass -File C:\Scripts\Update-Hosts.ps1
  • Falls die Hosts-Datei korrekt aktualisiert wird, ist alles bereit für die Automatisierung.

Schritt 2: Geplante Aufgabe erstellen

  1. Windows-Taste + R drücken, taskschd.msc eingeben und Enter.
  2. Neue Aufgabe erstellen:
    • Name: FritzBox DHCP Hosts aktualisieren
    • Haken setzen bei Mit höchsten Rechten ausführen (weil hosts-Datei Admin-Rechte braucht).
  3. Trigger hinzufügen:
    • „Bei Anmeldung“ oder „Alle 30 Minuten“ (je nach Bedarf).
  4. Aktion hinzufügen:
    • Programm: powershell.exe
    • Argumente: -ExecutionPolicy Bypass -File C:\Scripts\Update-Hosts.ps1
  5. Speichern & Testen:
    • Aufgabe manuell starten → Rechtsklick → „Ausführen“.
    • Prüfen, ob die FritzBox-Namen in C:\Windows\System32\drivers\etc\hosts eingetragen wurden.

Ergebnis

Hostnamen meiner FritzBox-DHCP-Geräte werden automatisch aktualisiert.
Windows kann meine VMs per Hostnamen ansprechen, auch ohne FritzBox-DNS.
Läuft im Hintergrund als geplante Aufgabe, keine manuelle Pflege nötig.

Jetzt kann ich meine VMs unterwegs einfach per Hostnamen erreichen, egal in welchem Netzwerk ich mich befinde. Problem gelöst! 🚀

0 Kommentare