С какой записи должна начинаться база данных сервера dns

Обновлено: 06.07.2024

Система доменных имен (Domain Name System) или просто DNS — важнейшая часть механизма Всемирной сети. Именно она позволяет сопоставить доменные имена веб-ресурсов с IP-адресами физических устройств, на которых они расположены.

Эту распределенную базу данных можно назвать аналогом «телефонного справочника» всего Интернета. «Телефонные номера» в ней — это IP-адреса, а «ФИО абонентов» — соответствующие им доменные имена.

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

Об основных типах DNS-записей и их назначении расскажем в данной статье.

Из чего состоит DNS-запись

В состав DNS-записи входят следующие поля:

  • Name/ Hostname (Имя, хост, домен — имеет несколько названий). Определяет домен, к которому относится (привязана) данная ресурсная запись.
  • Type (Тип). Указывает на тип (назначение) данной ресурсной записи. Наиболее распространенные типы DNS-записей — A, AAAA, MX, CNAME и TXT.
  • Class (Класс). Здесь указывается тип рабочей сети. Теоретически, система может работать во всех ее типах. Но, TCP/IP сети — самые распространенные. Поэтому, поле редко используется.
  • TTL (Time To Live) — время жизни (хранения) DNS-записи.
  • RDATA (Resource Data) — значение данного поля ресурсной записи зависит от ее конкретного типа.
  • Priority (Приоритет) — задает приоритет (очередность) обработки конкретной DNS-записи.
  • Protocol (Протокол)— указывает на протокол, используемый TCP, UDP, TLS.
  • ServiceName (Имя сервиса) — его можно посмотреть в файле /etc/services. Например: pop3, telnet.
  • Weight (Вес) — задает вес хоста. Обработка запросов распределяется по весу хоста.
  • Address (Адрес) — IP-адрес, который автоматически конвертируется в in-addr.arpa формат.

Некоторые виды DNS-записей могут иметь дополнительные поля, отличные от указанных.

Распространенные типы записей

Типы DNS-записей зависят от их функционального назначения.

Что такое DNS записи - Распространенные типы

A-запись (Address record)

Address record указывает на конкретный IP-адрес домена. Без нее сайт работать не будет. По этой записи система определяет к какому серверу обращаться за получением информации, когда пользователь вводит название сайта в адресную строку веб-браузера.

Пример

Hostname Тип записи Значение записи
eternalhost.net. A 194.61.0.6

AAAA-запись (Address record to IPv6)

AAAA запись DNS — аналог предыдущей А-записи. В значении указывается внешний IP-адрес в формате IPv6.

Пример

Hostname Тип записи Значение записи
eternalhost.net. AAAA 212:14:2127:1:211:4eef:fe10:b17

CNAME-запись (Canonical name)

CNAME («каноническое имя») указывает на расположение хостов на одном сервере. С ее помощью, можно прописать несколько доменов и поддоменов в рамках одного сервера.

Каноническое имя позволяет создать наследование, при котором поддомен получает свойства всех ресурсных записей одного домена (кроме NS), через псевдоним (алиас).

Перед ее заполнением, надо прописать A-запись. После, можно создавать псевдонимы (их количество не ограничено).

Пример

Каждое значение обязательно должно заканчиваться точкой. Таким образом, можно привязывать разные хосты к одному серверу или выполнять редирект.

MX-запись (Mail exchanger)

MX-запись задает почтовый сервер, который будет принимать и отправлять почту для данного домена. Запись может указывать на внутренний или внешний почтовый сервер.

Пример

При обработке электронной почты на внутреннем сервере, должна присутствовать A-запись.

Пример

Host name Тип записи Значение записи
eternalhost.net. A 194.61.0.6

Например, для привязки почты для домена на серверы Яндекс почты, надо указать следующие записи:

Hostname Тип записи Значение Приоритет TTL
eternalhost.net. MX mx.yandex.net. 10 21600

NS-запись (Name Server)

Этой записью определяется доменный адрес DNS-сервера, обслуживающий конкретный домен. Интернет-соединение с доменом не функционирует, если не указана NS-запись.

Пример

TXT-запись (Text String)

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

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

Пример

Hostname Тип записи Значение записи
eternalhost.net. TXT Любая текстовая запись без кавычек.

SOA-запись (Start of Authority)

Указывает местоположение сервера с эталонной информацией о домене. Запись создается автоматически в самом начале и не может быть отредактирована или удалена.

Пример

Hostname Тип записи Serial number TTL Refresh Retry Expire Minimum TTL
Контактный адрес администратора файловой зоны SOA 1812191123 3600 7200 540 604800 86400

SRV-запись (Service record)

Указывает расположение серверов (имя хоста, № порта) для определенных сервисов. Выполняет ассоциативную роль. Например, через него можно задать:

Пример

Host name Service Name Protocol Priority Weight
eternalhost.net. _xmpp-server _tcp 100 0

PTR-запись (Reverse DNS)

Обратная запись DNS служит для связывания отдельного IP-адреса с доменным именем. В основном, запись используется для отправки почты с домена. Если PTR-запись совпадет с именем почтового сервера из параметра HELO (EHLO), повысится шанс миновать спам-фильтры почтовых серверов на стороне получателя письма.

Пример

Host name Тип записи Address
mail.eternalhost.net. PTR 194.61.06.in-addr.arpa

DNAME-запись (Domain Name)

Запись используется для создания алиасов (псевдонимов) для всего дерева поддоменов, не затрагивая основной домен. В этом заключается отличие DNAME от CNAME-записи, которая создает псевдонимы только для одного домена, без его поддоменов.

CAA-запись (Certification Authority Authorization)

Запись определяет, SSL/TLS-сертификаты каких центров сертификации могут применяться для указанного домена или поддомена. Обычно она генерируется на хостинге автоматически. Если CAA-запись не указана, это будет интерпретировано центром, как разрешение на выпуск сертификата.

HINFO-запись (Host Information)

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

WKS-запись (Well Known Service)

Ассоциация hostname с конкретным портом и протоколом. Может задавать хост для обработки почты клиентов. На практике, почтовые сервисы почти никогда не запрашивают этих данных.

RP-запись (Responsible person)

Здесь прописаны реквизиты ответственных за домен. Указать можно как одного человека, так группу людей. Поле «Text Record Name» хранит Ф.И.О. ответственного работника, а поле «E-mail Address» — его электронную почту.

LOC-запись (Location information)

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

Где редактируются DNS-записи

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

Например, в ISPmanager это делается в разделе «Доменные имена». Для редактирования нужно войти в панель управления, выделить курсором нужный домен и нажать кнопку «Записи» в верхнем меню.

Что такое DNS записи - как редактировать

В открывшемся списке можно добавить или отредактировать DNS-запись при помощи функциональных кнопок «Создать» и «Изменить».

DNS-сервер, отвечающий за имена хостов в своей зоне, должен хранить информацию о хостах в базе данных и выдавать ее по запросу с удаленных компьютеров. База данных DNS представляет собой текстовый файл, состоящий из исходных записей RR (resource records). Эти записи описывают компьютеры и их функции в локальной зоне. Для организации обмена информацией с удаленными серверами DNS на сервере Linux должно быть запущено программное обеспечение сервера DNS (обычно это программа named ). Чуть позже в этой лекции мы рассмотрим работу этой программы.

Прежде всего в базе данных сервера DNS должна быть объявлена зона, за которую данный сервер несет ответственность. Далее в ней должны быть объявлены все хост-компьютеры, имеющиеся в зоне. И, наконец, в базе данных можно объявлять специальную информацию, касающуюся зоны (например, о серверах электронной почты и DNS-серверах). Формат записи базы данных был разработан таким образом, чтобы DNS-сервер мог почерпнуть из нее любую информацию, нужную для его работы. В табл. 4.2 приведены основные типы исходных записей, которые могут присутствовать в базе данных DNS. База данных DNS в последнее время стала темой для дискуссий среди исследователей. Так как многие хотят дополнить ее новыми возможностями и наряду с этим повысить уровень безопасности. В настоящее время в базу данных DNS постоянно вносятся новые типы записей. В табл. 4.2 отражены лишь основные типы записей, которые необходимы для открытия и ведения новой зоны в базе данных DNS.

Каждый DNS-сервер домена должен содержать исходные записи для всех хостов этого домена. В нем должна присутствовать одна запись SOA, которая вносится в самом начале базы данных. Все остальные исходные записи могут добавляться далее в произвольном порядке. На рис. 4.4 показан пример базы данных DNS для сети с рис. 4.2. В следующем разделе основные типы записей будут рассмотрены более подробно.

Пример ведения записей DNS для небольшой сети


Рис. 4.4. Пример ведения записей DNS для небольшой сети
Запись "начало полномочий" (SOA- Start of Authority)

Всякая база данных DNS должна начинаться с записи SOA, которая отмечает начало зоны, описываемой в базе данных.

Формат записи SOA:

Здесь domain name — имя зоны, которая далее описывается в базе данных (можно использовать также знак @ для обозначения домена по умолчанию для данного компьютера).

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

class обозначает протокол, который используется в системе (в нашем случае везде будет присутствовать класс IN для сети Internet ). Этот параметр также необязателен и по умолчанию ставится в значение IN .

origin — имя компьютера, где ведется основная зона. Будьте осторожны при расстановке разделительных точек ( .)! Не забудьте поставить точку после имени хоста, иначе доменное имя будет добавлено к имени хоста (если конечно вы не хотите обратного).

serial number является уникальным числом, которое идентифицирует версию файла базы данных. Очень часто для этой цели используется дата создания файла или последней его модификации и номер версии файла (например, 200026061).

refresh — интервал времени (в секундах), по истечении которого вторичный DNS-сервер должен опрашивать первичный DNS-сервер о текущей версии записи SOA. Если версия отличается от имеющейся во вторичном сервере DNS, то он пошлет запрос на обновление своей базы данных. Обычно для этого параметра устанавливается значение 1 час (3600 секунд).

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

expire — это интервал времени (в секундах) по истечении которого вторичный DNS-сервер может использовать данные, полученные от первичного DNS-сервера, без обновлений. Обычно это значение довольно большое, например 3600000 секунд (около 42 дней).

minimum — интервал времени (в секундах), который должен использоваться как TTL для всех исходных записей в зоне. Обычно 86400 секунд (т.е. одного дня) достаточно для этого параметра.

