.png)
Бывают ситуации, когда вам нужно направить обращение к какому-либо сайту на определённый IP-адрес. Например, у вас есть работающий сервер на хостинге, но вы ещё не зарегистрировали домен, или вы отлаживаете сайт на локальном компьютере, или вам нужно заблокировать доступ к определённому домену. Во всех этих случаях вам поможет файл hosts — очень простое, но эффективное средство для работы с DNS-запросами.
Что такое файл hosts и зачем он нужен
В современном интернете для обращения к сетевым ресурсам обычно используются доменные имена. Например, чтобы посетить сайт, мы просто вводим в адресной строке браузера его имя. Но у сервера, обслуживающего запросы посетителей, есть только IP-адрес. Поэтому в компьютерных сетях используется система соответствия доменных имён IP-адресам, которая называется DNS (Domain Name System).
Но строго говоря, для адресации узлов сети использовать DNS не обязательно. Например, в одной из первых компьютерных сетей ARPANET в начале семидесятых годов прошлого века было всего несколько сотен устройств, и для их описания достаточно было одного текстового файла HOSTS.TXT. После появления системы DNS в 1984 году инженеры решили сохранить в системе файл hosts, который по сей день играет важную роль в работе с сетью.
Во всех современных операционных системах, используемых на персональных компьютерах и серверах, файл hosts содержит строки, задающие соответствие доменных имён IP-адресам. Причём эти записи имеют приоритет перед данными, получаемыми от системы DNS. Давайте рассмотрим подробнее, как именно файл hosts переопределяет информацию DNS, и как его можно использовать.
Где находится файл hosts
В Windows
По умолчанию файл hosts находится в папке C:\Windows\system32\drivers\etc:

Расположение файла hosts в Windows очень важно, так как различные зловредные программы очень любят подменять этот путь собственным. В этом случае оригинальный файл hosts, расположенный по стандартному пути, выглядит вполне безобидно, тем временем как действующий файл, расположенный в другом месте, содержит подложные адреса.
Чтобы убедиться, что этого не произошло, можно открыть редактор реестра Windows и найти в нём параметр HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath:

Как видите, на исследуемом компьютере путь не подменён.
В macOS
В macOS файл hosts расположен в каталоге /private/etc/hosts, найти его можно с помощью приложения Finder:

В Linux
Файл hosts в Linux находится в папке /etc:

Как внести изменения в файл hosts
В Windows 7, 10, 11
Нosts — простой текстовый файл, поэтому открыть его можно в любом текстовом редакторе, например, в блокноте:

Как видите, все строки в этом файле закомментированы знаком #. Формат значащих записей очень простой — каждая строка представляет собой пару IP-адрес — доменное имя, разделённую пробелами или табуляцией. Например, мы видим строку:
127.0.0.1 localhost
Она задаёт соответствие локального адреса IPv4 127.0.0.1 имени localhost. Строка:
::1 localhost
Сопоставляет имя локального хоста адресу IPv6. Таким образом можно определить соответствие любого IP-адреса любому домену. Каждому IP-адресу можно сопоставить несколько доменных имён, например:
1.2.3.4 example.ru www.example.ru
Для того, чтобы внести изменения в файл hosts, нужно запустить его от имени администратора:

Теперь Блокнот позволит сохранить изменения в файле.
Но давайте убедимся, что эта система работает. Для этого в приложении Windows PowerShell выполним команду ping www.ru
, проверяющую наличие связи с указанным хостом:

Как видим, домену www.ru сопоставлен IP-адрес 31.177.80.70. Теперь давайте добавим в конец файла hosts строку, сопоставляющую какой-нибудь несуществующий домен, например example.ru, с полученным адресом:
31.177.80.70 example.ru
Если после сохранения файла hosts запустить команду ping example.ru
, мы увидим, что система уже связала наш тестовый домен с указанным IP-адресом вымышленного сайта:

Это означает, что если набрать в адресной строке браузера имя example.ru, мы попадём на сайт www.ru:

Конечно, зайти на реальный сайт, работающий по защищённому протоколу HTTPS, в этом случае не получится, так как в браузере сработают защитные механизмы системы безопасности, но мы убедились, что система работает, как ожидалось.
Наш эксперимент показал, что запись в файле hosts имеет приоритет перед системой DNS и Windows использует именно её. Если говорить точнее, записи из файла hosts попадают в кеш DNS, и при наличии нужной записи система просто не запрашивает реальные DNS-серверы. Давайте проверим это, выполнив команду ipconfig /displaydns
:

До внесения изменений в файл hosts информация была другой:

В этом можно убедиться, удалив или закомментировав добавленную строку и снова выполнив команду ping
.
Подробнее о проверке файла hosts можно прочитать в статье «Проверка сайтов после переноса».
В macOS
Отредактировать файл hosts можно, например, введя в Терминале команду sudo nano /etc/hosts
:

Эта команда позволяет открыть редактор nano с правами администратора. После внесения изменений можно нажать сочетание клавиш Command+O для сохранения и Command+X — для выхода.
В Linux
Для редактирования текстовых файлов файлов в Linux можно использовать любой текстовый редактор, открыв его с правами администратора, например, sudo nano /etc/hosts
:

Если хотите, вместо консольного nano можно использовать редактор с графическим интерфейсом, например, gnome-text-editor или kate, запустив его с правами администратора:
sudo <your editor> <hosts file>
Блокировка доступа к сайту через файл hosts
Файл hosts — одно из самых простых средств для блокировки нежелательных интернет-ресурсов на локальном компьютере. Для того, чтобы ограничить доступ, например, к сайту youtube.com, достаточно добавить строку, сопоставляющую этот домен с зарезервированным IP-адресом локального хоста 127.0.0.1:
127.0.0.1 youtube.com
После этого любые обращения к сайту youtube.com будут невозможны. Если вам нужно заблокировать несколько доменов, их имена можно указывать в этой же строке через пробел или табуляцию, а также использовать отдельные строки. Но нужно помнить, что использовать подстановочные знаки (*) в файле hosts нельзя, при необходимости все поддомены нужно указать явно.
Как восстановить оригинальный файл hosts
Лучший способ сохранить оригинальный файл перед внесением изменений — сделать его резервную копию. Мы рекомендуем просто скопировать исходный файл, например, под именем hosts.orig. Но если вы этого не сделали — ничего страшного, просто откройте текущий файл hosts с правами администратора и замените его содержимое такими строками:
Для macOS:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
Для Linux:
127.0.0.1 localhost
::1 localhost
Для Windows этот файл может быть пустым.
Полное содержимое файла hosts вместе с комментариями приведено в этой статье в разделе «Редактирование файла hosts» для вашей операционной системы.
Также важно помнить, что файл hosts — не единственное средство, которым может быть изменена привязка IP-адреса к домену на локальном компьютере, поэтому если после чистки hosts связь с сайтом по прежнему не работает, то, вероятно, на вашем устройстве установлена дополнительная служба, переопределяющая работу системы DNS.
Кроме того, настоятельно рекомендуем вам быть внимательными и аккуратными при работе с файлом hosts и не вписывать в этот и другие системные файлы данные из непроверенных источников. Помните, что от этого зависит ваша информационная безопасность.
Заключение
Сегодня мы рассмотрели примеры использования одного из самых старых механизмов работы с сетевыми именами, существовавшим ещё до появления интернета. Надеемся, рано или поздно эта информация поможет вам решить возникающие в современном мире задачи по работе с компьютерными сетями. В любом случае рекомендуем помнить о наличии возможности обхода системы DNS.
Удачи в работе!