Протокол DNS

Domain Name System DNS - это сетевая система, содержащая информацию о каждом web-сайте в Интернете. Каждый сайт имеет свой уникальный IP-адрес, имеющий вид 111.222.111.222, а также доменное имя, например merionet.ru. Человеку гораздо проще запомнить доменное имя сайта, нежели набор цифр входящих в IP-адрес. Для этих целей и была разработана система DNS. Подобно записной книжке, в ней хранится таблица соответствия доменного имени сайта и его IP-адреса.

В DNS используется иерархическая древовидная структура серверов и имен. Самый верхний уровень это “root”, представляющий из себя точку (.) и следующий за ним домен верхнего уровня (Top Level Domain). Эти домены бывают двух типов:

  • Generic Top Level Domain (gTLD)

Например: .com (коммерческие web-сайты), .net(web-сайты сетевых структур), .org (вэб- сайты организаций), .edu (web-сайты образовательных структур)

  • Country Code Top Level Domain (ccTLD)

Например: .ru (Россия), .us (США), .uk (Великобритания), .in (Индия)

Доменные зоны DNS

Данные, которые сообщают веб-серверу, как ответить на ваш запрос называются DNS записи или Zone Files. Каждая запись содержит информацию о конкретном объекте. DNS-сервер использует записи, чтобы отвечать на запросы хостов из определенной доменной зоны. Например, запись address mapping (A) отвечает за связку host name и IP-адреса, а запись reverse-lookup pointer (PTR), за связку IP-адреса и host name. Стоит отметить, что в терминологии DNS очень много различных записей:

  • A Record - Содержит информацию об определенном доменном имени и соответствующем IPv4-адресе. DNS-сервер обращается к данной записи, чтобы ответить на запрос, содержащий доменное имя. Ответом будет IP-адрес, указанный в записи.

Примеры записи A:

Имя записи
Тип записи
Значение

site.ru

A

123.123.123.123

shop.site.ru

A

123.123.123.123

где 123.123.123.123 — IP-адрес нужного вам сервера.

  • AAAA Record - это запись, которая работает так же, как и запись А — связывает домен с IP-адресом сервера. Однако подходит она только для адресов формата IPv6 (вида 7628:0d18:11a3:09d7:1f34:8a2e:07a0:765d).

Примеры записи AAAA:

Имя записи
Тип записи
Значение

www.site.ru

АААА

2341:fe9a:ed9e:1ee6

mail.site.ru

АААА

7898:0d18:11a3:09d7:1f77:8a2e:01a0:764d

где 2341:fe9a:ed9e:1ee6 — IP-адрес нужного вам сервера.

  • PTR Record - Связывает IP-адрес с определенным доменным именем.

  • NS (Name Server) Record - Связывает доменное имя со списком DNS-серверов, отвечающих за данный домен. Количество NS записей должно строго соответствовать количеству всех обслуживающих его серверов. Критически важна для работы службы DNS.

  • SOA (Start of Authority) Record — начальная запись зоны, которая указывает, на каком сервере хранится эталонная информация о доменном имени. Критически важна для работы службы DNS.

Записи NS, PTR, SOA являются служебными и, как правило, настраиваются автоматически.

  • MX (Mail Exchange) Record - Связывает доменное имя со списком серверов почтового обмена для данного домена. Например, при отправке письма на адрес example@merionet.ru, данное письмо будет перенаправлено на сервер, указанный в MX записи.

Примеры записи MX:

Имя записи
Тип записи
Приоритет
Значение

site.ru

MX

10

mx1.hosting.reg.ru

site.ru

MX

15

mx2.hosting.reg.ru

где mx1.hosting.reg.ru — нужный вам почтовый сервер.

Обычно указывается два почтовых сервера, чтобы в случае недоступности одного из них почта всё же была отправлена на другой. Приоритет записи определяет, на какой сервер нужно отправлять почту в первую очередь. Чем меньше число, тем выше приоритет. Таким образом, для доменного имени site.ru почтовый сервер mx1.hosting.reg.ru является основным, а mx2.hosting.reg.ru выступает второстепенным. Если приоритет одинаковый, сервер выбирается случайным образом.

  • CNAME (Canonical Name) Record - запись, которая отвечает за привязку поддоменов (например, www.site.ru) к каноническому имени домена (site.ru) или другому домену. Основная функция CNAME — дублирование ресурсных записей домена (A, MX, TXT) для различных поддоменов.

Примеры записи CNAME:

Имя записи
Тип записи
Значение

www.site.ru

CNAME

site.ru

mail.site.ru

CNAME

webmail.hosting.reg.ru

Если вы пропишете CNAME для поддомена www.site.ru и укажете значение site.ru, сайт будет открываться с того же IP-адреса, что и site.ru. Если вы пропишете CNAME для mail.site.ru и укажете значение webmail.hosting.reg.ru, то на mail.site.ru будут распространятся те же ресурсные записи, что для webmail.hosting.reg.ru.

circle-info

Использование записи CNAME исключает использование других ресурсных записей для данного поддомена, то есть для поддомена mail.site.ru или www.site.ru нельзя одновременно добавить и запись A и запись CNAME.

  • TXT Record - запись, которая содержит любую текстовую информацию о домене. Записи TXT используются для различных целей: подтверждения права собственности на домен, обеспечения безопасности электронной почты, а также подтверждения SSL-сертификата. Часто применяется для проверок на право владения доменом при подключении дополнительных сервисов, а также как контейнер для записи SPF и ключа DKIM. Можно прописывать неограниченное количество TXT-записей, если они не конфликтуют друг с другом.

  • SPF (Sender Policy Framework) Record -

    содержит информацию о списке серверов, которые имеют право отправлять письма от имени заданного домена. Позволяет избежать несанкционированного использования. Настройка SPF прописывается в TXT-записи для домена.

