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