Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
DNS Linux

Оволодіння файлом Linux Hosts: Повний посібник з локального контролю DNS

Незалежно від того, чи ви розробник, який тестує нову програму, системний адміністратор, який усуває проблеми з поширенням DNS, чи просто хтось, хто хоче заблокувати відволікаючі веб-сайти, файл /etc/hosts є одним з найпотужніших та недовикористовуваних інструментів у будь-якій системі Linux. Цей посібник надає глибокий практичний огляд всього, що вам потрібно знати — від розуміння того, що таке файл hosts, до його безпечного редагування у вашому середовищі VPS Hosting.

1. Що таке файл hosts?

Файл hosts — це простий текстовий системний файл, який відображає зрозумілі людині імена хостів — такі як www.example.com — на відповідні IP-адреси. Він функціонує як локальний, статичний DNS-резолвер, і, що важливо, операційна система звертається до нього *перед* будь-яким зовнішнім DNS-запитом.

Це означає, що записи у вашому файлі hosts мають абсолютний пріоритет над DNS-записами, повернутими зовнішніми серверами імен. Цю єдину характеристику робить його неймовірно універсальним інструментом для:

  • Локальних середовищ розробки — Тестування веб-сайту під реалістичним доменом без змін живих DNS-записів.
  • Усунення неполадок DNS — Тимчасове примусове розв’язання домену на конкретну IP-адресу для тестування конфігурацій сервера.
  • Блокування веб-сайтів — Перенаправлення небажаних доменів на неспрямовувану адресу, ефективно блокуючи доступ.
  • Тестування staging та перед запуском — Попередній перегляд нової конфігурації сервера перед глобальною зміною DNS.
  • Безпека мережі — Блокування відомих шкідливих доменів на рівні ОС.

> Технічна примітка: На Linux порядок розв’язання керується файлом /etc/nsswitch.conf. Конфігурація за замовчуванням зазвичай розміщує files (тобто /etc/hosts) перед dns, забезпечуючи, що локальні записи завжди перевіряються першими.

2. Де розташований файл hosts на Linux?

На всіх основних дистрибутивах Linux — включаючи Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux та Arch Linux — файл hosts розташований за адресою:

/etc/hosts

Цей шлях є однаковим для всіх дистрибутивів, що полегшує роботу з ним незалежно від вашого середовища. Файл належить root і потребує підвищених привілеїв для редагування.

Вміст за замовчуванням /etc/hosts

Щойно розгорнутий сервер Linux — такий як той, що працює на AlexHost VPS Hosting — зазвичай містить записи за замовчуванням, подібні до наступних:

127.0.0.1       localhost
127.0.1.1       your-hostname.example.com your-hostname

# The following lines are desirable for IPv6 capable hosts
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

