Протокол 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.
Использование записи 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 существует три типа запросов:
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, описывающим концепцию доменный имен: