Anleitungen

Hosts-Datei unter Windows, macOS und Linux bearbeiten: Pfad, Syntax und warum Änderungen ignoriert werden

Hosts-Datei unter Windows bearbeiten: Pfad C:\Windows\System32\drivers\etc\hosts, Editor als Admin, /etc/hosts auf Mac und Linux, DNS-Cache leeren.

Veröffentlicht ~8 Min. Lesezeit
Auf dieser Seite

Kurz gesagt: Die Hosts-Datei unter Windows liegt unter C:\Windows\System32\drivers\etc\hosts. Starte den Editor als Administrator, öffne die Datei, füge eine Zeile mit IP-Adresse und Namen hinzu, etwa 203.0.113.10 example.com, und speichere. Unter macOS und Linux öffnest du sie mit sudo nano /etc/hosts und trägst dieselbe Zeile ein. Danach leerst du den DNS-Cache, damit der neue Eintrag sofort greift.

SystemDateiBearbeiten mitDanach leeren
Windows 10, 11, ServerC:\Windows\System32\drivers\etc\hostsEditor (Notepad), als Administrator ausgeführtipconfig /flushdns
macOS/etc/hostssudo nano /etc/hostssudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux/etc/hostssudoedit /etc/hostsNur wenn ein Cache läuft (systemd-resolved, nscd)

Die Hosts-Datei (oft auch „Host-Datei“ genannt) ist die älteste Namensauflösung überhaupt: eine schlichte Texttabelle, die dein eigener Rechner prüft, bevor er DNS fragt. Was dort steht, gewinnt auf genau dieser einen Maschine und nirgends sonst. Damit ist sie der übliche Weg, eine Website auf einem neuen Server vorab anzusehen, eine Domain zu sperren oder einem lokalen Projekt einen Namen zu geben. Die Syntax unten folgt den Manpages hosts(5) und nsswitch.conf(5) sowie dem Kommentarblock in der Hosts-Datei von Windows selbst; die getent-Ausgabe und die nsswitch.conf-Zeile weiter unten haben wir auf Debian 12 mit glibc 2.36 geprüft.

Syntax der Hosts-Datei: erst die Adresse, dann die Namen

hosts
# Zeilen, die mit # beginnen, sind Kommentare
127.0.0.1       localhost
::1             localhost

203.0.113.10    example.com www.example.com    # neuer Server, nach dem Umzug entfernen
0.0.0.0         ads.example.net
127.0.0.1       myshop.test
  • Erst die Adresse, dann ein oder mehrere Namen, getrennt durch Leerzeichen oder Tabs. Der erste Name ist der kanonische, die übrigen sind Aliase.
  • IPv4 und IPv6 funktionieren beide. Ein Name darf für jede eine eigene Zeile haben.
  • Alles nach # ist ein Kommentar, in einer eigenen Zeile oder am Ende eines Eintrags.
  • Nur exakte Namen. Keine Wildcards (*.example.com funktioniert nicht), example.com und www.example.com sind also zwei verschiedene Namen.
  • Keine Ports, Pfade oder http://. Die Datei ordnet Namen Adressen zu, mehr nicht. Sie kann example.com weder auf Port 8080 noch auf eine andere URL umleiten.
  • Nur Adressen. Mail- und andere Eintragstypen kommen weiterhin aus dem DNS; die Manpage von systemd-resolved sagt das für MX-Abfragen ausdrücklich.

Wie bearbeite ich die Hosts-Datei unter Windows?

  1. 1Den Editor als Administrator starten

    Drück die Windows-Taste, tipp Editor (auf einem englischen Windows Notepad), klick mit der rechten Maustaste darauf und wähle Als Administrator ausführen. Ohne das lässt Windows dich die Datei zwar öffnen, verweigert aber das Speichern.

  2. 2Die Datei öffnen

    Datei → Öffnen, füge C:\Windows\System32\drivers\etc in die Adressleiste ein und stell den Dateityp-Filter von Textdokumente (*.txt) auf Alle Dateien um. Die Datei heißt hosts, ohne Dateiendung.

  3. 3Zeile hinzufügen und speichern

    Füge den Eintrag am Ende hinzu, zum Beispiel 203.0.113.10 example.com www.example.com, und drück Strg+S. Behalte die Codierung, die der Editor anbietet (UTF-8 oder ANSI).

Dasselbe aus einer PowerShell mit Administratorrechten, ganz ohne Maus:

PowerShell (Administrator)
notepad "$env:windir\System32\drivers\etc\hosts"

# oder eine Zeile direkt anhängen; der Zeilenumbruch vorne schützt eine letzte Zeile ohne Umbruch
Add-Content -Path "$env:windir\System32\drivers\etc\hosts" -Value "`r`n203.0.113.10  example.com www.example.com"

Die typischen Probleme unter Windows drehen sich alle ums Speichern: Eine Meldung wie „Zugriff verweigert“ oder „keine Berechtigung“ beim Speichern heißt, der Editor läuft nicht als Administrator. Eine neue Datei hosts.txt neben der echten heißt, der Filter *.txt war noch aktiv. Und ist die Datei schreibgeschützt (manche Werbeblocker und Sicherheitsprogramme setzen das), entferne zuerst den Haken bei Schreibgeschützt unter Eigenschaften. Windows blendet bekannte Dateiendungen standardmäßig aus, prüf es deshalb in PowerShell mit dir $env:windir\System32\drivers\etc.

Wie bearbeite ich /etc/hosts unter macOS und Linux?

macOS · Linux
sudo nano /etc/hosts        # Zeile einfügen, Strg+O und Enter speichert, Strg+X beendet
# oder unter Linux mit deinem eigenen Editor und einer sicheren temporären Kopie:
sudoedit /etc/hosts

Unter macOS ist /etc ein Link auf /private/etc, beide Pfade meinen also dieselbe Datei. Auf einem Linux-Server lohnt vor dem Bearbeiten ein Blick auf die ersten Zeilen: Steht dort, dass cloud-init die Datei verwaltet (manage_etc_hosts), wird sie beim Booten neu geschrieben, und deine Änderung gehört in die Vorlage, die der Kommentar nennt. Auch die Zeile mit dem eigenen Hostnamen der Maschine zählt: Löschst du sie, beschwert sich sudo, wie in temporary failure in name resolution (engl.) beschrieben.

Danach den DNS-Cache leeren

Laut der Manpage hosts(5) wirken Änderungen normalerweise sofort, außer wenn ein Programm die Antworten zwischenspeichert. In der Praxis sind das drei Caches:

  • Der Cache des Systems: ipconfig /flushdns unter Windows, die beiden macOS-Befehle aus der Tabelle oben, und unter Linux nur dort, wo ein Cache-Dienst läuft. systemd-resolved liest /etc/hosts selbst, bevor es irgendeinen DNS-Server fragt; hängt eine alte Antwort fest, leert sudo resolvectl flush-caches seinen Cache. Alle Varianten stehen in DNS-Cache leeren (engl.).
  • Der eigene Cache des Browsers: In Chrome öffnest du chrome://net-internals/#dns (in Edge edge://net-internals/#dns) und klickst auf Clear host cache; in Firefox öffnest du about:networking#dns und klickst dort auf DNS-Cache leeren.
  • Offene Verbindungen: Ein Browser, der schon eine Keep-alive-Verbindung zur alten Adresse hat, nutzt sie weiter. In Chrome hilft chrome://net-internals/#sockets → Flush socket pools, oder du startest den Browser einfach neu.

Wie prüfe ich, ob der Eintrag wirkt?

Nimm ein Werkzeug, das Namen so auflöst wie Anwendungen. nslookup und dig tun das nicht: Sie schicken die Anfrage direkt an einen DNS-Server und lesen die Hosts-Datei nie. Deshalb zeigen sie weiter die alte Adresse, auch wenn dein Eintrag längst funktioniert.

Windows (PowerShell)
ping -n 1 example.com              # "Ping wird ausgeführt für example.com [203.0.113.10]" = Hosts-Eintrag genutzt
Resolve-DnsName example.com        # liest die Hosts-Datei; -NoHostsFile überspringt sie
Linux
getent hosts example.com          # geht über nsswitch.conf, wie jedes Programm
getent hosts localhost
# ::1             localhost ip6-localhost ip6-loopback

Die letzte Ausgabe stammt von einem echten Debian-12-Server. Für eine Website gibt curl -sv -o /dev/null https://example.com/ eine Zeile wie Trying 203.0.113.10:443 aus, also die Adresse, mit der curl sich tatsächlich verbunden hat.

Wofür ist die Hosts-Datei gut?

Eine Website auf einem neuen Server testen, bevor du DNS umstellst

Lass die Domain nur auf deinem eigenen Rechner auf den neuen Server zeigen, klick dort die ganze Website durch und fass DNS erst an, wenn alles funktioniert. Alle anderen landen in der Zwischenzeit weiter auf dem alten Server. Trag auch eine Zeile für www ein und, falls die Domain einen AAAA-Eintrag hat, eine IPv6-Zeile für den neuen Server: Manche Systeme (macOS ist das übliche Beispiel) nehmen sonst die IPv6-Adresse weiter aus dem DNS, wenn nur eine IPv4-Zeile existiert.

Der Haken ist HTTPS. Ein Let’s-Encrypt-Zertifikat mit HTTP-Prüfung lässt sich noch nicht ausstellen, weil Let’s Encrypt die Domain über das öffentliche DNS auflöst und beim alten Server landet. Kopier für den Test das aktuelle Zertifikat hinüber, nutze die DNS-Prüfung oder akzeptiere die Browserwarnung bei einem Test ohne Logins. Für einen schnellen Blick ganz ohne Dateiänderung macht curl --resolve example.com:443:203.0.113.10 https://example.com/ dasselbe für eine einzelne Anfrage. Der komplette Umzug steht in der Checkliste zur Servermigration (engl.), die DNS-Seite danach in Domain auf einen VPS zeigen lassen (engl.). Entferne die Zeile, wenn du fertig bist, sonst testest du sechs Monate später den falschen Server.

Eine Domain sperren

hosts
0.0.0.0   tracker.example.net
0.0.0.0   www.tracker.example.net

0.0.0.0 ist das übliche Ziel in Sperrlisten, weil es kein echtes Ziel ist, während 127.0.0.1 die Anfrage an den Webserver schickt, der gerade auf deinem eigenen Rechner läuft. (Linux behandelt eine Verbindung zu 0.0.0.0 ebenfalls als lokal, dort verhalten sich beide also gleich.) Jede Subdomain braucht eine eigene Zeile, denn Wildcards gibt es hier nicht. Für einen ganzen Haushalt oder ein Büro ist ein filternder DNS-Resolver leichter aktuell zu halten als eine Hosts-Datei pro Gerät.

Namen für die lokale Entwicklung

Wenn du myshop.test auf 127.0.0.1 zeigen lässt, läuft ein Projekt unter einem echten Hostnamen, was für Cookies, virtuelle Hosts und CORS zählt. Nimm die Top-Level-Domain .test, die RFC 2606 genau dafür reserviert, und nicht .dev: Das ist eine echte Top-Level-Domain, deren Websites Browser nur über HTTPS öffnen. Namen unter .localhost brauchen in Chrome und Firefox gar keinen Eintrag, beide lösen sie von sich aus auf die Loopback-Adresse auf, wie RFC 6761 es empfiehlt.

Warum wird meine Hosts-Datei ignoriert?

UrsacheWoran du es erkennstLösung
Als hosts.txt gespeichertdir zeigt hosts.txt neben hostsMit „Alle Dateien“ erneut speichern, dann hosts.txt löschen
Gar nicht gespeichertBerechtigungsfehler beim SpeichernEditor als Administrator starten oder sudo nutzen
Falsche SyntaxName vor der Adresse, eine URL, ein Port oder eine WildcardEine Zeile: Adresse, Leerzeichen, Name
Mit nslookup oder dig geprüftping oder getent zeigen die neue AdresseNichts zu tun: Diese Werkzeuge überspringen die Hosts-Datei
Browser-Cache oder offene VerbindungTerminal zeigt die neue Adresse, der Browser die alte WebsiteHost-Cache leeren, Socket-Pools leeren, Browser neu starten
VPN oder Proxy löst den Namen aufFunktioniert ohne VPN oder ProxyDomain ausnehmen oder ohne beide testen
IPv6 aus dem DNS (manche Systeme)Die Domain hat einen AAAA-Eintrag, den du nicht überschrieben hastEine IPv6-Zeile für denselben Namen ergänzen
Datei wird neu erzeugtDeine Zeile ist nach einem Neustart wegVorlage von cloud-init, generateHosts von WSL oder die eigene Datei eines Docker-Containers

