Протокол DNS
Last updated
Last updated
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 записи или 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.
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 существует три типа запросов:
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
Второй тип DNS-запросов – это Iterative запросы. Данные запросы передаются между DNS-серверами, когда один из них не имеет соответствующих записей. Таким образом, инициатор запроса будет контактировать с сервером, который имеет нужную запись
Последний тип запросов – Inverse. Собственно из названия данного запроса понятно, что они работают по инверсному принципу, то есть при известном IP-адресе запрашивается информация о доменном имени.
Наглядно работа системы описана на схеме ниже.
Фактически браузеру для подключения к серверу нужен только 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, описывающим концепцию доменный имен: