Файл /etc/hosts

Опубликовано
17 декабря 2024 г.
Обновлено
17 декабря 2024 г.
Теги

На этой неделе возникла задача, в которой мне нужно было локально протестировать работоспособность внешнего ресурса. Загвоздка была в том, что у ресурса было ограничение на работу только на заданном перечне доменов. В этот момент я вспомнил про способ с переопределением адреса ресурса в файле /etc/hosts. И это сработало!

Давай разберём подробнее, что это за файл и чем он может быть нам полезен.

Что такое файл hosts?

Это текстовый файл, который может содержать:

  • Строки вида: IP-адрес + имя хоста (домен) + алиас (не обязательно), разделённые пробелами. IP-адрес может быть IPv4 или IPv6.
  • Комментарии — текст, начинающийся с ”#”.

Пример того, как он может выглядеть:

# Это loopback-адрес в IPv4
127.0.0.1 localhost
# Это loopback-адрес в IPv6
::1       localhost

# Переопределённый адрес
127.0.0.1 skandar.dev

Его местоположение в разных операционных системах отличается:

  • В macOS, Unix и Unix-подобных системах — по адресу /etc/hosts.
  • В Windows — C:\​Windows\​System32\​drivers\​etc\​hosts.

Более подробно можно почитать здесь.

Редактировать этот файл можно только с правами суперпользователя (администратора).

Зачем он нужен?

При разрешении имени хоста система сначала проверяет, есть ли запись с таким хостом в файле hosts. Если такой хост в файле есть, то будет возвращён IP-адрес, указанный в файле, и дальше система уже не запрашивает DNS-сервер.

Давай рассмотрим, какие распространённые сценарии использования могут быть.

  • Ускорение разрешения адреса. Мы можем «подсказать» системе, какой IP-адрес соответствует домену. Так как система знает IP-адрес, ей не нужно делать DNS-запрос, и таким образом мы сокращаем время ответа на длительность этого запроса.
  • Блокировка рекламы, трекеров и вредоносных сайтов. Используя hosts, мы можем блокировать запросы к рекламным сервисам и трекерам. Есть даже общедоступные списки с такими доменами: пример и ещё один.
  • Блокировка сервера лицензий. Пиратские приложения могут таким образом блокировать запросы к серверу лицензий, чтобы он не заблокировал взломанное приложение или не сбросил пиратскую активацию. В альтернативном варианте подменяется адрес сервера лицензий на нужный пиратам, и тогда приложение «думает», что сервер недоступен, и продолжает работать в офлайн-режиме.
  • Блокировка обновлений систем безопасности. Злоумышленники таким образом могут предотвратить обновление антивируса.
  • Перенаправление трафика через серверы злоумышленников. В сочетании с другими техниками злоумышленники могут использовать поддельные DNS-записи в hosts для перенаправления трафика через сервер злоумышленника. Это позволяет перехватывать данные, менять их “на лету” или внедрять вредоносный контент.
  • Получение доступа. Домен может быть недоступен по причине технической неполадки или блокировки со стороны провайдера. Если мы знаем IP-адрес ресурса, то можем указать его в hosts, и система не будет делать запросы к DNS-серверу провайдера.

Польза в разработке

Переопределение адресов доменов может быть полезно и в разработке. Рассмотрим несколько примеров использования:

  • Использование сервисов с ограничением по домену. В сервисе может быть список разрешённых доменов, для которых он доступен. Например, API-ключи в Google работают таким образом.
127.0.0.1 skandar.dev
  • Тестирование кода, завязанного на использование домена/субдомена. Например, если приложение доступно в разных странах, то в зависимости от субдомена оно будет на языке соответствующей страны и с необходимыми для неё изменениями. Мы можем «завернуть» домен на localhost, чтобы затем использовать домен с субдоменами локально.
  • Переезд на новый хостинг. При изменении хостинга нужно какое-то время, чтобы обновления дошли до авторитетного DNS-сервера (до 72 часов). Можно не ждать, пока обновления завершатся, а добавить запись с новым IP-адресом, чтобы проверить, как работает приложение на новом хостинге.
  • Подмена внешнего ресурса. Иногда возникает ситуация, когда наше приложение использует сторонний API, и мы хотим подменить его на локальный вариант, например, на локальный дев-сервер. Добавив переопределение адреса в hosts, нам не нужно будет менять код, чтобы это сделать.

Файл hosts — простой, но мощный инструмент, который позволяет управлять локальным переопределением IP-адресов для доменов. Когда нужно будет запустить какой-то код, который работает только с определённым доменом или субдоменом, вспомни про файл hosts — он поможет теб решить эту задачу.

Поделись статьёй с друзьями