Файл /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 — він допоможе вам розв’язати цю задачу.

Поділись статтею з друзями