Руководства

Файл hosts в Windows 10 и 11, macOS и Linux: где находится, как изменить и почему не работает

Файл hosts в Windows 10 и 11 лежит в C:\Windows\System32\drivers\etc. Как открыть его Блокнотом от имени администратора, синтаксис и почему правки не работают.

Опубликовано ~9 мин чтения
На этой странице

Коротко: файл 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, ServerC:\Windows\System32\drivers\etc\hostsБлокнот, запущенный от имени администратораipconfig /flushdns
macOS/etc/hostssudo nano /etc/hostssudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux/etc/hostssudoedit /etc/hostsТолько если работает кэш (systemd-resolved, nscd)

Файл hosts — самый старый способ разрешения имён: обычная текстовая таблица, которую компьютер проверяет до того, как спросить DNS. Всё, что в нём записано, действует на этой одной машине и больше нигде, поэтому hosts — стандартный способ посмотреть сайт на новом сервере до переключения DNS, заблокировать домен или дать локальному проекту имя. Синтаксис ниже описан по man-страницам hosts(5) и nsswitch.conf(5) и по блоку комментариев в самом файле hosts Windows; вывод getent получен на сервере с Debian 12 и glibc 2.36.

Синтаксис файла hosts: сначала адрес, потом имена

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. 1Запустите Блокнот от имени администратора

    Нажмите клавишу Windows, введите Блокнот (или Notepad), щёлкните по нему правой кнопкой и выберите Запуск от имени администратора. Без этого Windows даст открыть файл, но не даст его сохранить.

  2. 2Откройте файл

    Файл → Открыть, вставьте C:\Windows\System32\drivers\etc в адресную строку и переключите фильтр типа файлов с Текстовые документы (*.txt) на Все файлы (*.*). Файл называется hosts, без расширения.

  3. 3Добавьте строку и сохраните

    Допишите запись в конец, например 203.0.113.10 example.com www.example.com, и нажмите Ctrl+S. Кодировку оставьте ту, что предлагает Блокнот (UTF-8 или ANSI).

То же самое из PowerShell, запущенного от имени администратора, без мыши:

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

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 (в Edge edge://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, поэтому продолжают показывать старый адрес, даже когда ваша запись работает.

Windows (PowerShell)
ping -n 1 example.com              # адрес [203.0.113.10] в ответе: сработала запись из hosts
Resolve-DnsName example.com        # читает файл hosts; с -NoHostsFile пропускает его
Linux
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 (англ.). Когда закончите, удалите строку, иначе через полгода будете проверять не тот сервер.

Заблокировать домен

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

0.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.txtdir показывает hosts.txt рядом с hostsСохраните заново с выбранным «Все файлы», затем удалите hosts.txt
Файл вообще не сохранилсяОшибка прав доступа при сохраненииЗапустите редактор от имени администратора или через sudo
Неверный синтаксисИмя перед адресом, URL, порт или подстановочный знакОдна строка: адрес, пробел, имя
Проверка через nslookup или digping или 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, где мы её смотрели, строка такая:

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

files — это /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 разрешает сама. Конец стандартного файла выглядит так:

hosts (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 не читают.

Читайте также

Все статьи раздела