Курс по сетевым технологиям
A A A

 

Краткие сведения о работе протокола DNS 

DNS (Domain Name Service) - Служба доменных имен используется для преобразования доменных имен в IP адреса и наоборот.

 

Где это используется? 

Например, требуется войти на сервер Google. В браузере (Chrome, Firefox или другой) достаточно лишь ввести IP адрес того самого сервера. Однако довольно сложно запоминать IP адреса серверов. Проще всего запомнить имя сервера, которое и  называется доменное имя. Теперь вместо IP адреса в браузере можно ввести лишь доменное имя, например, google.com, mail.ru и так далее. После ввода имени компьютер обратится к ближайшему DNS серверу с запросом получить адрес конкретного домена. Запрос отправляет по протоколу UDP на порт 53:

DNS запрос


Сервер вернет компьютеру запрошенный адрес:

DNS ответ

Схема работы довольно проста, однако здесь имеются некоторые особенности, которые мы рассмотрим ниже.

 

Служба доменных имен имеет иерархическую структуру и подразделяется на домены первого, второго, третьего и др. уровней.

Например, site.network.com - это домен третьего уровня. Читается слева направо, то есть от низшего домена к высшему, где com. - это домен 1-го уровня, network.com - домен 2-го уровня, site.network.com - домен 3-го уровня.

Выглядит иерархия DNS так:

Иерархия доменных имен


Для преобразования доменных имен в адреса используются специальные серверы DNS. Все серверы объединяются в иерархическую сеть. То есть имеются главные серверы (master) и ведомые (slave).

 

Для чего это нужно? 

Это необходимо по 2-м причинам. Например, в браузере ты вводишь mail.google.com. Твой компьютер обращается к ближайшему DNS  серверу. Однако сервер может и не знать о существовании такого домена. Поэтому обратится к вышестоящему корневому серверу, который знает только домен com. и перешлет запрос на нижестоящий сервер, который может знать домен google.com. И так далее по цепочке могут быть опрошены несколько серверов. Поэтому и нужна иерархическая структура сети. Не все сервера знают обо всех доменах, однако они знают у кого спросить.

 

Другая причина в том, что с помощью такой структуры легко избежать дубликатов в доменных именах. Например, Вася решил купить имя money.ru для своего сайта. Однако оно уже занято и давно используется. Сервер, отвечающий за зону ru сразу определит, что домен занят и не позволит Васе его занять.

 

Все DNS серверы делятся на рекурсивные и нерекурсивные.

 

В чем же их отличия? 

Выше мы описали принцип работы иерархической структуры сети  DNS  серверов. Если компьютер отправит запрос на сервер и сервер не имеет информацию по данному запросу, то сервер в качестве ответа вернет компьютеру (хосту)  IP адрес другого сервера, который возможно имеет некую информацию. Компьютеру придется делать запрос на другой сервер и так до тех пор, пока не получит требуемую информацию.. Причем все запросы осуществляет сам компьютер. То есть DNS сервер получает запрос и сразу же отвечает и его не волнует, что компьютер (хост) получил неполную информацию. Такой сервер называется нерекурсивным. 

На рисунке представлена схема работы такой сервера:

Работа нерекурсивного DNS


Теперь рассмотрим другую ситуацию. Компьютер отправил запрос на ближайший DNS  сервер. Этот сервер сам опросит при необходимости нужные сервера и компьютеру вернет полную информацию. Компьютеру остается только ждать. Такой сервер называется рекурсивным:

Работа рекурсивного DNS


Подобные серверы установлены в локальных сетях и у некоторых провайдерах. Все остальные серверы нерекурсивные. 

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

 

Теперь рассмотрим какие записи содержит сам сервер. Для этого выполним следующую команду 

dig easy-network.ru ANY +noall +answer

 

Типы записей DNS


Данная команда работает на Linux и позволяет получить информацию о DNS записях.

В нашем случае имеем следующее: 

А запись - IP адрес запрашиваемого домена. То есть, введя в браузере домен easy-network.ru вы отправите запрос на сервер, который вернет вам IP адрес, то есть А запись.

MX запись - IP адрес почтового сервера. Отправляя электронную почту мы вводим в почтовом клиенте адрес вида Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.. Отправляя сообщение серверу-получателю сервер-отправитель извлекает имя домена из адреса (в нашем случае easy-network.ru) и посылает запрос на DNS сервер, чтобы получить MX запись, то есть IP адрес почтового сервера-получателя.

NS запись - IP адрес авторитативного DNS сервера, который отвечает за данный домен.

Вместо команды dig можно воспользоваться командой попроще:

host easy-network.ru

 

Вывод команды будет более понятным:
Типы записей DNS


 

Настройка кэширующего сервера DNS 

Если локальная сеть небольшая, то обычно в качестве DNS  сервера выступает сам маршрутизатор. Попробуем настроить такой маршрутизатор. 

Включаем  режим сервера

Router(config)# ip dns server

 

Включаем трансляцию имен в IP адреса

Router(config)# ip domain-lookup

 

Далее добавляем DNS сервера, к которым будет обращаться наш маршрутизатор. Всего можно настроить до 6 серверов

Router(config)# ip name-server IP адрес сервера

 

Теперь на компьютерах этой сети достаточно в качестве DNS сервера указать адрес маршрутизатора. Это можно сделать с помощью DHCP.

 

А не проще ли на компьютерах сразу указать адрес  DNS  сервера одного из вышестоящий уровней? 

Сделать это можно, но это может привести увеличению трафика в сети. Например, один хост обращается на facebook.com. Вслед за ним обращаются к DNS серверу еще 100 хостов. Трафик увеличивается. Однако, если эти функции возложены на маршрутизатор, то маршрутизатор кэширует все запросы и выдает информацию гораздо быстрее, не нагружая при этом сеть. 

Если локальная сеть довольно большая, то устанавливают отдельный DNS сервер, который также содержит записи о внутренних хостах и ресурсах, так как в локальной сети могут быть свои серверы. 

Для настройки локального DNS сервера в маленькой сети достаточно выполнить команду

Router(config)# ip host имя_хоста IP_адрес

 

Теперь можно обращаться к хосту по его имени и не нужно запоминать адрес.