Файл hosts в Linux находится по пути /etc/hosts. Он связывает доменные имена с IP-адресами без изменения DNS-записей. Чтобы изменить файл, откройте терминал и выполните команду sudo nano /etc/hosts. Добавьте запись в формате IP-адрес домен, сохраните изменения и проверьте результат командой getent hosts имя-домена.
Файл hosts используют для проверки сайта на новом сервере, настройки локальных имен и перенаправления запросов к домену на другой IP-адрес. Записи действуют только на компьютере, где изменен файл.
Как отредактировать файл hosts в Linux
Шаги подходят для Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, Debian 12/13 и других дистрибутивов Linux.
-
1
Откройте терминал и выполните команду:
sudo nano /etc/hostsВведите пароль, если система его запросит. После этого откроется файл
hosts. -
2
Перейдите в конец файла и добавьте строку с IP-адресом и доменным именем. Например:
123.123.123.123 faq-reg.ru www.faq-reg.ruГде:
- 123.123.123.123 — IP-адрес вашего сервера или хостинга
- faq-reg.ru — имя вашего домена,
- www.faq-reg.ru — дополнительное имя, для которого будет использоваться тот же IP-адрес.
Добавьте все имена, которые должны разрешаться в указанный IP-адрес. Например, если сайт открывается с www и без него, укажите оба варианта.
-
3
В редакторе Nano нажмите для сохранения изменений Ctrl + O, затем Enter и Ctrl + X для выхода из редактора.
Перезагружать компьютер обычно не нужно. Однако некоторые службы и приложения кешируют результаты разрешения имен. Если изменение не применяется, проверьте настройки системы и кеш.
Как проверить, что файл hosts работает
Чтобы проверить, применились ли изменения в файле hosts, и убедиться, что сайт отвечает по HTTPS, используйте команды из таблицы ниже.
getent hosts faq-reg.ruresolvectl query faq-reg.rusystemd-resolvedcurl -I https://faq-reg.ruHEAD и показывает заголовки ответаПосле сохранения проверьте, какой IP-адрес система возвращает для домена. Выполните команду:
getent hosts faq-reg.ru
Если запись применяется через системный механизм разрешения имен, в результате должен отображаться указанный в hosts IP-адрес.
В системах с systemd-resolved можно дополнительно проверить разрешение имени:
resolvectl query faq-reg.ru
Команда показывает результат разрешения имени через systemd-resolved. Если служба не используется, эта команда может быть недоступна.
Чтобы проверить ответ веб-сервера, выполните:
curl -I https://faq-reg.ru
Команда отправляет HTTPS-запрос методом HEAD и показывает заголовки ответа. Если сервер возвращает ошибку на HEAD, попробуйте обычный GET-запрос:
curl -v https://faq-reg.ru -o /dev/null
Команда покажет подробности соединения и ответа сервера без сохранения содержимого страницы в файл.
Важно
Результат getent hosts может отличаться от результата в браузере. Некоторые приложения используют собственный механизм разрешения имен или кешируют IP-адреса.
Почему hosts может работать по-разному в Linux
Для диагностики DNS-резолвера и очистки его кеша используйте команды из таблицы ниже. Они применимы в системах с systemd-resolved, другие DNS-службы могут требовать иных команд.
resolvectl statussystemd-resolvedresolvectl statisticssudo resolvectl flush-cachessystemd-resolved, но не кеш приложенийВ Linux порядок поиска IP-адреса зависит от настроек системы. За последовательность обращения к источникам отвечает компонент разрешения имен Name Service Switch (NSS). Его настройки находятся в файле /etc/nsswitch.conf.
Например, строка:
hosts: files dns
означает, что система сначала ищет запись в локальных файлах, в том числе в /etc/hosts. Потом она обращается к DNS, если предыдущий этап не дал результата. Другие правила в этой строке могут менять порядок поиска.
В некоторых дистрибутивах используется systemd-resolved — системный DNS-резолвер, который поддерживает разрешение имен с учетом записей из /etc/hosts и может кешировать результаты. Конкретное поведение зависит от конфигурации системы и способа, которым приложение разрешает имена.
В Ubuntu 24.04 обычно используется systemd-resolved. Проверить состояние службы можно командой:
systemctl status systemd-resolved
Чтобы посмотреть DNS-настройки и состояние резолвера, выполните:
resolvectl status
В отдельных конфигурациях могут использоваться другие средства управления DNS, например resolvconf. Не удаляйте и не заменяйте DNS-службы только ради изменения файла hosts.
На некоторых системах кеширование выполняет служба кеширования имен Name Service Cache Daemon (nscd). Если изменения не применяются, проверьте, запущена ли эта служба, и учитывайте ее кеш.
Как проверить состояние DNS-кеша
Если используется systemd-resolved, выполните:
resolvectl statistics
Команда показывает статистику работы резолвера с данными о кеше. Она не выводит полный список сохраненных доменных имен и IP-адресов.
Почему браузер может не учитывать hosts
Некоторые браузеры используют собственный защищенный DNS — DNS over HTTPS (DoH). Он позволяет отправлять DNS-запросы через HTTPS без использования обычного системного пути разрешения имен для каждого запроса.
Firefox включает защиту DoH по умолчанию в доступных регионах, но может переключаться на системный резолвер в зависимости от настроек и условий сети. Поэтому наличие записи в /etc/hosts не гарантирует одинакового результата во всех браузерах и приложениях.
Если getent hosts возвращает нужный IP-адрес, а сайт в браузере открывается иначе, проверьте настройки защищенного DNS и кеш браузера. Учитывайте, что браузер может использовать собственный механизм разрешения имен. Не отключайте DoH без необходимости: сначала проверьте, действительно ли проблема связана с DNS.
Почему запись может исчезнуть после перезагрузки VPS
В некоторых облачных системах файл /etc/hosts может обновляться автоматически с помощью инструмента cloud-init. Это зависит от конфигурации сервера. По умолчанию cloud-init не управляет файлом hosts, но при включенной настройке manage_etc_hosts может формировать его заново при загрузке.
Проверить упоминания этой настройки в конфигурационных файлах можно командой:
grep -r manage_etc_hosts /etc/cloud/
Отсутствие совпадений не гарантирует, что настройка не задается в другом месте.
Если cloud-init управляет файлом, проверьте его конфигурацию. При значении manage_etc_hosts: true файл формируется на основе шаблона /etc/cloud/templates/hosts.tmpl. Чтобы сохранить собственные записи после перезагрузки, может потребоваться изменить этот шаблон.
Как отменить изменения в hosts
Чтобы вернуть прежнее разрешение доменного имени, снова откройте файл:
sudo nano /etc/hosts
Удалите добавленную строку или поставьте перед ней символ #, чтобы закомментировать запись. Сохраните изменения и проверьте результат:
getent hosts faq-reg.ru
Если система продолжает возвращать старый адрес, проверьте настройки разрешения имен и кеш. Для очистки кеша systemd-resolved выполните:
sudo resolvectl flush-caches
Эта команда очищает только кеш systemd-resolved. Если старый адрес сохраняется в браузере или другом приложении, проверьте его настройки и кеш отдельно.
Частые вопросы
Почему изменения в hosts не работают?
/etc/nsswitch.conf, состояние DNS-резолвера и кеш. Если проблема возникает только в браузере, проверьте его настройки защищенного DNS и кеш.
Может ли DoH обходить файл hosts?
Нужно ли очищать DNS-кеш после изменения hosts?
getent hosts. Для очистки кеша systemd-resolved выполните sudo resolvectl flush-caches. Эта команда не очищает кеш других служб и приложений.
Можно ли заблокировать сайт с помощью файла hosts?
127.0.0.1. Однако это не гарантирует полной блокировки сайта: у него могут быть другие поддомены, а некоторые приложения используют собственные механизмы разрешения имен.
Почему запись в hosts исчезает после перезагрузки VPS?
/etc/hosts обновляет cloud-init. Если включена настройка manage_etc_hosts, записи могут перезаписываться при загрузке. Проверьте конфигурацию и шаблон /etc/cloud/templates/hosts.tmpl.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