Где находится файл и как он устроен
Файл hosts — самый простой способ сопоставить имя и адрес на одном компьютере. Перед обращением к DNS-серверу система смотрит в него, и если находит нужное имя, сразу использует указанный адрес. Действует правило только для этой машины: на другие устройства сети запись не влияет.
| Система | Путь |
|---|---|
| Windows | C:\Windows\System32\drivers\etc\hosts |
| macOS | /etc/hosts (на самом деле ссылка на /private/etc/hosts) |
| Linux | /etc/hosts |
Файл текстовый, без расширения. Формат: адрес, один или несколько пробелов или табуляция, имя, при необходимости дополнительные имена. Строка, начинающаяся со знака решётки, — комментарий. Пример (пример): строка 127.0.0.1 localhost, а также своя запись 192.168.1.50 nas.home. Подстановочных знаков и масок в файле нет: запись для example.com не сработает для поддомена с приставкой www, если вы не добавите его отдельной строкой.
В чистой системе там несколько комментариев и запись для localhost. Не удаляйте записи для localhost: на них рассчитывают многие программы.
Как отредактировать файл пошагово
Для сохранения нужны права администратора, иначе система откажет с сообщением о доступе.
- Сделайте резервную копию: в Linux и macOS sudo cp /etc/hosts /etc/hosts.bak; в Windows скопируйте файл в другую папку или под другим именем.
- Windows: найдите «Блокнот» в меню «Пуск», щёлкните правой кнопкой и выберите запуск от имени администратора, затем откройте файл через меню «Файл». В окне выбора установите показ всех файлов, иначе hosts не виден.
- macOS и Linux: откройте терминал и выполните sudo nano /etc/hosts либо sudo vi /etc/hosts. В nano сохранение через Ctrl и O, выход через Ctrl и X.
- Добавьте строку в конец файла: адрес, пробел, имя. Комментарий поставьте через решётку, чтобы через полгода помнить, зачем запись.
- Сохраните и убедитесь, что файл не получил расширение .txt: в Блокноте выбирайте тип «Все файлы».
- Сбросьте кэш DNS (см. ниже) и проверьте: ping имя должен показать указанный адрес.
Если Windows не даёт сохранить файл даже при запуске от администратора, чаще всего мешает антивирус, защищающий hosts от изменений: он видит попытку записи и блокирует её. В настройках защитной программы можно разрешить изменение вручную, но сначала убедитесь, что изменяете файл вы сами, а не вредоносная программа.
Сброс кэша после изменений
Система хранит результаты разрешения имён, и новая запись может не подействовать сразу. Команды зависят от системы.
- Windows: ipconfig /flushdns в командной строке от имени администратора. Посмотреть кэш можно командой ipconfig /displaydns.
- macOS: sudo dscacheutil -flushcache, затем sudo killall -HUP mDNSResponder. Точные команды могут зависеть от версии системы.
- Linux: записи hosts читаются напрямую и обычно применяются сразу. Если служба кэширования есть, например systemd-resolved, выполните resolvectl flush-caches; для nscd работает его собственный сброс.
- Браузеры держат собственный кэш имён и соединений. Если система уже применяет запись, а браузер нет, закройте и заново откройте его либо очистите внутренний кэш через страницу сетевых настроек браузера.
Проверьте результат командой ping имя или nslookup: имейте в виду, что nslookup и dig обращаются напрямую к DNS-серверу и не учитывают файл hosts. Поэтому «nslookup не видит мою запись» — обычное явление, а не признак ошибки. Ping и браузер файл учитывают.
Для чего обычно правят hosts
Законные и распространённые задачи такие.
- Проверить сайт на новом сервере до переключения DNS: указываете адрес нового сервера для имени домена и открываете сайт, пока остальные пользователи видят старый.
- Дать удобное имя устройству в домашней сети без настройки DNS на роутере, например для NAS или сервера.
- Локальная разработка: имена вроде project.local для тестовой среды.
- Исключить обращения программы к рекламному или отслеживающему адресу, сопоставив его с 0.0.0.0 или 127.0.0.1. Это работает только для точных имён и на одном устройстве.
- Диагностика: временно направить имя на другой адрес, чтобы понять, виноват ли DNS.
Порядок неоднозначен только в тонких случаях: если для одного имени несколько строк, обычно применяется первая. Старайтесь держать файл в порядке и подписывать записи. После завершения тестирования удаляйте временные строки: забытая запись — частая причина того, что «сайт открывается на старом сервере» спустя месяцы.
Когда файл hosts вызывает проблемы
Если сайт вдруг открывается не тот или не открывается, а в браузере других устройств всё нормально, проверьте hosts на проблемном компьютере. Неожиданные записи для известных сайтов признак того, что файл изменила вредоносная программа: так пытаются перенаправить пользователя на поддельную страницу банка или магазина. В этом случае проверьте систему антивирусом, восстановите файл из резервной копии или приведите к стандартному виду и смените пароли.
Помните про IPv6: у записи может быть отдельная строка для адреса IPv6, и приложение будет использовать её в первую очередь. Проверьте, что нет расхождений между записями IPv4 и IPv6. Для корпоративных компьютеров изменения файла может запрещать политика безопасности, тогда обратитесь к администратору.
Проверка и отладка записей
После правки полезно убедиться, что запись действует, и понять, откуда система берёт адрес. Команда ping имя покажет адрес, на который ушёл пакет, и сразу подтвердит, применилась ли строка. В Windows можно дополнительно выполнить Resolve-DnsName имя в PowerShell: без параметра -DnsOnly командлет учитывает hosts, а с ним игнорирует, и различие результатов однозначно указывает на запись в файле. В Linux аналогичную роль играет getent hosts имя: она использует ту же цепочку, что и обычные программы, и выводит адрес из файла или из DNS.
Если после правки всё осталось по-старому, идите по списку. Проверьте, что строка не закомментирована решёткой в начале. Убедитесь, что между адресом и именем стоит пробел или табуляция и нет посторонних невидимых символов, которые появляются при копировании из документов. Проверьте орфографию имени и что вы правили именно тот файл, а не копию на рабочем столе. Сбросьте кэш системы и перезапустите браузер. Наконец, обратите внимание на то, что приложение может обращаться к серверу не по имени, а по адресу либо использовать собственный механизм разрешения имён, тогда hosts не поможет.
Для нескольких компьютеров дома проще настроить локальные имена на роутере, а hosts оставить для точечных задач на одном устройстве.