2. Система доменных имен

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

2.1 Несколько определений

Система доменных имен представляет собой распределенную базу данных записей ресурсов (см. [RFC1034]), связывая много типов информации (например, IP-адрес, почтовый сервер и т.д.) с доменными именами. Как и в файловой системе Unix, структура этой базы данных представляет собой иерархию перевернутого дерева с корнем в вершине. Все дерево называется Пространством Доменных Имен.

DNS Namespace vs. Unix FileSystem

Каждый узел в пространстве доменных имен имеет текстовую метку (корневой узел имеет особую метку нулевой длины, "") и однозначно идентифицируется по имени домена, например, список меток на пути от узла до корня, разделенных точками (пути в Unix, напротив, начинаются с корня и разделяются косыми чертами (slash)).

Например, доменное имя, выделенное на следующем изображении, состоит из последовательности "www", "kernel-panic", "it" и нулевой метки корня и поэтому пишется как "www.kernel-panic.it.".

Domain Name

Так как корневой узел обычно записывается в виде одной точки, доменные имена, оканчивающиеся на завершающую точку, считаются абсолютными (по аналогии с абсолютным путем Unix, начинающимся с косой черты). Абсолютное доменное имя также называется полностью определенным доменным именем (FQDN). Доменные имена, не завершающиеся точкой, считаются относительными по отношению к другому домену, как правило, самому корню. Относительное доменное имя также упоминается как частично определенное доменное имя (PQDN).

Домен представляет собой поддерево пространства доменных имен и принимает доменное имя его верхнего узла. Каждый домен может иметь свои собственные поддеревья, называемые поддоменами. Домены могут также быть разделены по уровням: домен верхнего уровня (или первого уровня) является потомком корня; домен второго уровня является потомком домена первого уровня и так далее.

Domains levels

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

Программы, которые хранят информацию о зоне, называют серверы доменных имен и говорят, что они обладают полномочиями (являются авторитетными) в этой зоне. Есть два типа серверов имен:

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

2.2 Процесс разрешения имен

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

Есть два типа запросов DNS:

Обычно разрешители выполняют рекурсивные запросы, возлагая бремя разрешения имени на запрашиваемый сервер имен; DNS-серверы, вместо этого, выполняют серию итерационных запросов по разным направлениям пока не получат требуемый ответ.

Давайте посмотрим на примере, как все это работает. Предположим, вы хотите посетить веб-сайт "www.kernel-panic.it", вы вводите URL в браузере, нажимаете клавишу "Enter" и вот, что происходит далее:

  1. The name resolution process разрешитель выполняет рекурсивный запрос вашему корпоративному серверу DNS, ожидая в ответ IP-адрес веб-сервера "www.kernel-panic.it" или сообщение об ошибке;
  2. корпоративный DNS сервер не является авторитетным для запрашиваемой зоны, поэтому он посылает итеративный запрос по адресу доменного имени "www.kernel-panic.it" корневому серверу имен, то есть одному из 13 DNS серверов по всему миру, которым известны серверы имен, являющиеся авторитетными для каждой из зон верхнего уровня;
  3. запрашиваемый корневой сервер имен не будет, скорее всего, знать полный ответ, но он, конечно, знает, какие серверы имен являются авторитетными для "it" зоны. Таким образом, он отошлет ваш корпоративный сервер DNS к этим серверам имен;
  4. ваш DNS сервер выберет один из указанных серверов имен и отправит тот же итеративный запрос по доменному имени "www.kernel-panic.it";
  5. запрошенный сервер имен "it" не будет, наверное, знать полный ответ и, следовательно, перенаправит ваш корпоративный сервер DNS к списку серверов имен, авторитетных для зоны "kernel-panic.it";
  6. в результате, ваш DNS сервер нашел серверы имен, авторитетные для зоны "kernel-panic.it", и пошлет тот же запрос одному из них;
  7. запрашиваемый сервер имен возвращает адрес доменного имени "www.kernel-panic.it";
  8. ваш корпоративный сервер имен, наконец, сможет вернуть запрошенную информацию разрешителю.

