15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати
30.10.2024
1 +1

Опанування файлу hosts Linux: Повний посібник з локального управління DNS

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

Зміст

  1. Що таке файл hosts?
  2. Де знаходиться файл hosts у Linux?
  3. Розуміння структури файлу hosts
  4. Як редагувати файл hosts у Linux (покрокова інструкція)
  5. Поширені випадки використання файлу hosts
  6. Очищення кешу DNS після редагування
  7. Найкращі практики та міркування безпеки
  8. Висновок

1. Що таке файл hosts? {#what-is-the-hosts-file}

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

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

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

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

2. Де знаходиться файл hosts у Linux? {#location}

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

/etc/hosts

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

Стандартний вміст /etc/hosts

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

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 {#structure}
    Файл 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 (покрокова інструкція) {#editing}
    Оскільки /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 {#use-cases}
    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 після редагування {#flushing-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 і натисніть Clear host cache.
    7. Найкращі практики та міркування безпеки {#best-practices}
    ✅ Завжди робіть резервну копію перед редагуванням
    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. Висновок {#conclusion}

    Файл /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 Хостингу, оволодіння файлом hosts є фундаментальною навичкою, яка приносить дивіденди щоразу, коли вам потрібне швидке, надійне локальне перевизначення DNS. Редагуйте впевнено, документуйте свої зміни та завжди зберігайте резервну копію — вдалого маршрутизування!

    15%

    Збережіть 15% на всі хостинг-послуги

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

    Використовуй код:

    Skills
    Почати