Сэкономьте 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 для его изменения. Ниже приведен полный рабочий процесс, безопасный для production.
    Шаг 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 и нажмите Clear host cache.
    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. Редактируйте с уверенностью, документируйте ваши изменения и всегда держите резервную копию — удачной маршрутизации!