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.
| System | Datei | Bearbeiten mit | Danach leeren |
|---|---|---|---|
| Windows 10, 11, Server | C:\Windows\System32\drivers\etc\hosts | Editor (Notepad), als Administrator ausgeführt | ipconfig /flushdns |
| macOS | /etc/hosts | sudo nano /etc/hosts | sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
| Linux | /etc/hosts | sudoedit /etc/hosts | Nur 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
# 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.comfunktioniert nicht),example.comundwww.example.comsind also zwei verschiedene Namen. - Keine Ports, Pfade oder
http://. Die Datei ordnet Namen Adressen zu, mehr nicht. Sie kannexample.comweder 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?
- 1Den Editor als Administrator starten
Drück die Windows-Taste, tipp
Editor(auf einem englischen WindowsNotepad), 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. - 2Die Datei öffnen
Datei → Öffnen, füge
C:\Windows\System32\drivers\etcin die Adressleiste ein und stell den Dateityp-Filter von Textdokumente (*.txt) auf Alle Dateien um. Die Datei heißthosts, ohne Dateiendung. - 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:
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?
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/hostsUnter 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 /flushdnsunter Windows, die beiden macOS-Befehle aus der Tabelle oben, und unter Linux nur dort, wo ein Cache-Dienst läuft. systemd-resolved liest/etc/hostsselbst, bevor es irgendeinen DNS-Server fragt; hängt eine alte Antwort fest, leertsudo resolvectl flush-cachesseinen Cache. Alle Varianten stehen in DNS-Cache leeren (engl.). - Der eigene Cache des Browsers: In Chrome öffnest du
chrome://net-internals/#dns(in Edgeedge://net-internals/#dns) und klickst auf Clear host cache; in Firefox öffnest duabout:networking#dnsund 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.
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 siegetent hosts example.com # geht über nsswitch.conf, wie jedes Programm
getent hosts localhost
# ::1 localhost ip6-localhost ip6-loopbackDie 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
0.0.0.0 tracker.example.net
0.0.0.0 www.tracker.example.net0.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?
| Ursache | Woran du es erkennst | Lösung |
|---|---|---|
| Als hosts.txt gespeichert | dir zeigt hosts.txt neben hosts | Mit „Alle Dateien“ erneut speichern, dann hosts.txt löschen |
| Gar nicht gespeichert | Berechtigungsfehler beim Speichern | Editor als Administrator starten oder sudo nutzen |
| Falsche Syntax | Name vor der Adresse, eine URL, ein Port oder eine Wildcard | Eine Zeile: Adresse, Leerzeichen, Name |
| Mit nslookup oder dig geprüft | ping oder getent zeigen die neue Adresse | Nichts zu tun: Diese Werkzeuge überspringen die Hosts-Datei |
| Browser-Cache oder offene Verbindung | Terminal zeigt die neue Adresse, der Browser die alte Website | Host-Cache leeren, Socket-Pools leeren, Browser neu starten |
| VPN oder Proxy löst den Namen auf | Funktioniert ohne VPN oder Proxy | Domain ausnehmen oder ohne beide testen |
| IPv6 aus dem DNS (manche Systeme) | Die Domain hat einen AAAA-Eintrag, den du nicht überschrieben hast | Eine IPv6-Zeile für denselben Namen ergänzen |
| Datei wird neu erzeugt | Deine Zeile ist nach einem Neustart weg | Vorlage 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:
hosts: files myhostname dnsfiles 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.