Сегодня опробуем разобраться что такое DNS и с чем его едят (используют). На эту тему уже написано и рассказано овер-дофига раз. Еще одну можно было бы и не писать. А так хочется. Ну а раз хочется, то, наверно, можно.

Что за зверь?

DNS или Domain Name System — это специализированная система которая умеет по имени домена определять какие-то параметры работы в сети Internet. Обычно его используют для получения IP-адреса по имени. Например, когда вы вводите адрес в браузере, то перед подключением к серверу он сначала спрашивает у службы DNS какой реальный IP-адрес у сервера и, если все прошло успешно, подключается непосредственно к серверу и запрашивает страницы. Это было придумано для того, чтобы не запоминать цифровые адреса, а какие-то осмысленные имена.

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

Как хранится информация?

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

Какие записи бывают?

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

Важно знать, что существует 2 основных типа адресации в Internet: IPv4 и IPv6. На самом деле их гораздо больше, нам на текущий момент они не нужны.

Чтобы посмотреть самостоятельно эти записи нужно установить соответствующее по. В Debian:


sudo apt install dnsutils

Чтобы установить утилиту dig в Windows нужно загрузить и установить соответствующий скомпилированный пакет BIND9.

A

Этот тип записи отвечает за тип ресурса IPv4. Например, роутер в домашней сети имеет адрес 192.168.0.1. Чтобы к нему подключиться и настроить обычно указывается этот адрес в браузере. С помощью DNS можно было бы задать ему доменный адрес, например, router.loc. Тогда DNS запись будет выглядеть так:


router.loc.             72220   IN      A   192.168.0.1

Точка в конце имени домена говорит о том, что просмотр начинается от корня доменной системы. Об этом написано в спецификациях.

Чтобы просмотреть информацию нужно выполнить команду:


dig

АААА

Этот тип записи является эквивалентным типу записи A. Разница в том, что возвращается не IPv4, а IPv6.


dig  A

MX

Этот тип записи нужен, чтобы определить по основному домену какой домен используется для сервера электронной почты. MX расшифровывается как Mail Exchange.

Мы все привыкли отправлять электронную почту в виде user@server1.loc, где user — имя пользователя а server1.loc — сервер, на котором пользователь зарегистрирован. Теперь представьте, что нужно отправить письмо пользователю user@server2.loc от пользователя user@server1.loc. server1.loc и server2.loc — это абсолютно 2 разных сервера. Так как же серверы понимают куда отправлять письмо?

Все просто! Почтовый сервер server1.loc смотрит на адрес, где после символа @ указан почтовый сервер. Он спрашивает у DNS какой домен используется для этого сервера:


dig  MX

Если такая запись есть, то DNS возвращает домен этого сервера. На самом деле обычный домен, например сайта, и домен почтового обменника могут различаться как логически, так и физически.

После этого, как получен домен почтового обменника, сервер запрашивает адрес из записи A или AAAA (смотря какая адресация требуется) и уже может спокойно подключиться для обмена корреспонденцией.

PTR

Еще одна запись, которая часто используется с почтовыми серверами. Ее цель сделать обратное преобразование, т.е. какое доменное имя у адреса.


dig -x

Частая практика это проверка почтовым сервером отправитель, т.е. принимающий почтовый сервер спрашивает доменное имя. Если такой записи нет или она не ведет на тот же сервер, то должен возникнуть вопрос а стоит ли доверять ему. Это делается для защиты от «спамеров«.

CNAME

Эта запись используется для определения псевдонимов домена. К примеру, изменился домен сайта, но люди еще по старой памяти открывают старое название. Чтобы они так же могли продолжать работать с помощью CNAME устанавливается перенаправление на другой домен, а потом уже для другого домена определяется его реальный адрес. Обычно CNAME используется временно и удаляется через какой-то определенный срок.


dig  CNAME

DNAME

Эта запись так же используется для определения псевдонимов домена, но на постоянной основе. Принцип работы его такой же.


dig  DNAME

TXT

Данная запись является информационной. В нее добавляется различный текст, а он в свою очередь может являться определенными настройками. Так в записях TXT могут храниться записи SPF, в которых указывается какая-то информация для почтового сервера.


dig  TXT

SRV

Эта запись предназначена для определения какая служба где находится. Так эту запись используют для определения серверов SIP (телефония), Active Directory (в корпоративных сетях), XMPP (служба обмена мгновенных сообщений) и т.д. У нее все та же роль: узнать реальный сервер, с которым можно установить соединение для дальнейшей работы.


dig _-._. SRV

В ответ DNS-сервер отвечает с именем домена, где расположен сервер, приоритет, вес и портом, к которому необходимо подключаться.

Это все?

На самом деле существует очень много типов записей, с которыми работает DNS. Я рассмотрел лишь популярные, которые используются на стороне клиента. Существуют так же записи, например, SOA с эталонной информацией о домене, **NS **с информацией о сервере, являющийся владельцем домена и т.д. Все эти записи описаны в специальных документах под названием RFC и имеющих свой номер с описанием спецификации. Для тех, кто хочет использовать его на домашнем сервере можно установить специализированные программы, которые будут являться как самостоятельным сервером, так и, так называемым, Forward-сервером.

Forward-сервер — это такой сервер, который является промежуточным и способен «кэшировать» запросы, чтобы разгрузить основной сервер и минимизировать время ответа клиенту.