Пример записи SPF:

Имя записи
Тип записи
Значение

site.ru

TXT

v=spf1 include:_spf.hosting.reg.ru ip4:123.123.123.123 a mx ~all

где 123.123.123.123 — IP-адрес нужного вам сервера.

В этом примере:

  • v=spf1 — определяет версию используемой записи SPF;

  • include:_spf.hosting.reg.ru — включает в запись SPF значение SPF-записи другого домена. То есть для домена будут действовать все значения записи SPF для домена «_spf.hosting.reg.ru»;

  • ip4:123.123.123.123 — разрешает приём почты с IP-адреса 123.123.123.123;

  • a — разрешает приём почты с сервера, IP-адрес которого стоит в ресурсной A-записи домена. Проще говоря, с сервера, где размещён сайт;

  • mx — разрешает приём почты, если отправляющий сервер указан в одной из записей MX для домена;

  • ~all — если письмо пришло с сервера, который не входит в вышеперечисленный список, его стоит проанализировать более тщательно. Также иногда используется -all — в этом случае письмо не проходит дополнительных проверок и сразу отвергается.

Помимо «~» и «-», для параметра «all» существуют ещё ключи:

  • «+» — принимать почту,

  • «?» — воспринимать письмо нейтрально.

Типы запросов DNS

В терминологии DNS существует три типа запросов:

  1. Recursive – Такие запросы можно представить так: “Какой IP-адрес у a.merionet.ru?”

При получении recursive запроса, DNS-сервер выполняет следующие действия:

  • Хост отправляет локальному DNS-серверу запрос “Какой IP-адрес у a.merionet.ru?”

  • DNS-сервер проверяет наличие записи a.merionet.ru в локальных таблицах и не находит ее.

  • DNS-сервер отправляет запрос IP-адреса a.merionet.ru к root-серверу

  • Root-сервер отвечает, что надо обратиться к TLD серверу, отвечающий за домен .ru

  • DNS-сервер, получив ответ от root-сервера, отправляет recursive запрос одному из ccTLD-серверов, отвечающих за домен .ru

  • TLD-сервер отвечает, что нужно обратиться к серверу, отвечающему за домен merionet.ru

  • DNS-сервер отправляет запрос IP-адреса a.merionet.ru к серверу, отвечающему за домен merionet.ru

  • Сервер обращается к A Record и находит там соответствующий IP-адрес для a.merionet.ru

  • Таким образом, хост получает запрашиваемую страницу по адресу a.merionet.ru

  1. Второй тип DNS-запросов – это Iterative запросы. Данные запросы передаются между DNS-серверами, когда один из них не имеет соответствующих записей. Таким образом, инициатор запроса будет контактировать с сервером, который имеет нужную запись

  2. Последний тип запросов – Inverse. Собственно из названия данного запроса понятно, что они работают по инверсному принципу, то есть при известном IP-адресе запрашивается информация о доменном имени.

Как работает DNS-система

Наглядно работа системы описана на схеме ниже.

Как работает DNS-система

Фактически браузеру для подключения к серверу нужен только IP-адрес. Но где его взять, если пользователь указал только символьное имя (домен)?

  • Браузер сначала обращается к файлу hosts на ПК.

  • Если в файле нет информации, он переадресует обращение к системе DNS.

  • Первые на пути у него DNS-серверы локальные, затем - текущего интернет-провайдера (компании, обеспечивающей подключение к глобальной сети). При наличии актуального IP сервера хостинга браузеру будет сразу предоставлен нужный адрес узла, и он подключится к сайту напрямую.

  • Если данных нет, DNS-сервер провайдера передаст запрос к ближайшим доступным корневым DNS-серверам (их существует 13 основных, но с учётом реплик – более 120 шт., чьи базы данных идентичны и постоянно актуализируются между собой, чтобы снизить нагрузку от запросов, применяют кэширование, в РФ работает несколько реплик, например, в Москве, СПб, Ростове-на-Дону и в Новосибирске).

  • Корневой сервер или его реплика работает только с доменами первого уровня. То есть возвращает только адрес DNS-сервера соответствующей доменной зоны. Конкретных IP-адресов сайтов он не предоставляет.

  • Теперь провайдер запрашивает адрес сайта у DNS-сервера выбранной доменной зоны.

  • DNS-сервер зоны тоже не знает конкретных IP-адресов сайтов, но знает, где их искать, ведь в ресурсных записях домена обязательно указаны адреса NS-серверов.

  • Простой пример: вы выбрали в качестве хостинга Bluehost и указали в качестве NS-серверов ns1.bluehost.com (основной) и ns2.bluehost.com (запасной/резервный). Поэтому в ответе на запрос DNS-сервер зоны RU вернёт строку ns1.bluehost.com.

  • Теперь провайдер обращается уже к серверу ns1.bluehost.com и получает конкретный IP-адрес сервера с сайтом.

  • Адрес узла возвращается браузеру и происходит прямое подключение к хостингу.

  • Если на одном сервере размещается сразу несколько сайтов (например, если это shared-хостинг), то специальное программное обеспечение (web-сервер) перенаправляет запрос к нужному каталогу на основании идентификатора – доменного имени.

В качестве программного обеспечения, реализующего функции DNS-сервера, будет использоваться пакет BIND9.

Также рекомендую ознакомиться со RFC 1034, описывающим концепцию доменный имен:

Last updated