Как вы могли видеть, процесс разрешения может включать в себя довольно много шагов, но после каждого шага, сервер имен получает новую порцию информации о пространстве доменных имен. Например, в предыдущем примере, корпоративному серверу DNS стало известно о том, какие серверы являются авторитетными для зон "it" и "kernel-panic.it". Так что теперь вы знаете, что происходит, если вы хотите подключиться к машине "ftp.kernel-panic.it"? Ваш корпоративный сервер уже знает имя авторитетного сервера для зоны "kernel-panic.it", поэтому он будет посылать запрос непосредственно к одному из них и получит ответ в один этап, тем самым ускоряя процесс разрешения имени. Хранение полученных данных для использования в дальнейшем, называется кэшированием. Начиная с версии 4.9, Bind также отслеживает несуществующие домены (отрицательное кэширование), тем самым предотвращая повторение не удавшихся запросов.

2.3 Обратное разрешение имен

Обратное разрешение имен - это процесс преобразования IP-адреса обратно в FQDN. Хотя, как это может показаться, данная задача потребует перебора всего пространства доменных имен, на самом деле, это так же просто, как разрешение имен, потому что разработчики DNS создали специальный домен "in-addr.arpa", который использует в качестве меток точечно-октетное представление IP-адресов.

Иными словами, домен in-addr.arpa имеет (или, если более точно, может иметь) до 256 поддоменов третьего уровня (с номерами от 0 до 255), что соответствует возможным значениям первого октета IP-адреса; каждый из этих 256 поддоменов могут, в свою очередь, иметь до 256 поддоменов четвертого уровня, также пронумерованных от 0 до 255, что соответствует значениям второго октета, и так далее.

The in-addr.arpa domain

Поэтому, чтобы найти связанное с IP-адресом полное доменное имя, разрешитель должен просто запросить у сервера имен PTR запись (см. ниже) соответствующего узла в домене in-addr.arpa. Например, чтобы получить доменное имя для IP-адреса 62.149.140.23, разрешитель обращается к серверу DNS за PTR записью доменного имени "23.140.149.62.in-addr.arpa".

Как вы можете видеть, в доменном имени in-addr.arpa IP-адреса показываются в обратном порядке. Это связано с принципиальной разницей между IP-адресами и доменными именами: IP-адреса конкретизируются (уточняются) слева направо, в то время как доменные имена, конкретизируются справа налево. Следовательно, наименование узлов в in-addr.arpa таким, казалось бы, странным способом, на самом деле позволяет IP-адресам правильно отражать иерархическую структуру системы доменных имен.

2.4 Записи ресурсов

Каждый узел в пространстве доменных имен имеет связанный с ним набор информационных ресурсов, состоящий из отдельных записей ресурсов (RR), которые могут быть пустыми. Эта информация содержится в текстовом виде в файлах данных зоны, в то же время, запросы и передачи зоны представляют его в двоичной форме. Запись ресурса состоит из пяти полей:

Name
Доменное имя, к которому относится запись ресурса
Type
Тип записи ресурса (см. ниже)
TTL
Время жизни РР, то есть, как долго разрешители должны держать его в кэше, прежде чем она будет считаться устаревшей
Class
Тип сети или программного обеспечения, к которым применяется запись; действующие классы Интернет (IN), CHAOSnett (CH) и Hesiod (HS). Мы остановимся только на классе Интернет, который применяется ко всем основанным на TCP/IP сетям и ​​на сегодняшний день является наиболее распространенным
RDATA
Актуальные ресурсные данные, связанные с доменным именем

Основные типы записей DNS (см. [RFC1035]):

A (Address)
32-разрядный IP адрес хоста
AAAA (IPv6 Address)
Адрес хоста в формате IPv6
CNAME (Canonical Name)
Задание псевдонима для доменного имени, то есть различные полные доменные имена (FQDN), которые могут быть использованы для обозначения одного хоста
KEY
Общедоступный ключ сервера для TSIG и DNSSEC
MX (Mail eXchanger)
Определяет список почтовых серверов, которым следует отправлять почту для этого домена
NS (Name Server)
Авторитетный сервер имен для домена
PTR (Pointer)
Указатель на другое место в пространстве доменных имен. Он в основном используется, чтобы связать доменное имя с IP-адресом в домене "in-addr.arpa" для обратного разрешения имен
SOA (Start Of Authority)
Определяет начало авторитетной зоны
TXT (Text)
текстовая строка, содержащая произвольные данные (до 255 байт), связанные с именем