Опанування файлу hosts Linux: Повний посібник з локального управління DNS
Незалежно від того, чи ви розробник, який тестує новий застосунок, системний адміністратор, що усуває проблеми з поширенням DNS, чи просто людина, яка хоче заблокувати відволікаючі сайти, файл /etc/hosts є одним із найпотужніших і найменш використовуваних інструментів у будь-якій Linux-системі. Цей посібник містить детальний практичний огляд усього, що вам потрібно знати — від розуміння того, що таке файл hosts, до його безпечного редагування у вашому середовищі VPS Хостингу.
Зміст
- Що таке файл hosts?
- Де знаходиться файл hosts у Linux?
- Розуміння структури файлу hosts
- Як редагувати файл hosts у Linux (покрокова інструкція)
- Поширені випадки використання файлу hosts
- Очищення кешу DNS після редагування
- Найкращі практики та міркування безпеки
- Висновок
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/hostsauditd або AIDE.cat /etc/hosts⚠️ Файл hosts не є заміною належного DNS
Для виробничих середовищ файл hosts слід використовувати лише для тимчасових перевизначень і локальної розробки. Для постійного управління доменами завжди використовуйте належні DNS-записи. Якщо вам потрібно професійно реєструвати домени та керувати ними, Реєстрація доменів через надійного провайдера забезпечує надійну та масштабовану DNS-інфраструктуру.
8. Висновок {#conclusion}
Файл /etc/hosts є оманливо простим, але надзвичайно потужним інструментом у наборі інструментів кожного Linux-адміністратора та розробника. Його здатність локально перевизначати розпізнавання DNS — з нульовою затримкою, без зовнішніх залежностей і без змін інфраструктури — робить його незамінним для:
- Розробників, які створюють і тестують застосунки локально.
- Системних адміністраторів, які керують міграцією серверів і вікнами перемикання DNS.
- Користувачів, що дбають про безпеку, які блокують шкідливі або небажані домени.
- DevOps-інженерів, які організовують локальні середовища з кількома службами.
Ключові висновки з цього посібника:
| Завдання | Команда / Дія |
|---|---|
| Відкрити файл hosts | sudo nano /etc/hosts |
| Зробити резервну копію перед редагуванням | sudo cp /etc/hosts /etc/hosts.bak |
| Перевірити зіставлення | getent hosts <hostname> |
| Тестування за допомогою ping | ping -c 4 <hostname> |
| Очистити кеш DNS | sudo resolvectl flush-caches |
| Відновити з резервної копії | sudo cp /etc/hosts.bak /etc/hosts |
Незалежно від того, чи ви запускаєте компактне середовище розробки, чи керуєте парком виробничих серверів на AlexHost VPS Хостингу, оволодіння файлом hosts є фундаментальною навичкою, яка приносить дивіденди щоразу, коли вам потрібне швидке, надійне локальне перевизначення DNS. Редагуйте впевнено, документуйте свої зміни та завжди зберігайте резервну копію — вдалого маршрутизування!
