Коротко: файл hosts в Windows 10 и 11 лежит по пути C:\Windows\System32\drivers\etc\hosts. Откройте Блокнот от имени администратора, откройте этот файл, добавьте строку с IP-адресом и именем, например 203.0.113.10 example.com, и сохраните. В macOS и Linux выполните sudo nano /etc/hosts и добавьте такую же строку. Затем очистите кэш DNS, чтобы новая запись заработала сразу.
| Система | Файл | Чем править | Затем очистить кэш |
|---|---|---|---|
| Windows 10, 11, Server | C:\Windows\System32\drivers\etc\hosts | Блокнот, запущенный от имени администратора | ipconfig /flushdns |
| macOS | /etc/hosts | sudo nano /etc/hosts | sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
| Linux | /etc/hosts | sudoedit /etc/hosts | Только если работает кэш (systemd-resolved, nscd) |
Файл hosts — самый старый способ разрешения имён: обычная текстовая таблица, которую компьютер проверяет до того, как спросить DNS. Всё, что в нём записано, действует на этой одной машине и больше нигде, поэтому hosts — стандартный способ посмотреть сайт на новом сервере до переключения DNS, заблокировать домен или дать локальному проекту имя. Синтаксис ниже описан по man-страницам hosts(5) и nsswitch.conf(5) и по блоку комментариев в самом файле hosts Windows; вывод getent получен на сервере с Debian 12 и glibc 2.36.
Синтаксис файла hosts: сначала адрес, потом имена
# строки, начинающиеся с #, это комментарии
127.0.0.1 localhost
::1 localhost
203.0.113.10 example.com www.example.com # новый сервер, удалить после переезда
0.0.0.0 ads.example.net
127.0.0.1 myshop.test- Сначала адрес, затем одно или несколько имён через пробелы или табуляцию. Первое имя каноническое, остальные — псевдонимы.
- Работают и IPv4, и IPv6. У одного имени может быть по строке на каждый.
- Всё после
#— комментарий, на отдельной строке или в конце записи. - Только точные имена. Подстановочных знаков нет (
*.example.comне работает), поэтомуexample.comиwww.example.com— разные имена. - Никаких портов, путей и
http://. Файл сопоставляет имена с адресами, и только. Отправитьexample.comна порт 8080 или на другой URL он не может. - Только адреса. Почтовые и другие типы записей по-прежнему приходят из DNS; man-страница systemd-resolved прямо говорит об этом для запросов MX.
Как изменить файл hosts в Windows 10 и 11
- 1Запустите Блокнот от имени администратора
Нажмите клавишу Windows, введите
Блокнот(илиNotepad), щёлкните по нему правой кнопкой и выберите Запуск от имени администратора. Без этого Windows даст открыть файл, но не даст его сохранить. - 2Откройте файл
Файл → Открыть, вставьте
C:\Windows\System32\drivers\etcв адресную строку и переключите фильтр типа файлов с Текстовые документы (*.txt) на Все файлы (*.*). Файл называетсяhosts, без расширения. - 3Добавьте строку и сохраните
Допишите запись в конец, например
203.0.113.10 example.com www.example.com, и нажмите Ctrl+S. Кодировку оставьте ту, что предлагает Блокнот (UTF-8 или ANSI).
То же самое из PowerShell, запущенного от имени администратора, без мыши:
notepad "$env:windir\System32\drivers\etc\hosts"
# или дописать одну строку напрямую; перевод строки в начале защищает последнюю строку без него
Add-Content -Path "$env:windir\System32\drivers\etc\hosts" -Value "`r`n203.0.113.10 example.com www.example.com"Типичные проблемы в Windows связаны с сохранением. Сообщение об отказе в доступе или об отсутствии разрешения на сохранение значит, что Блокнот запущен не от имени администратора. Новый файл hosts.txt рядом с настоящим значит, что остался включён фильтр *.txt. Если файл помечен только для чтения (так делают некоторые блокировщики рекламы и защитные программы), сначала снимите флажок Только для чтения в его Свойствах. Windows по умолчанию скрывает известные расширения, поэтому проверяйте командой dir $env:windir\System32\drivers\etc в PowerShell.
Как изменить /etc/hosts в macOS и Linux
sudo nano /etc/hosts # добавьте строку, Ctrl+O и Enter для сохранения, Ctrl+X для выхода
# или в Linux, в своём редакторе и через безопасную временную копию:
sudoedit /etc/hostsВ macOS /etc — ссылка на /private/etc, так что оба пути ведут к одному файлу. На Linux-сервере перед правкой посмотрите на первые строки: если там сказано, что файлом управляет cloud-init (manage_etc_hosts), он перезаписывается при загрузке, и изменение нужно вносить в шаблон, который назван в комментарии. Строка с собственным именем машины тоже важна: если её удалить, sudo начинает ругаться, как описано в статье Temporary failure in name resolution (англ.).
После правки очистите кэш DNS
Man-страница hosts(5) говорит, что изменения обычно вступают в силу сразу, кроме случаев, когда программа их кэширует. На практике это три кэша:
- Системный кэш:
ipconfig /flushdnsв Windows, две команды macOS из таблицы выше, а в Linux только там, где работает кэширующая служба. systemd-resolved сам читает/etc/hosts, прежде чем спрашивать какой-либо DNS-сервер; если старый ответ задерживается, его кэш очищаетsudo resolvectl flush-caches. Все варианты собраны в статье Как очистить кэш DNS. - Собственный кэш браузера: в Chrome откройте
chrome://net-internals/#dns(в Edgeedge://net-internals/#dns) и нажмите Clear host cache; в Firefox откройтеabout:networking#dnsи нажмите кнопку очистки кэша DNS. - Открытые соединения: браузер, у которого уже есть keep-alive-соединение со старым адресом, продолжает им пользоваться. В Chrome откройте
chrome://net-internals/#socketsи нажмите Flush socket pools или просто перезапустите браузер.
Как проверить, что запись работает
Берите инструмент, который разрешает имена так же, как приложения. nslookup и dig так не делают: они отправляют запрос прямо на DNS-сервер и никогда не читают файл hosts, поэтому продолжают показывать старый адрес, даже когда ваша запись работает.
ping -n 1 example.com # адрес [203.0.113.10] в ответе: сработала запись из hosts
Resolve-DnsName example.com # читает файл hosts; с -NoHostsFile пропускает егоgetent hosts example.com # идёт через nsswitch.conf, как любая программа
getent hosts localhost
# ::1 localhost ip6-localhost ip6-loopbackПоследний вывод настоящий: команду мы выполнили на сервере с Debian 12 и glibc 2.36. Для сайта команда curl -sv -o /dev/null https://example.com/ выводит строку вида Trying 203.0.113.10:443, то есть адрес, к которому curl действительно подключился.
Зачем нужен файл hosts
Проверить сайт на новом сервере до смены DNS
Направьте домен на новый сервер только на своём компьютере, прокликайте там весь сайт и не трогайте DNS, пока всё не заработает. Все остальные тем временем по-прежнему попадают на старый сервер. Добавьте строку и для www, а если у домена есть AAAA-запись, то и строку IPv6 для нового сервера: некоторые системы (обычно приводят в пример macOS) берут IPv6-адрес из DNS, если в hosts есть только строка IPv4.
Загвоздка в HTTPS. Сертификат Let’s Encrypt с проверкой по HTTP пока выпустить нельзя: Let’s Encrypt разрешает домен через публичный DNS и попадает на старый сервер. Для проверки скопируйте текущий сертификат, используйте проверку через DNS или примите предупреждение браузера, если тест обходится без входа в аккаунты. Чтобы быстро посмотреть, не правя никаких файлов, используйте curl --resolve example.com:443:203.0.113.10 https://example.com/: он делает то же самое для одного запроса. Весь переезд описан в чек-листе переноса сервера (англ.), а настройка DNS после него в статье Как направить домен на VPS (англ.). Когда закончите, удалите строку, иначе через полгода будете проверять не тот сервер.
Заблокировать домен
0.0.0.0 tracker.example.net
0.0.0.0 www.tracker.example.net0.0.0.0 — обычная цель в списках блокировки, потому что это не настоящий адрес назначения, а 127.0.0.1 отправляет запрос на веб-сервер, который работает на вашей же машине, если он там есть. (Linux тоже считает соединение с 0.0.0.0 локальным, так что там оба варианта ведут себя одинаково.) Каждому поддомену нужна своя строка, подстановочных знаков здесь нет. Для всего дома или офиса фильтрующий DNS-резолвер проще поддерживать в актуальном виде, чем по файлу hosts на каждом устройстве.
Имена для локальной разработки
Если сопоставить myshop.test с 127.0.0.1, проект можно запускать под настоящим именем хоста, а это важно для cookies, виртуальных хостов и CORS. Используйте домен верхнего уровня .test, зарезервированный именно для этого в RFC 2606, а не .dev: это настоящий домен верхнего уровня, сайты в котором браузеры открывают только по HTTPS. Имена в .localhost в Chrome и Firefox вообще не требуют записи: браузеры сами направляют их на loopback-адрес, как рекомендует RFC 6761.
Почему не работает файл hosts
| Причина | Как распознать | Что сделать |
|---|---|---|
| Сохранён как hosts.txt | dir показывает hosts.txt рядом с hosts | Сохраните заново с выбранным «Все файлы», затем удалите hosts.txt |
| Файл вообще не сохранился | Ошибка прав доступа при сохранении | Запустите редактор от имени администратора или через sudo |
| Неверный синтаксис | Имя перед адресом, URL, порт или подстановочный знак | Одна строка: адрес, пробел, имя |
| Проверка через nslookup или dig | ping или getent показывают новый адрес | Исправлять нечего: эти инструменты пропускают файл hosts |
| Кэш браузера или открытое соединение | В терминале новый адрес, в браузере старый сайт | Очистите host cache, сбросьте socket pools, перезапустите браузер |
| Имя разрешает VPN или прокси | С выключенным VPN или прокси работает | Исключите домен или проверяйте без них |
| IPv6 из DNS (в некоторых системах) | У домена есть AAAA-запись, которую вы не переопределили | Добавьте строку IPv6 для того же имени |
| Файл генерируется заново | После перезагрузки вашей строки нет | Шаблон cloud-init, generateHosts в WSL или собственный файл контейнера Docker |
Безопасный DNS в браузере виноват редко, хотя на него часто грешат. Firefox, по его документации для разработчиков, относит имена из файла hosts к доменам, которые никогда не отправляет через DNS over HTTPS, а резолвер Chromium отдаёт записи из hosts раньше любых DNS-запросов, включая защищённые (это видно в его исходном коде, прочитанном 21.10.2026). Другое дело HTTP- или SOCKS-прокси с удалённым DNS: браузер передаёт имя прокси, а прокси вашего файла hosts не видит. То же касается некоторых приложений со своим собственным резолвером.
Linux: порядок в /etc/nsswitch.conf
В Linux, идёт ли файл hosts раньше DNS, решает библиотека C, а порядок задаёт строка hosts: в /etc/nsswitch.conf. На сервере с Debian 12, где мы её смотрели, строка такая:
hosts: files myhostname dnsfiles — это /etc/hosts, myhostname отвечает за собственное имя машины, а dns стоит последним, так что файл hosts побеждает. В системах с systemd-resolved часто есть ещё запись resolve, а resolved и сам читает /etc/hosts (если не задано ReadEtcHosts=no). Если кто-то переставил dns перед files, как в одном из примеров man-страницы, первым отвечает DNS, и файл hosts в лучшем случае становится запасным вариантом. getent hosts ИМЯ всегда следует этой строке, поэтому и подходит для проверки.
Как восстановить файл hosts в Windows
Стандартный файл hosts в Windows состоит только из комментариев, включая две закомментированные строки с localhost; localhost Windows разрешает сама. Конец стандартного файла выглядит так:
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhostЧтобы вернуть файл к исходному виду, удалите все строки, которые не начинаются с #, или замените файл пустым файлом с именем hosts. Ничего не сломается: следующий запрос просто уйдёт в DNS. В Linux оставляйте строки с localhost и строку с собственным именем машины.
Файл hosts на VPS
На арендованном сервере файл hosts в основном выполняет служебную роль: строка с именем хоста и иногда имя для базы данных или бэкенда на внутреннем адресе, чтобы в конфигах стояло db1, а не IP. Для всего, до чего должны добираться другие люди, публикуйте DNS-запись: файл hosts отвечает только за ту машину, на которой лежит. Как имена разрешаются дальше, описано в статье Что такое DNS, а если имя не разрешается вовсе, начните с DNS_PROBE_FINISHED_NXDOMAIN.
Частые вопросы
Где находится файл hosts в Windows 10?
По пути C:\Windows\System32\drivers\etc\hosts: это файл с именем hosts без расширения. В Windows 11 и Windows Server путь тот же. Запустите Блокнот от имени администратора, в окне «Открыть» переключите фильтр с «Текстовые документы (*.txt)» на «Все файлы (*.*)» и откройте его из этой папки; без прав администратора Windows даст прочитать файл, но не сохранить.
Нужно ли перезагружать компьютер после изменения файла hosts?
Нет. Изменения обычно действуют сразу. Чтобы сбросить ответы, закэшированные до правки, выполните ipconfig /flushdns в Windows или sudo dscacheutil -flushcache и sudo killall -HUP mDNSResponder в macOS, а затем очистите кэш хостов в браузере или перезапустите его: открытое соединение со старым адресом может использоваться и дальше.
Почему не работает файл hosts?
Чаще всего причина одна из этих: файл сохранён как hosts.txt; правка не сохранилась, потому что редактор был запущен без прав администратора; неверен формат строки (сначала адрес, без порта и http://); браузер использует закэшированный ответ или открытое соединение; имя разрешает VPN или прокси; в некоторых системах, например в macOS, AAAA-запись из DNS не перекрыта строкой только для IPv4. Проверяйте через ping или getent hosts, а не через nslookup или dig: они файл hosts не читают.