Ці записи забезпечують:

    localhost завжди розв’язується на адресу зворотного циклу 127.0.0.1 (IPv4) та ::1 (IPv6).
    Власне ім’я хоста сервера розв’язується локально без необхідності зовнішнього пошуку DNS.
    
    Не видаляйте ці записи за замовчуванням, якщо у вас немає конкретної та добре зрозумілої причини для цього. Їх видалення може спричинити неочікувану поведінку в системних сервісах, доставці пошти та фреймворках додатків.
    3. Розуміння структури файлу Hosts
    Файл hosts дотримується простого, послідовного формату. Кожен непустий, некоментований рядок представляє одне відображення та відповідає такому синтаксису:
    IP_address    hostname    [alias1]    [alias2]    ...
    
    
    
    
    Поле
    Опис
    
    
    
    
    IP_address
    Адреса IPv4 або IPv6, на яку повинна розпізнаватися назва хосту
    
    
    hostname
    Первинна повністю кваліфікована назва домену (FQDN) або коротка назва хосту
    
    
    alias (необов’язково)
    Одна або більше додаткових назв, які повинні розпізнаватися на ту саму IP
    
    
    
    
    Ключові правила форматування
    
    Пробіли: Поля розділяються пробілами або табуляціями. Кілька пробілів допускаються.
    Коментарі: Будь-який текст після символу # у рядку розглядається як коментар і ігнорується системою.
    Чутливість до регістру: Назви хостів не чутливі до регістру на практиці, але нижній регістр є конвенцією.
    Одна IP на рядок: Кожен рядок починається рівно з однією IP-адресою, за якою йдуть одна або більше назв хостів.
    
    Практичні приклади
    Відображення одного домену на localhost:
    127.0.0.1    example.com
    Відображення кількох назв хостів на ту саму IP в одному рядку:
    127.0.0.1    example.com    www.example.com    staging.example.com
    Блокування домену шляхом спрямування його на неспрямовуваний адресу:
    0.0.0.0    ads.tracker.com
    Примусове розпізнавання домену на конкретну IP віддаленого сервера:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Додавання вбудованих коментарів для документації:
    # Local development environment - Project Alpha
    127.0.0.1    alpha.local    api.alpha.local
    
    # Blocked domains - updated 2025-01-15
    0.0.0.0    malicious-site.com
    4. Як редагувати файл Hosts на Linux (Покроково)
    Оскільки /etc/hosts є файлом конфігурації системи, вам потрібні привілеї root або sudo для його модифікації. Нижче наведено повний, безпечний для виробництва робочий процес.
    Крок 1: Створіть резервну копію перед редагуванням
    Це невід’ємна найкраща практика. Завжди робіть резервну копію файлу перед внесенням змін:
    sudo cp /etc/hosts /etc/hosts.bak
    Ви можете перевірити, що резервна копія була створена:
    ls -lh /etc/hosts*
    Якщо щось піде не так, миттєво відновіть її за допомогою:
    sudo cp /etc/hosts.bak /etc/hosts
    Крок 2: Відкрийте файл Hosts за допомогою текстового редактора
    Використання nano (рекомендується для початківців та швидкого редагування):
    sudo nano /etc/hosts
    nano є зручним для користувача, відображає комбінації клавіш внизу екрана та доступний за замовчуванням практично на кожному дистрибутиві Linux.
    Використання vim (переважається досвідченими адміністраторами):
    sudo vim /etc/hosts
    Використання vi (доступний на мінімальних установках):
    sudo vi /etc/hosts
    Крок 3: Додайте, змініть або видаліть записи
    Після відкриття файлу перейдіть до відповідного місця та внесіть свої зміни. Ось найпоширеніші операції:
    Додайте нове відображення (додайте в кінець файлу):
    127.0.0.1    myproject.local    www.myproject.local
    Заблокуйте веб-сайт:
    0.0.0.0    facebook.com    www.facebook.com
    Перевизначте DNS для домену (наприклад, для тестування нового сервера):
    198.51.100.25    mywebsite.com    www.mywebsite.com
    Крок 4: Збережіть та вийдіть з редактора
    У nano:
    
    Натисніть CTRL + O для запису (збереження) файлу.
    Натисніть Enter для підтвердження імені файлу.
    Натисніть CTRL + X для виходу.
    
    У vim або vi:
    
    Натисніть Esc щоб переконатися, що ви в режимі команд.
    Введіть :wq та натисніть Enter для запису та виходу.
    Щоб вийти без збереження, введіть :q! та натисніть Enter.
    
    Крок 5: Перевірте синтаксис ваших змін
    Перед тестуванням візуально підтвердіть, що ваші записи виглядають правильно:
    cat /etc/hosts
    Ви також можете використовувати grep для швидкого пошуку конкретного запису:
    grep "myproject.local" /etc/hosts
    Крок 6: Протестуйте нові відображення
    Використовуйте ping для перевірки того, що ім’я хоста розпізнається на очікувану IP-адресу:
    ping -c 4 myproject.local
    Для заблокованого домену (відображеного на 0.0.0.0 або 127.0.0.1), ping повинен не вдатися або повернутися миттєво:
    ping -c 2 facebook.com
    Ви також можете використовувати getent для більш прямого пошуку в файлі hosts:
    getent hosts myproject.local
    Ця команда запитує стек розпізнавання імен системи (включаючи /etc/hosts) та повертає розпізнану IP-адресу, що робить її надійнішою за ping для цілей перевірки.
    5. Поширені випадки використання файлу Hosts
    5.1. Локальна веб-розробка
    Це, мабуть, найпоширеніший випадок використання серед розробників. Замість доступу до вашого локального проекту через http://localhost:3000 або http://127.0.0.1:8080, ви можете призначити змістовну, подібну до виробничої назву домену.
    Приклад налаштування:
    Додайте до /etc/hosts:
    127.0.0.1    myproject.local    api.myproject.local    admin.myproject.local
    Після збереження перейдіть до http://myproject.local у вашому браузері. Ваш запит буде розв’язаний локально без звернення до зовнішнього DNS-сервера.
    Цей підхід особливо цінний, коли:
    
    Ваша програма використовує віртуальний хостинг і вимагає певного заголовка Host.
    Ви тестуєте SSL-сертифікати локально (використовуючи самопідписані сертифікати, відображені на правильну назву домену).
    Вам потрібно імітувати архітектуру з кількома піддоменами (наприклад, api., admin., cdn.).
    
    Якщо ви запускаєте кілька проектів на VPS з cPanel, файл hosts також може допомогти вам протестувати конфігурації домену перед завершенням поширення DNS.
    5.2. Блокування небажаних веб-сайтів
    Файл hosts — це легкий блокувальник вмісту без залежностей. Перенаправляючи домен на 0.0.0.0 (краще за 127.0.0.1, оскільки це швидше не вдається без спроби підключення), ви можете блокувати доступ на рівні ОС — впливаючи на всі браузери та програми одночасно.
    Блокування відволікаючих соціальних мереж:
    0.0.0.0    facebook.com    www.facebook.com
    0.0.0.0    twitter.com    www.twitter.com
    0.0.0.0    reddit.com    www.reddit.com
    Блокування відомих доменів, які обслуговують реклами або відстежують:
    0.0.0.0    doubleclick.net
    0.0.0.0    ads.google.com
    0.0.0.0    tracking.example-analytics.com
    > Порада професіонала: Списки блокування, які підтримуються спільнотою (наприклад, з проекту StevenBlack hosts), компілюють десятки тисяч доменів реклами, відстеження та шкідливого ПО у форматі файлу hosts, який ви можете об’єднати зі своїм /etc/hosts.
    5.3. Тестування сервера перед запуском та перехід DNS
    При переносі веб-сайту на новий сервер — наприклад, переходу з Спільного веб-хостингу на Виділений сервер — поширення DNS може займати від кількох хвилин до 48 годин. Файл hosts дозволяє вам негайно переглянути новий сервер з вашої локальної машини, не впливаючи на інших користувачів.
    Сценарій: Ви переносите mywebsite.com на новий сервер за IP 203.0.113.42.
    Додайте до вашого локального /etc/hosts:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Тепер, коли ви відвідуєте mywebsite.com у вашому браузері, ви побачите вміст нового сервера. Інші відвідувачі у всьому світі все ще будуть бачити старий сервер, поки DNS не поширюється. Після того як ви підтвердили, що все працює правильно, видаліть запис і дозвольте DNS взяти на себе управління.
    Цей метод неоціненний для:
    
    Перевірки конфігурації веб-сервера перед запуском.
    Тестування SSL-сертифікатів на новому сервері.
    Підтвердження маршрутизації електронної пошти та поведінки програми після переносу.
    
    5.4. Обхід помилок розв’язання DNS
    Якщо DNS-сервер тимчасово недоступний або повертає неправильні результати, ви можете використовувати файл hosts як аварійне перевизначення для відновлення підключення до критичних служб.
    Приклад:
    # Emergency override - DNS server outage 2025-01-15
    198.51.100.10    internal-api.company.com
    198.51.100.11    database.company.com
    Пам’ятайте видалити ці записи після розв’язання основної проблеми DNS, щоб уникнути застарілих відображень, які можуть спричинити плутанину в майбутньому.
    5.5. Багатосерверні середовища розробки
    У складних установках розробки з кількома віртуальними машинами або контейнерами файл hosts може відображати дружні назви на кожну службу:
    192.168.1.10    db.local         # Database server
    192.168.1.11    cache.local      # Redis/Memcached
    192.168.1.12    queue.local      # Message broker
    192.168.1.13    search.local     # Elasticsearch
    Це усуває необхідність запам’ятовувати IP-адреси та робить файли конфігурації більш читаними та портативними.
    6. Очищення кешу DNS після редагування
    На більшості сучасних систем Linux зміни до /etc/hosts набувають чинності негайно для нових з’єднань. Однак, якщо ваша система або програми кешують DNS-відповіді, вам може знадобитися очистити цей кеш, щоб забезпечити негайне використання нових відображень.
    Для систем, які використовують systemd-resolved (Ubuntu 18.04+, Debian 10+, більшість сучасних дистрибутивів):
    sudo systemctl restart systemd-resolved
    Або, щоб очистити кеш без повного перезавантаження:
    sudo resolvectl flush-caches
    Перевірте, що кеш був очищений:
    sudo resolvectl statistics
    Для систем, які використовують nscd (Name Service Cache Daemon):
    sudo systemctl restart nscd
    Для систем, які використовують NetworkManager:
    sudo systemctl restart NetworkManager
    Для систем, які використовують dnsmasq:
    sudo systemctl restart dnsmasq
    Перевірка того, який DNS-резолвер використовує ваша система
    systemctl list-units --type=service | grep -E "resolved|nscd|dnsmasq|NetworkManager"
    > Кеші браузера: Зверніть увагу, що веб-браузери мають власний внутрішній кеш DNS, незалежний від ОС. Після редагування /etc/hosts вам також може знадобитися очистити кеш DNS вашого браузера. У Chrome/Chromium перейдіть до chrome://net-internals/#dns і натисніть Очистити кеш хостів.
    7. Найкращі практики та міркування безпеки
    ✅ Завжди робіть резервну копію перед редагуванням
    sudo cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d_%H%M%S)
    Використання часової мітки в імені файлу резервної копії дозволяє відстежувати кілька версій.
    ✅ Використовуйте коментарі для документування ваших змін
    # Added 2025-01-15 by admin@example.com - staging server test
    203.0.113.42    staging.mywebsite.com
    Це особливо важливо в командних середовищах, де кілька людей можуть отримувати доступ до сервера.
    ✅ Негайно видаляйте тимчасові записи
    Записи, додані для тестування або екстрених перевизначень, повинні бути видалені, як тільки вони більше не потрібні. Застарілі записи можуть спричинити важко діагностовані проблеми з підключенням через місяці.
    ✅ Перевіряйте синтаксис
    Неправильний запис у файлі hosts не спричинить збій системи, але він мовчки не зможе розпізнати. Завжди перевіряйте свої записи за допомогою:
    getent hosts <hostname>
    ⚠️ Попередження безпеки: перехоплення файлу hosts
    Шкідливе програмне забезпечення іноді змінює /etc/hosts для перенаправлення законних доменів (таких як веб-сайти банків або сервери оновлень) на IP-адреси, контрольовані зловмисником. Це відомий вектор атаки, який називається перехопленням файлу hosts.
    Захистіться від цього:
    
    Встановлення обмежувальних дозволів на файл: sudo chmod 644 /etc/hosts
  • Моніторинг файлу на предмет несанкціонованих змін за допомогою інструментів, таких як auditd або AIDE.
  • Регулярний перегляд вмісту файлу: cat /etc/hosts
  • ⚠️ Файл hosts не є заміною для правильного DNS

    Для виробничих середовищ файл hosts слід використовувати лише для тимчасових перевизначень та локальної розробки. Для постійного управління доменами завжди використовуйте правильні DNS записи. Якщо вам потрібно професійно реєструвати та керувати доменами, Реєстрація доменів через надійного постачальника забезпечує надійну та масштабовану інфраструктуру DNS.

    8. Висновок

    Файл /etc/hosts — це обманливо простий, але надзвичайно потужний інструмент у наборі інструментів кожного адміністратора Linux та розробника. Його здатність перевизначати DNS-розпізнавання локально — з нульовою затримкою, без зовнішніх залежностей та без змін інфраструктури — робить його незамінним для:

    • Розробників, які будують та тестують програми локально.
    • Системних адміністраторів, які керують міграцією серверів та вікнами переходу DNS.
    • Користувачів, які дбають про безпеку, які блокують шкідливі або небажані домени.
    • DevOps-інженерів, які організовують багатосервісні локальні середовища.

    Ключові висновки з цього посібника:

    ЗавданняКоманда / Дія
    Відкрити файл hostssudo nano /etc/hosts
    Створити резервну копію перед редагуваннямsudo cp /etc/hosts /etc/hosts.bak
    Перевірити відображенняgetent hosts <hostname>
    Протестувати за допомогою pingping -c 4 <hostname>
    Очистити кеш DNSsudo resolvectl flush-caches
    Відновити з резервної копіїsudo cp /etc/hosts.bak /etc/hosts

    Незалежно від того, чи ви запускаєте легке середовище розробки, чи керуєте флотом виробничих серверів на AlexHost VPS Hosting, оволодіння файлом hosts — це фундаментальна навичка, яка приносить дивіденди щоразу, коли вам потрібне швидке, надійне локальне перевизначення DNS. Редагуйте впевнено, документуйте свої зміни та завжди зберігайте резервну копію — щасливої маршрутизації!