Файл /etc/hosts в Linux: как привязать домен к IP или заблокировать сайт
Необходимо протестировать работу сайта на новом сервере до того, как доменные DNS-записи разойдутся по миру, либо требуется полностью заблокировать доступ к определенному интернет-ресурсу на локальном компьютере без фаервола.
Что такое файл `/etc/hosts`?
Файл /etc/hosts — это встроенная локальная телефонная книга операционной системы. Когда программа в Linux обращается к доменному имени (например, example.com), система **в первую очередь** смотрит в файл /etc/hosts, и только если там ничего не найдено, отправляет запрос во внешний интернет к публичным DNS-серверам.
Шаг 1. Открытие файла для редактирования
Поскольку это системный файл, открывайте его с правами администратора:
sudo nano /etc/hostsШаг 2. Синтаксис файла
Каждая строка файла имеет простой вид: IP-АДРЕС ДОМЕННОЕ_ИМЯ [АЛИАСЫ]
Сценарий 1: Привязка домена к новому тестовому серверу
Добавьте строчку в конец файла:
85.192.34.110 my-new-site.ru www.my-new-site.ruТеперь все программы на этом сервере (curl, ping, браузер) при обращении к my-new-site.ru будут обращаться напрямую к серверу 85.192.34.110, даже если официальный DNS указывает на старый хостинг.
Сценарий 2: Блокировка нежелательных сайтов
Чтобы заблокировать сайт, перенаправьте его на несуществующий локальный IP 0.0.0.0 или 127.0.0.1:
0.0.0.0 ads.example.com
0.0.0.0 tiktok.comШаг 3. Сохранение и проверка
Нажмите Ctrl + O, затем Enter, и Ctrl + X для выхода.
Изменения применяются мгновенно без перезагрузки системы! Проверьте результат командой ping:
ping -c 2 my-new-site.ru Частые вопросы (FAQ)
Нужно ли перезагружать сервер или сетевые службы после редактирования /etc/hosts?
Нет, операционная система перечитывает файл /etc/hosts при каждом новом сетевом обращении системных библиотек resolver.
Почему в файле обязательно должны быть строки 127.0.0.1 localhost?
Строка 127.0.0.1 localhost связывает имя локальной петли с виртуальным сетевым интерфейсом loopback (lo). Без нее сломается большинство внутренних сервисов и баз данных.
Почему утилита dig не видит записи из /etc/hosts?
Утилиты dig и nslookup предназначены для прямого тестирования внешних DNS-серверов по протоколу DNS и намеренно игнорируют локальный системный файл hosts. Проверяйте через ping или getent hosts.
Как называется аналогичный файл в операционной системе Windows?
В Windows этот файл находится по пути: C:\Windows\System32\drivers\etc\hosts и имеет точно такой же формат.