zaLinux.ru

Как настроить локальный DNS используя файл /etc/hosts в Linux


DNS (система или служба доменных имён) — это иерархическая, децентрализованная служба/система наименования и перевода доменных имён в IP адреса в Интернете или в приватной сети, а также серверы, которые предоставляют такой сервис и называют DNS серверами.

Эта статья объясняет, как настроить локальный DNS используя файл /etc/hosts в системах Linux для локального разрешения доменов или тестирования веб-сайтов перед размещением их на доступном глобально веб-сервере.

Например, изменив файл /etc/hosts на своей локальной системе, чтобы в нём содержалась запись связывающая доменное имя с IP, вы можете протестировать сайт в идентичном окружении, как если бы он был размещён на реальном доменном имени. Такой подход позволит проверить работу, например, абсолютных ссылок, которые включают в адресе также и домен. Даже работу SSL сертификата таким образом можно проверить на локальной машине до того, как сделать это на рабочей сервере.

Ещё одно применение локального разрешения имён в файле /etc/hosts — создание коротких, легко запоминающихся имён для других устройств и компьютеров в локальной сети, благодаря чему можно будет вместо ввода IP адреса указать понятное имя «kali» или «files» для доступа к другому компьютеру по SSH или на его веб-сервер.

/etc/hosts — это файл операционной системы, который переводим имена хостов или имена доменов в IP адреса.

Внимание: если в вашей сети компьютерам IP адрес назначается автоматически при каждой загрузке, то при следующем включении IP может измениться и вы не сможете подключиться к устройству по имени, так как оно будет указывать на старый IP. Чтобы этот метод работал и после перезагрузки, настройте статические IP адреса для всех устройств, к которым вы будете обращаться по имени хоста, и которые вы добавите в файл hosts.

Для целей настоящей статьи мы будем использовать следующий домен, имена хостов и IP адреса (используйте значения в соответствии с вашей локальной сетью).

Домен:	hackware.lan
Хост 1:		kali.hackware.lan	192.168.1.60
Хост 2:		mint.hackware.lan	192.168.1.70

Что такое Переключатель сервисов имён в Linux (Name Service Switch)

Перед тем, как продолжить, вы должны понимать несколько вещей о другом важном файле, который расположен в /etc/nsswitch.conf. Он обеспечивает функции Переключателя сервисов имён, что означает, что он контролирует порядок (приоритет) в котором опрашиваются службы запросах к сервисам преобразования имени.

Подробно этот файл и его функции описаны в статье «Как в Linux определяется порядок источников для разрешения имён (приоритет файла hosts и DNS)».

Если коротко, то за используемые для преобразования имён хостов службы перечислены в строке, которая начинается на «hosts:», пример данной строки:

hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns

Если в этой строке на первом месте слово «files» расположено перед словом «dns», то это означает, что для запросов к службе имён в начале делается запрос к файлу /etc/hosts, а затем к DNS. Но если слово «dns» стоит до «files», то при поиске IP адреса домена в начале будет сделан запрос DNS, и если не получено значение, то будут опрошены другие соответствующие службы или файлы.

Для наших целей важно, чтобы в строке «hosts:» присутствовало слово «files». А если вы хотите в файле /etc/hosts сделать записи для реальных доменных имён (например, для zalinux.ru), то необходимо, чтобы слово «files» в этой строке стояло раньше слова «dns», иначе вначале будет делаться запрос к DNS серверу, который будет возвращать IP сайта и очередь для получения IP из /etc/hosts не дойдёт

Проверьте содержимое этого файла:

cat /etc/nsswitch.conf


Или просто посмотрите нужную строку:

grep hosts /etc/nsswitch.conf

Локальная настройка DNS используя файл /etc/hosts в Linux

Теперь откройте файл /etc/hosts используя любой текстовый редактор:

sudo gedit /etc/hosts

Добавьте в этот файл строки в формате:

IP_1	имя_хоста_1 короткое_имя
IP_2	имя_хоста_2
IP_3	имя_хоста_3
………...

Например, для моих данных я добавляю:

192.168.1.60	kali.hackware.lan	kali
192.168.1.70	mint.hackware.lan	mint

Сохраните и закройте файл.

Изменения, внесённые в файл hosts, вступают в силу немедленно.


Далее проверьте, что всё работает как и ожидается. Выполним пинг первого хоста командой ping. Для других хостов можно сделать аналогичную проверку:

ping -c 4 kali.hackware.lan

Или используем сокращённый псевдоним:

ping -c 4 kali

На хосте kali.hackware.lan у меня запущен веб-сервер, поэтому я могу получить к нему доступ в веб-браузере, набрав адрес http://kali.hackware.lan/ или более короткий псевдоним http://kali.

Важно: обращаться по этим именам к другим компьютерам я могу только с тех систем, где добавлены аналогичные записи в файл /etc/hosts.

Если вы попытаетесь проверить IP адрес с помощью команды dig, nslookup или host, то для локальных хостов не будут найдены записи. Дело в том, что эти команды только делает запросы к DNS серверу и игнорируют настройки в файлах /etc/hosts и /etc/nsswitch.conf.

Формат файла /etc/hosts

Файл /etc/hosts в современных системах Linux присутствует скорее историческим причинам — ранее, до появления и распространения службы DNS, этот файл выполнял задачи по трансляции имён в IP адреса. В современных системах подразумевается, что функции этого файла может выполнять DNS сервер (например, локальный кэширующий DNS сервер, в котором присутствуют пользовательские записи и который, в случае если запрашиваемое имя не найдено, обращается к другому DNS серверу в Интернете). В принципе, аналогичный показанному результат действительно можно было достичь установив и настроив локальный DNS — в этом случае программы dig и другие правильно бы показывали IP адреса даже этих локальных хостов. Тем не менее как мы могли убедиться, использование файла /etc/hosts намного быстрее и удобнее для небольшого числа записей. По этой причине файл /etc/hosts по-прежнему часто применяется.

Файл /etc/hosts является простым текстовым файлом, в котором IP адреса связаны с именами хостов, каждая строка содержит по одному IP адресу. Для каждого хоста одна строка должна представлять следующую информацию:

              IP_адрес каноническое_имя_хоста [псевдонимы...]

Поля записи разделяются любым количеством пробелов и/или символов табуляции. Текст с символа "#" до конца строки является комментарием и игнорируется. Имена хостов могут содержать только буквы английского алфавита, знак минус ("-") и точку ("."). Они должны начинаться с буквы и заканчиваться на букву. Необязательные псевдонимы указываются для изменений имён, альтернативных написаний, укороченных имён хостов или родовых имён хостов (например, localhost).


Пример файла /etc/hosts

       # Следующие строки желательны для хостов с поддержкой IPv4
       127.0.0.1       localhost

       # 127.0.1.1 часто используется для полного доменного имени (FQDN) машины
       127.0.1.1       thishost.mydomain.org  thishost
       192.168.1.10    foo.mydomain.org       foo
       192.168.1.13    bar.mydomain.org       bar
       146.82.138.7    master.debian.org      master
       209.237.226.90  www.opensource.org

       # Следующие строки желательны для хостов с поддержкой IPv6
       ::1             localhost ip6-localhost ip6-loopback
       ff02::1         ip6-allnodes
       ff02::2         ip6-allrouters

Рекомендуемые статьи:

1 Комментарий

  1. Oleg

    норм, спасибо

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *