Настраивать DNS будет намного легче, если у вас есть хорошее понимание основ. Поэтому, прежде чем спешить редактировать наши файлы данных зоны, давайте кратко рассмотрим общую архитектуру системы доменных имен и его внутренние механизмы.
Система доменных имен представляет собой распределенную базу данных записей ресурсов (см. [RFC1034]), связывая много типов информации (например, IP-адрес, почтовый сервер и т.д.) с доменными именами. Как и в файловой системе Unix, структура этой базы данных представляет собой иерархию перевернутого дерева с корнем в вершине. Все дерево называется Пространством Доменных Имен.
Каждый узел в пространстве доменных имен имеет текстовую метку (корневой узел имеет особую метку нулевой длины, "") и однозначно идентифицируется по имени домена, например, список меток на пути от узла до корня, разделенных точками (пути в Unix, напротив, начинаются с корня и разделяются косыми чертами (slash)).
Например, доменное имя, выделенное на следующем изображении, состоит из последовательности "www", "kernel-panic", "it" и нулевой метки корня и поэтому пишется как "www.kernel-panic.it.".
Так как корневой узел обычно записывается в виде одной точки, доменные имена, оканчивающиеся на завершающую точку, считаются абсолютными (по аналогии с абсолютным путем Unix, начинающимся с косой черты). Абсолютное доменное имя также называется полностью определенным доменным именем (FQDN). Доменные имена, не завершающиеся точкой, считаются относительными по отношению к другому домену, как правило, самому корню. Относительное доменное имя также упоминается как частично определенное доменное имя (PQDN).
Домен представляет собой поддерево пространства доменных имен и принимает доменное имя его верхнего узла. Каждый домен может иметь свои собственные поддеревья, называемые поддоменами. Домены могут также быть разделены по уровням: домен верхнего уровня (или первого уровня) является потомком корня; домен второго уровня является потомком домена первого уровня и так далее.
Иерархическая структура системы доменных имен позволяет децентрализовать ее администрирование, в самом деле, организация, отвечающая за домен, может делегировать, то есть возложить ответственность за субдомен на другую организацию, и только сопровождать информацию о не-делегированной части домена (так называемой зоны).
Программы, которые хранят информацию о зоне, называют серверы доменных имен и говорят, что они обладают полномочиями (являются авторитетными) в этой зоне. Есть два типа серверов имен:
Наличие двух типов серверов имен упрощает процесс администрирования, предоставляя единую точку конфигурирования, а также позволяя, при наличии нескольких серверов имен, имеющих полномочия для зоны, использовать избыточность, распределение нагрузки и оперативность.
Клиенты, обращающиеся к серверам имен, называются разрешителями (resolvers). В Bind разрешитель представляет собой библиотеку, которая должна быть связана с приложениями, требующими службы имен. Когда приложению требуется информация из пространства доменных имен, оно использует разрешитель для выполнения запросов к DNS серверу (как правило, корпоративному серверу или серверу провайдера). Если запрос относится к обслуживаемой зоне, то сервер DNS будет отвечать немедленно, в противном случае, он будет искать требуемые данные через пространство доменных имен. Этот процесс называется разрешением имени.
Есть два типа запросов DNS:
Обычно разрешители выполняют рекурсивные запросы, возлагая бремя разрешения имени на запрашиваемый сервер имен; DNS-серверы, вместо этого, выполняют серию итерационных запросов по разным направлениям пока не получат требуемый ответ.
Давайте посмотрим на примере, как все это работает. Предположим, вы хотите посетить веб-сайт "www.kernel-panic.it", вы вводите URL в браузере, нажимаете клавишу "Enter" и вот, что происходит далее:
Как вы могли видеть, процесс разрешения может включать в себя довольно много шагов, но после каждого шага, сервер имен получает новую порцию информации о пространстве доменных имен. Например, в предыдущем примере, корпоративному серверу DNS стало известно о том, какие серверы являются авторитетными для зон "it" и "kernel-panic.it". Так что теперь вы знаете, что происходит, если вы хотите подключиться к машине "ftp.kernel-panic.it"? Ваш корпоративный сервер уже знает имя авторитетного сервера для зоны "kernel-panic.it", поэтому он будет посылать запрос непосредственно к одному из них и получит ответ в один этап, тем самым ускоряя процесс разрешения имени. Хранение полученных данных для использования в дальнейшем, называется кэшированием. Начиная с версии 4.9, Bind также отслеживает несуществующие домены (отрицательное кэширование), тем самым предотвращая повторение не удавшихся запросов.
Обратное разрешение имен - это процесс преобразования IP-адреса обратно в FQDN. Хотя, как это может показаться, данная задача потребует перебора всего пространства доменных имен, на самом деле, это так же просто, как разрешение имен, потому что разработчики DNS создали специальный домен "in-addr.arpa", который использует в качестве меток точечно-октетное представление IP-адресов.
Иными словами, домен in-addr.arpa имеет (или, если более точно, может иметь) до 256 поддоменов третьего уровня (с номерами от 0 до 255), что соответствует возможным значениям первого октета IP-адреса; каждый из этих 256 поддоменов могут, в свою очередь, иметь до 256 поддоменов четвертого уровня, также пронумерованных от 0 до 255, что соответствует значениям второго октета, и так далее.
Поэтому, чтобы найти связанное с 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-адресам правильно отражать иерархическую структуру системы доменных имен.
Каждый узел в пространстве доменных имен имеет связанный с ним набор информационных ресурсов, состоящий из отдельных записей ресурсов (RR), которые могут быть пустыми. Эта информация содержится в текстовом виде в файлах данных зоны, в то же время, запросы и передачи зоны представляют его в двоичной форме. Запись ресурса состоит из пяти полей:
Основные типы записей DNS (см. [RFC1035]):