Файл /etc/hosts
На этой неделе возникла задача, в которой мне нужно было локально протестировать работоспособность внешнего ресурса. Загвоздка была в том, что у ресурса было ограничение на работу только на заданном перечне доменов. В этот момент я вспомнил про способ с переопределением адреса ресурса в файле /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
— он поможет теб решить эту задачу.