Разрешение доменных имен linux

Как настроить локальный 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 в любом Linux вы можете сделать на примере описанном в инструкции «Как настроить Kali Linux на использование статичного IP адреса».
  • Настройка статичного IP в Windows описана в статье «Как веб-сервер на своём компьютере сделать доступным для других».

Для целей настоящей статьи мы будем использовать следующий домен, имена хостов и 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 output to buffer

Если коротко, то за используемые для преобразования имён хостов службы перечислены в строке, которая начинается на «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 не дойдёт

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

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

grep hosts /etc/nsswitch.conf

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

Теперь откройте файл /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. Для других хостов можно сделать аналогичную проверку:

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

На хосте 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 по-прежнему часто применяется.

Читайте также:  Linux stop job is running

Файл /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

Связанные статьи:

Источник

Как в Linux определяется порядок источников для разрешения имён (приоритет файла hosts и DNS)

Перед доступом к сайту компьютеру необходимо узнать его IP. Обычно для этого используется запрос к DNS серверу, который веб-браузер или операционная система выполняют автоматически, без действий пользователя.

В операционных системах Windows и Linux имеется файл hosts, в котором можно установить IP адреса для любых имён — хостов и доменных имён. По умолчанию операционные системы работают так:

  • если запрашиваемое имя присутствует в файле hosts, то его IP берётся из этого файла и запрос к DNS серверу не делается
  • если в файле hosts имя хоста не найдено, то выполняется запрос к DNS серверу

В операционной системе Linux можно поменять приоритет источников для получения IP адреса или вовсе отключить некоторые из них. Для этого используется файл /etc/nsswitch.conf

Для чего нужен /etc/nsswitch.conf

Файл /etc/nsswitch.conf — это «Name Service Switch configuration file», то есть конфигурационный файл переключения служб имён. Он устанавливает настройки не только службы преобразования имён хостов и доменных имён, но эта настройка, пожалуй, самая востребованная.

Строка, которая отвечает за преобразование имён хостов начинается на «hosts». В моей системе эта строка выглядит так:

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

hosts — это указание на службу, для которой предназначена строка.

files означает файл, относящийся к этой службе. У каждой службе в системе свой файл, в данном случае имеется ввиду /etc/hosts

Кстати, для других служб файлы следующие:

aliases /etc/aliases ethers /etc/ethers group /etc/group hosts /etc/hosts initgroups /etc/group netgroup /etc/netgroup networks /etc/networks passwd /etc/passwd protocols /etc/protocols publickey /etc/publickey rpc /etc/rpc services /etc/services shadow /etc/shadow

Поскольку слово files стоит в строке первым, то в начале имя хоста (доменное имя) ищется в файле /etc/hosts

Читайте также:  Linux operatsion tizimi skachat

mymachines — судя по названию, означает имя машины. Можно предположить (информации в документации я не нашёл), что если искомое имя совпадает с именем машины, то возвращается IP адрес текущей машины

myhostname — аналогично, документацию я не нашёл, но ключевое слово имеет отношение имени текущего хоста, возможно, работает как и mymachines

resolve — это системная служба, подробности:

Строка [!UNAVAIL=return] означает, что если предыдущая служба недоступна, то немедленно будет возвращён результат без запроса в следующем источнике. Поскольку resolve кэширует и валидирует DNS, то, видимо, без resolve нет смысла делать запрос через dns. Также resolve отвечает за преобразования некоторых локальных имён, в том числе «localhost» и «localhost.localdomain» (а также любые имена хостов, заканчивающиеся на «.localhost» или «.localhost.localdomain«), а также «_gateway«, который преобразовывается в адрес текущего маршрута по умолчанию.

Кстати, по этой причине возможен следующий фокус (будет пропингован IP адрес маршрута по умолчанию):

dns — эта запись означает запрос имён у DNS серверов

Как можно увидеть, в первую очередь приоритет отдаётся /etc/hosts, и если ничего не найдено с помощью других сервисов, то только в этом случае для разрешения имени задействуется DNS.

Другие подробности, в том числе про условия передачи управления следующей службы, смотрите в справочной странице файла nsswitch.conf:

Когда вступают в силу изменения в файле nsswitch.conf. Почему не работают изменения в файле nsswitch.conf

Если вы будете редактировать настройки файла nsswitch.conf, то помните, что службы, которые его используют, считывают файл только один раз. Если после этого в файл были сделаны изменения, то служба по-прежнему будет использовать старый вариант! Получается, чтобы изменения вступили в силу, нужно перезагрузить операционную систему.

Как отключить файл /etc/hosts

Чтобы отключить файл /etc/hosts, нужно в файле /etc/nsswitch.conf найти строку, которая начинается на hosts и удалить из неё слово files.

Например, начальный вид строки:

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

Для отключения /etc/hosts нужно чтобы строка выглядела так

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

Как сделать приоритет DNS выше файла /etc/hosts

Чтобы запросы к DNS серверу выполнялись до поиска имён в файле /etc/hosts, нужно в файле /etc/nsswitch.conf найти строку, которая начинается на hosts и слово dns поставить ДО слова files. Например, так:

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

Как оптимизировать файл /etc/nsswitch.conf

Я не проверял этот совет на своей ОС и не мору ручаться, что после него всё будет работать как надо, но я наткнулся на рекомендацию в файле /etc/nsswitch.conf из строки с hosts удалить всё лишнее и записать её в следующем виде:

Повторюсь, не мору ручаться за верность последнего совета.

Источник

Оцените статью
Adblock
detector