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
    Начать