Sicheres DNS im Browser ist selten schuld, auch wenn es oft verdächtigt wird. Firefox zählt Namen aus der Hosts-Datei laut seiner Entwicklerdokumentation zu den Domains, die es nie über DNS over HTTPS schickt, und der Host-Resolver von Chromium bedient Hosts-Einträge vor jeder DNS-Aufgabe, auch vor sicheren (so steht es in seinem Quellcode, Stand 21.10.2026). Anders ist es bei einem HTTP- oder SOCKS-Proxy mit DNS-Auflösung auf der Gegenseite: Der Browser reicht den Namen an den Proxy weiter, und der Proxy sieht deine Hosts-Datei nie. Dasselbe gilt für manche Apps mit eigenem Resolver.

Linux: die Reihenfolge in /etc/nsswitch.conf

Unter Linux entscheidet die C-Bibliothek, ob die Hosts-Datei vor DNS kommt, und die Zeile hosts: in /etc/nsswitch.conf legt die Reihenfolge fest. Auf dem Debian-12-Server, auf dem wir sie nachgesehen haben, lautet sie:

/etc/nsswitch.conf (Debian 12)
hosts:          files myhostname dns

files ist /etc/hosts, myhostname antwortet für den eigenen Namen der Maschine, und dns kommt zuletzt, die Hosts-Datei gewinnt also. Systeme mit systemd-resolved haben oft zusätzlich einen Eintrag resolve, und resolved liest /etc/hosts selbst (außer bei ReadEtcHosts=no). Hat jemand dns vor files geschoben, wie in einem der Beispiele der Manpage, antwortet DNS zuerst, und die Hosts-Datei ist bestenfalls noch ein Notnagel. getent hosts NAME folgt immer dieser Zeile, deshalb ist es der richtige Test.

Wie setze ich die Hosts-Datei unter Windows zurück?

Die Standard-Hosts-Datei von Windows enthält nur Kommentare, darunter die beiden auskommentierten localhost-Zeilen; localhost löst Windows selbst auf. Zum Zurücksetzen löschst du jede Zeile, die nicht mit # beginnt, oder ersetzt die Datei durch eine leere Datei namens hosts. Dabei geht nichts kaputt: Die nächste Abfrage geht einfach an DNS. Unter Linux behältst du die localhost-Zeilen und die Zeile mit dem eigenen Hostnamen der Maschine.

Die Hosts-Datei auf einem VPS

Auf einem gemieteten Server erledigt die Hosts-Datei vor allem Routinearbeit: die Zeile mit dem Hostnamen und manchmal einen Namen für eine Datenbank oder ein Backend auf einer privaten Adresse, damit in den Konfigurationen db1 statt einer IP steht. Für alles, was andere erreichen sollen, legst du stattdessen einen DNS-Eintrag an; die Hosts-Datei antwortet immer nur für die Maschine, auf der sie liegt. Wie Namen von dort an aufgelöst werden, erklärt Was ist DNS? (engl.), und wenn ein Name gar nicht aufgelöst wird, fang mit DNS_PROBE_FINISHED_NXDOMAIN (engl.) an.

Häufige Fragen

Wo liegt die Hosts-Datei unter Windows?

Unter C:\Windows\System32\drivers\etc\hosts, eine Datei namens hosts ohne Dateiendung. Öffne den Editor als Administrator, stell den Dateifilter von Textdokumente auf Alle Dateien um und öffne sie aus diesem Ordner. Ohne Administratorrechte kannst du sie lesen, aber nicht speichern.

Muss ich nach dem Bearbeiten der Hosts-Datei neu starten?

Nein. Änderungen wirken normalerweise sofort. Leere unter Windows mit ipconfig /flushdns, unter macOS mit sudo dscacheutil -flushcache und sudo killall -HUP mDNSResponder die Antworten, die vor der Änderung zwischengespeichert wurden, und leere den Host-Cache des Browsers oder starte ihn neu, weil eine offene Verbindung zur alten Adresse sonst weiter genutzt wird.

Warum funktioniert meine Hosts-Datei nicht?

Die üblichen Ursachen: als hosts.txt gespeichert, nie gespeichert, weil der Editor keine Administratorrechte hatte, ein falsches Zeilenformat (die Adresse kommt zuerst, ohne Port und ohne http://), ein Browser mit zwischengespeicherter Antwort oder offener Verbindung, ein VPN oder Proxy, der Namen selbst auflöst, oder ein AAAA-Eintrag im DNS, den ein reiner IPv4-Eintrag auf manchen Systemen wie macOS nicht überschreibt. Prüf mit ping oder getent hosts, nicht mit nslookup oder dig, die die Hosts-Datei überspringen.