Оволодіння файлом 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/hostsauditd або AIDE.cat /etc/hosts⚠️ Файл hosts не є заміною для правильного DNS
Для виробничих середовищ файл hosts слід використовувати лише для тимчасових перевизначень та локальної розробки. Для постійного управління доменами завжди використовуйте правильні DNS записи. Якщо вам потрібно професійно реєструвати та керувати доменами, Реєстрація доменів через надійного постачальника забезпечує надійну та масштабовану інфраструктуру DNS.
8. Висновок
Файл /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 Hosting, оволодіння файлом hosts — це фундаментальна навичка, яка приносить дивіденди щоразу, коли вам потрібне швидке, надійне локальне перевизначення DNS. Редагуйте впевнено, документуйте свої зміни та завжди зберігайте резервну копію — щасливої маршрутизації!
на всіх хостингових послугах