Запись Internet-адреса (A)

Каждый хост в зоне должен иметь в базе данных запись типа А, которая определяет его имя в сети Internet. Формат записи типа А:

где host — полностью определенное имя компьютера (включая доменное имя), а address — IP-адрес этого компьютера.

Любой пользователь Интернет имеющий домены на серверах хостинг-провайдеров могут создавать и редактировать свои DNS записи. DNS записи имеют Имя, Тип записи и Адрес. Эти названия в различных панелях могут меняться. Например, может быть так:

Имя/Хост/Псевдоним; Тип записи; Значение/Ответ/Назначение/Адрес.

dns-zapisi-02

Во всех вариантах «Тип записи» остается неизменным.

Имя записи

Имя записи, оно же хост/псевдоним это доменное имя, к которому принадлежит или привязана создаваемая запись.

DNS записи- типы

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

DNS записи

Тип записи А

Тип записи: А (address record) или (адрес Internet 4). Этот тип записи привязывает конкретное доменное имя на определенный, точный IP-адрес.

Можно добавить больше одного IP адреса для одного домена (имени хоста). Это нужно если используется firewall. Для этого нужно добавить вторую запись типа A, аналогично первой. Указав только другой IP.

В теории можно для одного IP адреса, указать более одного домена. Но этого делать не нужно, так как система доменных имен (DNS) имеет запись специально предназначенную для создания псевдонимов. Называется эти запись типа CNAME.

Тип записи АААА

Тип записи: AAАA (address record для IPv6) или (адрес Internet 6). Тоже. Что и тип записи А, но IP адрес имеет внешний вид по протоколу IPv6. Например: IPv6-2a03:4900:0:3::99:155

Тип записи CNAME

CNAME (каноническое имя -canonical name record). Запись типа CNAME позволяет иметь и использовать на сервере более одного имени домена (хоста).

Сначала создается одна запись типа А, для одного IP адреса. Имя домена в записи типа А, называется каноническим именем. Другие домены называют мнемонические. Мнемонические имена могут быть псевдонимами (произвольными именами) или субдоменами. Здесь пример CNAME записи:

Сервер может иметь любое количество псевдонимов. Для каждого псевдонима нужно создать запись типа CNAME.

Еще пример записи CNAME:

hosting-1 IN A 8.8.8.8

www IN CNAME hosting-1

ftp IN CNAME hosting-1

Покупаем второй IP и на второй IP переводим поддомен ftp:

hosting-1 IN A 8.8.8.8

hosting-2 IN A 8.8.8.9

www IN CNAME hosting-a

ftp IN CNAME hosting-b , переносим на второй хостинг FTP –сервер.

Еще пример записи CNAME:

hosting-1 IN A 8.8.8.8

peter IN CNAME hosting-1

oleg IN CNAME hosting-1

Следующими записями CNAME привязываем псевдонимы:

Еще пример переадресация (редирект) с помощью записи типа CNAME

Обычно, сервера по умолчанию создают записи CNAME только для поддоменов основного домена и не делают их для других доменов (как на фото).

dns-zapisi-04

Тип записи MX

MX (почтовый сервер). Эта запись создает поддомен, который обслуживается внутренним (своим) почтовым сервером.

В качестве почтового сервиса можно использовать сторонние почтовые сервера. Для этого вам нужно привязать свой домен к стороннему почтовому серверу. На нем вам создадут, автоматом, MX запись. Если не создадут, то дадут адрес почтового сервера. После этого вам нужно создать записи типа CNAME и MX на своем сервере.

dns-zapisi-06

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

dns-zapisi-07

Тип записи NS

Тип записи NS (сервер имён). Это, пожалуй, самый важный тип записи. Он определяет домены (адреса) DNS серверов, обслуживающих этот домен.

Тип записи TXT

TXT (текстовая запись). Это информационная запись. Она не несет функциональной нагрузки.

Запись типа SOA (Start Of Authority)

Запись типа SOA показывает, где храниться на каком сервере лежит основная информация об этом домене. В записи типа SOA указывается полное, уточненное доменное имя зоны. Уточненное доменное имя должно оканчиваться точкой. В записи SOA может стоять символ @, вместо уточненного имени. В этом случае, доменное имя будет взято из файла конфигурации.

Далее в записи SOA указываются:

  • Произвольный серийный номер версии данных (Serial). При запросе вторичного сервера на обновление данных, он, прежде всего, проверяет серийный номер;
  • Периодичность запроса для обновления данных со стороны вторичного (Secondary) сервера (Refresh), в секундах;
  • Период повторного запроса вторичного сервера при первичной неудаче (Retry);
  • Срок действия (годности) данных (Expire), иначе истечение времени, через которое вторичный сервер перестанет обслуживать запросы, если ему не получиться восстановить связь с первичным сервером, в секундах;
  • И последнее, время жизни данных зоны DNS в кэше сервера (TTL), запросившего их, в секундах.

Приведу пример записи SOA, для Microsoft DNS

DNS записи

Как редактировать DNS записи в панели ISPManager

В панели ISPManager DNS записи редактируются на вкладке: Доменные имена→ «Клик» по домену.

dns-zapisi-02

Как редактировать DNS записи в панели DirectAdmin

В панели DirectAdmin DNS записи редактируются на вкладке: Управление DNS.

Основная цель DNS — это отображение доменных имен в IP адреса и наоборот — IP в DNS. В статье я рассмотрю работу DNS сервера BIND (Berkeley Internet Name Domain, ранее: Berkeley Internet Name Daemon), как сАмого (не побоюсь этого слова) распространенного. BIND входит в состав любого дистрибутива UNIX. Основу BIND составляет демон named, который для своей работы использует порт UDP/53 и для некоторых запросов TCP/53.

Основные понятия Domain Name System

image

Исторически, до появления доменной системы имен роль инструмента разрешения символьных имен в IP выполнял файл /etc/hosts, который и в настоящее время играет далеко не последнюю роль в данном деле. Но с ростом количества хостов в глобальной сети, отслеживать и обслуживать базу имен на всех хостах стало нереально затруднительно. В результате придумали DNS, представляющую собой иерархическую, распределенную систему доменных зон. Давайте рассмотрим структуру Системы Доменных Имён на иллюстрации:


Доменная структура DNS представляет собой древовидную иерархию, состоящую из узлов, зон, доменов, поддоменов и др. элементов, о которых ниже пойдет речь. «Вершиной» доменной структуры является корневая зона. Настройки корневой зоны расположены на множестве серверов/зеркал, размещенных по всему миру и содержат информацию о всех серверах корневой зоны, а так же отвечающих за домены первого уровня (ru, net, org и др). Информация о серверах корневой зоны расположена на данном сайте корневых серверов. Настройки корневой зоны всегда доступны тут. Серверы корневой зоны обрабатывают и отвечают на запросы, выдавая информацию только о доменах первого уровня (то есть отвечают на любые запросы, как на нерекурсивные)! Итак, уже много раз повторилось слово зона. Пора этот термин объяснить.

Домен — это именованная ветвь или поддерево в дереве имен DNS, то есть это определенный узел, включающий в себя все подчиненные узлы. Следующая цитата из книги Linux Network Administrators Guide хорошо проясняет картину относительно разницы между зоной и доменом:

Таким образом, пространство имен раздроблено на зоны ( zones), каждая из которых управляется своим доменом. Обратите внимание на различие между зоной (zone) и доменом (domain): домен groucho.edu затрагивает все машины в университете Groucho Marx, в то время как зона groucho.edu включает только хосты, которые работают в непосредственно компьютерном центре, например в отделе математики. Хост в отделе физики принадлежат другой зоне, а именно physics.groucho.edu.

Каждый узел в иерархии DNS отделен от своего родителя точкой. Если провести аналогию с файловой системой Linux, система доменных имен имеет похожую структуру, за тем исключением, что разделитель в файловой системе — слэш, а в DNS — точка. А так же DNS адрес читается справа налево (от корневого домена к имени хоста) в отличии от пути в файловой системе Linux. Доменное имя начинается с точки (корневого домена) и проходит через домены первого, второго и если нужно третьего и т.д. уровней и завершается именем хоста. Т.о. доменное имя полностью отражает структуру иерархии DNS. Часто (я бы сказал — всегда в повседневной жизни), последняя точка (обозначение корневого домена) в доменном имени опускается (то есть в браузере мы вводим не k-max.name., а k-max.name). Итак, разобрав структуру доменного имени, мы незаметно подошли к понятию FQDN.

FQDN (англ. Fully Qualifed Domain Name, полностью определённое имя домена) — это имя домена, однозначно определяющее доменное имя и включающее в себя имена всех родительских доменов иерархии DNS, в том числе и корневого. Своеобразный аналог абсолютного пути в файловой системе. Давайте разберем вышесказанное на примере имени домена mail.k-max.name:

Различие между FQDN и обычным доменным (неFQDN) именем появляется при именовании доменов второго, третьего (и т. д.) уровня. Для получения FQDN требуется обязательно указать в доменном имени домены более высокого уровня (например, mail является доменным именем, однако FQDN имя выглядит как mail.k-max.name.). Максимальный размер FQDN — 255 байт, с ограничением в 63 байта на каждое имя домена.

Поддомены, коротко говоря, это — подчиненные домены. По большому счету, все домены в интернете являются подчиненными за исключением корневого. Например домен k-max является поддоменом домена name, а name, в свою очередь — поддоменом корневого домена.

Ресурсные записи

Ресурсная запись — это то, собственно ради чего в конечном счете и существует DNS. Ресурсная запись — это единица хранения и передачи информации в DNS. Каждая такая запись несет в себе информацию соответствия какого-то имени и служебной информации в DNS, например соответствие имени домена — IP адреса.

Запись ресурса состоит из следующих полей:

Для бОльшего понимания, приведу пример. Делегирование управления поддоменом k-max.name другому лицу (в моем случае — хостеру) приводит к созданию новой зоны, которая администрируется независимо от остального пространства имен (независимо от вышестоящего name.). Зона k-max.name после делегирования полномочий теперь не зависит от name. и может содержать все (вернее сказать — любые имена, которые я захочу) доменные имена, которые заканчиваются на *.k-max.name. С другой стороны, зона name. содержит только доменные имена, оканчивающиеся на *.name., но не входящие в делегированные этой зоны, такие, например, как k-max.name или a-lab.name или любая другая. k-max.name может быть поделен на поддомены с именами вроде mail.k-max.name, ftp.k-max.name и некоторые из этих поддоменов могут быть выделены в самостоятельные зоны, и ответственность за данные зоны может так же быть делегирована. Если ftp.k-max.name будет являться самостоятельной зоной, то зона k-max.name не будет содержать доменные записи, которые заканчиваются на *.ftp.k-max.name.

Т.о. после делегирования ответственности, информация хранимая делегирующей зоной уже не включает информацию по делегированному поддомену и его ресурсным записям хостов, а хранит информацию о серверах имен, являющихся для делегируемого поддомена авторитативными. Это и есть «склеивающие» записи, о чем я выше уже говорил. В таком случае, если у DNS-сервера родительского домена запрашиваются данные об адресе, принадлежащем делегированному поддомену, в ответ предоставляется список DNS-серверов, которые обладают соответствующей информацией.

Серверы DNS

Выше, при рассмотрении типов ресурсных записей я упоминал о первичном и вторичном сервере. Кроме данных типов, существует еще один тип — кэширующий.

Главный сервер DNS (он же первичный, он же master, он же primary) — это авторитетный сервер (иногда называют — авторитативный, как правильнее называть — не знаю), который хранит главную копию файла данных зоны, сопровождаемую администратором системы.

Вторичный сервер — тоже является авторитетным, но он копирует главный файл зоны с первичного сервера. Отличие главного от вторичного лишь в том, что главный загружает свою информацию из конфигурационных файлов зоны, а вторичный — загружает (получает) настройки зон — с главного сервера. Вторичный DNS может получать свои данные и от другого вторичного сервера. Любой запрос относительно хоста в пределах зоны, за которую отвечает авторитетный сервер, будет в конце концов передан одному из этих серверов (главному или вторичному). Вторичных серверов может быть сколько угодно много. В зависимости от настроек, главный сервер может посылать вторичному сигнал о изменении зоны, при этом вторичный, получив сигнал производит копирование. Данное действие называется трансфер зоны (zone transfer). Существует два механизма копирования зоны: полное копирование (AXFR) и инкрементальное (incremental) копирование зоны (IXFR).

Кэширующие серверы НЕ АВТОРИТЕТНЫ, данные серверы хранят в памяти (кэше), ответы на предыдущие запросы, если данный сервер получил запрос, то он сначала просматривает информацию в кэше, и если в кэше не оказалось необходимого ответа, то отправляет запрос вышестоящему серверу DNS.

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

Клиенты DNS (resolver)


Как же программы на конечных машинах знают куда и в каком виде посылать запросы DNS? Они этого не знают. Для разрешения имен и IP адресов клиентскими приложениями используется библиотека Resolver. Это не какое-то специальное приложение, это функциональность системы (ядра). Т.о. приложения посылают системные вызовы gethostbyname(2) и gethostbyaddr(2), а ядро уже на основании настроек в файле /etc/nsswitch.conf определяет по какому пути ему далее действовать. Данный файл определяет какие сервисы (будь то файл /etc/hosts или DNS) и в каком порядке использовать. В ранних версиях библиотеки Linux — libc, использовался файл /etc/host.conf. Вот фрагмент файла, который нас интересует:

Две строки данного фрагмента указывают ядру производить преобразование имен хостов в IP (строка hosts: files dns) сначала из файла hosts, затем силами DNS, а так же преобразование имен сетей в IP (строка networks: files) с помощью файла /etc/network.Возможны так же параметры nis или nisplu, определяющие использовать Network Information System (NIS) чтобы найти адрес. Порядок, в котором перечислены сервисы, определяет последовательность их опроса.
Если согласно /etc/nsswitch.conf запрос отправляется DNS, то используются настройки из файла /etc/resolv.conf, который определяет какие серверы DNS использовать. Вот типичный пример файла /etc/resolv.conf:

Директива nameserver определяет адрес сервера доменных имен, который будет выполнять рекурсивные запросы resolver. В данном файле указано использовать север имен сначала 192.168.1.1 затем, если первый не смог обработать запрос, 192.168.1.2. Рекомендуется не использовать более 3х параметров nameserver. Если опция nameserver не задана, то резолвер попытается соединиться с сервером на локальном хосте. Параметр domain определяет заданное по умолчанию имя домена, которое будет подставлено, когда DNS не удастся найти имя хоста. Существует так же опция search, которая задает дополнительные домены, в которых необходимо произвести поиск и разрешение имени хоста. Опции search и domain нельзя использовать совместно.

image

Кроме кэша на ДНС сервере, существуют кэши интернет-браузеров, кэши резолверов. Довольно прозрачную картину предоставляет Wikipedia:

Запросы DNS

В DNS имеются следующие типы запросов: итеративный (он же прямой), обратный и рекурсивный.

Итеративный (он же прямой, он же нерекурсивный) запрос посылает доменное имя DNS серверу и просит вернуть либо IP адрес этого домена, либо имя DNS сервера, авторитативного для этого домена. При этом, сервер DNS не опрашивает другие серверы для получения ответа. Так работают корневые и TLD серверы.

Рекурсивный запрос посылает DNS серверу доменное имя и просит возвратить IP адрес запрошенного домена. При этом сервер может обращаться к другим DNS серверам.

Обратный запрос посылает IP и просит вернуть доменное имя.

Любой DNS-server должен отвечать на итеративные запросы. Возможно настроить DNS отвечать и на рекурсивные запросы. Если DNS не настроен отвечать на рекурсивные запросы, он обрабатывает их как итеративные.

  1. Клиент (браузер, почтовая программа, либо любое другое приложение) отправляет запросрезолверу, резолвер на основании указанных конфигов определяет адрес настроенного сервера имен.
  2. Резолверпосылает запрос указанному серверу имен.
  3. Сервер имен принимает данный рекурсивный запрос и, т.к. не имеет информации ни о домене, ни, возможно, даже о зоне name., отправляет рекурсивный (или нерекурсивный в зависимости от настроек) запроссерверу, отвечающему за корневую зону.
  4. Сервер корневой зоны не обрабатывает рекурсивные запросы, в результате обрабатывает данный запрос как итеративный и возвращает имя и адрес сервера, авторитетного за зону name.
  5. Сервер последовательно продолжает опрашивать авторитативные сервера для последующих зон, в порядке убывания уровня зон в имени
  6. пока не получает удовлетворительный ответ, данных шагов может быть больше, в зависимости от длины доменного имени
  7. и «вложенности» доменных имен.
  8. В итоге, сервер получает необходимый ответ от сервера имен, хранящего необходимую ресурсную запись о хосте.
  9. Сервер провайдера локальной сети возвращает резолверу клиента запрошенные данные.

Для решения данного вопроса DNS-серверы BIND используют метрику, называемую временем отклика (roundtrip time, или RTT), для выбора среди авторитативных DNS-серверов одной зоны. RTT определяет задержку, с которой приходит ответ на запросы от удаленного сервера. Каждый раз, при передаче запроса удаленному серверу, DNS-сервер BIND запускает внутренний таймер. Таймер останавливается при получении ответа, и метрика фиксируется локальным сервером. Если приходится выбирать один из нескольких авторитативных серверов, выбор падает на сервер с наименьшим показателем RTT.

До того как BIND впервые послал запрос какому-либо серверу и получил от него ответ, удаленному серверу присваивается случайное значение RTT, которое меньше, чем все прочие, полученные на основании замеров. Таким образом, DNS BIND гарантированно опросит все авторитативные серверы для определенной зоны случайным образом, прежде чем начнет выбирать предпочтительный на основании метрики.

Ответы DNS сервера

  • Авторитативный ответ (authoritative response) приходит от серверов, являющихся ответственными за зону.
  • Неавторитативный ответ (non authoritative response) приходит от серверов, которые не отвечают за зону (от кэширующих).
  • Запись заголовка — служебную информацию о запросе.
  • Запись запроса — повторяет отправленный запрос.
  • Запись ответа — собственно, сам ответ.
  • Записи авторитетных серверов — информацию об авторитетных серверах, хранящих информацию по текущему запросу.
  • Дополнительную информацию — дополнительные записи, например адреса NS-серверов.

Обратное преобразование имен

DNS используется в первую очередь для преобразования доменных имён в IP-адреса, но он также может выполнять обратный процесс, называемый Обратное преобразование имен или обратным отображением. Т.к. записи в прямой базе DNS структурированы иерархически по доменным именам, DNS не может эффективно выполнять поиск по IP адресу в такой базе. Для обратного преобразования в DNS используется специальный домен in-addr.arpa. Ресурсные записи в данном домене в поле Name содержат IP-адреса, в поле Type — PTR, а в поле Data — FQDN-имя соответствующее данному IP.

image

На схеме представлена структура домена arpa. Думаю, что тут все довольно наглядно. Домен arpa. имеет 2 поддомена in-addr и ip6, отвечающие за IPv4 и IPv6 адреса соответственно. Домен in-addr.arpa. имеет от *.0.in-addr.arpa. до *.255.in-addr.arpa. поддоменов, каждый из которых так же имеет по 256 поддоменов.

В целях уменьшения объёма нежелательной корреспонденции (спама) многие почтовые серверы могут проверять наличие PTR записи для хоста, с которого происходит отправка. В этом случае PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP сессии.

Наглядно приведенную схему можно представить командами:

Имя 50.0.87.194 не заканчивается точкой и поэтому является относительным. Вопрос: относительным относительно чего? Ни в коем случае не относительно "www.ru". Для того чтобы эта запись была FQDN, домен по умолчанию должен называться «IN-ADDR.ARPA.». Этого можно добиться либо поместив записи PTR в отдельный файл, в котором доменное имя зоны по умолчанию — IN-ADDR.ARPA. (заданный в файле начальной загрузки демона named), либо изменив этот домен с помощью директивы $ORIGIN. Если домен по умолчанию определен как 0.87.194.IN-ADDR.ARPA., то запись можно представить так:

В двух словах хотел бы затронуть вопрос регистрации доменных имен.

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

В завершение статьи хочу отметить так же о таком маркетинговом нюансе, что иногда домены второго уровня называют именами доменов ПЕРВОГО уровня, тем самым «опуская» значение корневого домена и принимая за корневой домен — домены TLD.

Так же хочу отметить, что доменный адрес и IP-адрес не тождественны — один IP-адрес может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов (это называется виртуальный хостинг). Обратное тоже справедливо — одному имени может быть сопоставлено множество IP-адресов: это позволяет создавать балансировку нагрузки.

Резюме

Итак, в сегодняшней статье я постарался как можно понятней описать работы доменной системы имен. Надеюсь, это у меня получилось. Мы рассмотрели иерархическую структуру базы данных DNS, а так же рассмотрели процессы взаимодействия клиентов и серверов DNS, а так же разновидности серверов DNS. В следующей статье я рассмотрю практические вопросы установки и настройки DNS сервера BIND на Linux. Буду рад Вашим комментариям.

Что еще почитать:

Разместил с разрешения mcsim85, у которого еще нет полноценного аккаунта на хабре, но который за такие качественный статьи безусловно его заслуживает! На всякий случай ссылка на оригинал.






Глава 14 DNS: система имен доменов

С точки зрения приложения, доступ к DNS осуществляется посредством разборщика (resolver) (разборщик (resolver) - подпрограммы, которые используются для создания, отправки и интерпретации пакетов, используемых серверами имен Internet). В Unix системах, к разборщику можно получить доступ через две библиотечные функции, gethostbyname(3) и gethostbyaddr(3), которые линкуются с приложением, когда оно строится. Первая воспринимает в качестве аргумента имя хоста и возвращает IP адрес, а вторая воспринимает в качестве аргумента IP адрес и возвращает имя хоста. Разборщик устанавливает контакты с одним или несколькими серверами DNS (name servers), чтобы установить это соответствие.

На рисунке 4.2 показано, что разборщик - это часть приложения. Он не является частью ядра операционной системы как протоколы TCP/IP. Приложение должно конвертировать имя хоста в IP адрес, перед тем как оно попросит TCP открыть соединение или послать датаграмму с использованием UDP. Протоколы TCP/IP внутри ядра ничего не знают о DNS.

В этой главе мы рассмотрим, как разборщики общаются с DNS серверами с использованием протоколов TCP/IP (в основном UDP). Однако мы не будем рассматривать установку и администрирование DNS серверов или все опции, существующие у разборщиков и серверов. Это может составить еще одну книгу. (В публикации [Albitz and Liu 1992] приведены подробности функционирования стандартных Unix разборщиков и серверов DNS.)

RFC 1034 [ Mockapetris 1987a] описывает концепции, лежащие в основе DNS, а RFC 1035 [Mockapetris 1987b] содержит подробности разработки и спецификации DNS. Наиболее широкоиспользуемая реализация DNS, как разборщика, так и сервера - BIND (Berkeley Internet Name Domain). Процесс сервера называется named. Анализ траффика, генерируемого DNS в глобальных сетях, приводится в [Danzig, Obraczka, and Kumar 1992].

Пространство имен DNS имеет иерархическую структуру, которая внешне напоминает файловую систему Unix. На рисунке 14.1 показана иерархическая организация DNS.


Рисунок 14.1 Иерархическая организация DNS.

Каждый узел (кружочки на рисунке 14.1) имеет метку длиной до 63 символов. Корень дерева это специальный узел без метки. Метки могут содержать заглавные буквы или маленькие. Имя домена (domain name) для любого узла в дереве - это последовательность меток, которая начинается с узла выступающего в роли корня, при этом метки разделяются точками. (Здесь видно отличие от файловой системы Unix, где полный путь всегда начинается с вершины (корня) и опускается вниз по дереву.) Каждый узел дерева должен иметь уникальное имя домена, однако одинаковые метки могут быть использованы в различных точках дерева.

Имя домена, которое заканчивается точкой, называется абсолютным именем домена (absolute domain name) или полным именем домена ( FQDN - fully qualified domain name). Например, sun.tuc.noao.edu.. Если имя домена не заканчивается на точку, подразумевается, что имя должно быть завершено. Как будет закончено имя, зависит от используемого программного обеспечения DNS. Если незаконченное имя состоит из двух или более меток, его можно воспринимать как законченное или полное; иначе справа от имени должен быть добавлен локальный суффикс. Например, имя sun может быть завершено локальным суффиксом .tuc.noao.edu..

  1. arpa это специальный домен, используемый для сопоставления адрес - имя (раздел "Запросы указателя" этой главы).
  2. Семь 3-символьных доменов называются общими (generic) доменами. В некоторых публикациях они называются организационными (organizational) доменами.
  3. Все 2-символьные домены, основанные на кодах стран, можно найти в ISO 3166. Они называются доменами стран (country), или географическими (geographical) доменами.

На рисунке 14.2 приведен список обычной классификации семи основных доменов.

Рисунок 14.2 3-символьные общие домены.

Одна важная характеристика DNS, не показанная на рисунке 14.1, это передача ответственности внутри DNS. Не существует организации, которая бы управляла и обслуживала все дерево в целом и каждую метку в отдельности. Вместо этого, одна организация (NIC) обслуживает только часть дерева (домены верхнего уровня), а ответственность за определенные зоны передает другим организациям.

Зона (zone) это отдельно администрируемая часть дерева DNS. Например, домен второго уровня noao.edu это отдельная зона. Многие домены второго уровня поделены на меньшие зоны. Например, университет может поделить свою зону на подзоны по факультетам, а компания может поделить себя на зоны по принципу деления на филиалы или отделы.

Если Вы знакомы с файловой системой Unix, то обратите внимание, что деление дерева DNS на зоны очень напоминает деление на логические файловые системы физических дисковых разделов. Однако мы не можем сказать, основываясь на рисунке 14.1, под чьим руководством находятся зоны, также как мы не можем по подобному рисунку сказать, какие директории в файловой системе находятся в определенном дисковом разделе.

С того момента, как выбрана организация или персона, которая несет ответственность за управление зоной, эта организация или персона должна организовать несколько серверов DNS (name servers) для этой зоны. Как только в зоне появляется новая система, администратор этой зоны помещает имя и IP адрес нового хоста в базу данных сервера DNS. В небольших университетах, например, один человек может делать это каждый раз при появлении новой системы, однако в больших университетах ответственность должна быть распределена (например, по департаментам), так как один человек не может осуществлять эту работу в целом.

Сервер DNS, скажем, обслуживает одну зону или несколько зон. Человек, который несет ответственность за зону, администрирует основной сервер DNS (primary name server) для этой зоны и один или несколько вторичных серверов DNS (secondary name servers). Первичный и вторичный сервера должны быть независимы и избыточны таким образом, чтобы система DNS не вышла из строя при отказе одного из серверов.

Основное отличие между первичными и вторичными серверами заключается в том, что первичные загружают всю необходимую информацию из дисковых файлов, тогда как вторичные получают информацию от первичного. Процесс передачи информации от первичного сервера вторичному называется передачей зоны (zone transfer). Когда в зоне появляется новый хост, администратор добавляет соответствующую информацию (минимум, имя и IP адрес) в дисковый файл на первичном сервере. После чего первичный сервер DNS уведомляется о необходимости повторно считать свои конфигурационные файлы. Вторичные сервера регулярно опрашивают первичные (обычно каждые 3 часа), и если первичные содержат новую информацию, вторичный получает ее с использованием передачи зоны.

Что произойдет, если сервер DNS не содержит необходимой информации? Он должен установить контакт с другим сервером DNS. (В этом заключается распределенная природа DNS.) Однако не каждый сервер DNS знает, как обратиться к другому серверу. Вместо этого каждый сервер DNS должен знать, как установить контакт с корневыми серверами DNS (root name servers). В апреле 1993 года существовало восемь корневых серверов, все первичные сервера должны знать IP адреса каждого корневого сервера. (Эти IP адреса находятся в конфигурационных файлах первичного сервера. Первичные сервера должны знать именно IP адреса корневых серверов, а не их DNS имена.) Корневой сервер, в свою очередь, знает имена и положения (IP адрес) каждого официального сервера DNS для всех доменов второго уровня. При этом возникает последовательный процесс: запрашивающий сервер должен установить контакт с корневым сервером. Корневой сервер сообщает запрашивающему серверу о необходимости обратиться к другому серверу и так далее. Мы рассмотрим эту процедуру и соответствующие примеры позже в этой главе.

Фундаментальная характеристика DNS - это кэширование (caching). Когда DNS сервер получает информацию о соответствии (скажем, IP адресов именам хостов), он кэширует эту информацию таким образом, что в случае следующего запроса может быть использована информация из кэша, дополнительный запрос на другие сервера не делается. В разделе "Кэширование" этой главы мы рассмотрим кэширование более подробно.


Рисунок 14.3 Общий формат DNS запроса и ответа.

Значение в поле идентификации (identification) устанавливается клиентом и возвращается сервером. Это поле позволяет клиенту определить, на какой запрос пришел отклик.

16-битовое поле флагов (flags) поделено на несколько частей, как показано на рисунке 14.4.


Рисунок 14.4 Поле флагов (flags) в заголовке DNS.

Раздел вопросов в DNS запросе

Формат каждого вопроса в разделе вопросов (question) показан на рисунке 14.5. Обычно присутствует только один вопрос.

Имя запроса (query name) это искомое имя. Оно выглядит как последовательность из одной или нескольких меток. Каждая метка начинается с 1-байтового счетчика, который содержит количество следующих за ним байт. Имя заканчивается байтом равным 0, который является меткой с нулевой длиной. И является, в свою очередь, меткой корня. Каждый счетчик байтов должен быть в диапазоне от 0 до 63, так как длина метки ограничена 63 байтами.


Рисунок 14.5 Формат раздела вопроса (question) в запросе DNS.

На рисунке 14.6 показано, как хранится имя домена gemini.tuc.noao.edu.


Рисунок 14.6 Представление имени домена gemini.tuc.noao.edu.

У каждого вопроса есть тип запроса (query type), а каждый отклик (называемый записью ресурса, о чем мы поговорим ниже) имеет тип (type). Существует около 20 различных значений, некоторые из которых в настоящее время уже устарели. На рисунке 14.7 показаны некоторые из этих значений. Тип запроса это надмножество (множество, подмножеством которого является данное множество) типов: два из показанных значений, могут быть использованы только в вопросах.

Читайте также: