Domain Name System

Основной задачей DNS-сервера является трансляция доменных имен в IP адреса и обратно. На заре становления Интернета (когда он еще был ARPANET'ом) это решалось ведением длинных списков, включающих все компьютеры сети, причем копия такого списка должна была присутствовать на каждом компьютере. Некоторые "пережитки" этого метода можно обнаружить и сейчас: существует файл hosts(и в UNIX, и в Windows), в котором можно прописывать адреса серверов, с которыми вы регулярно работаете (кстати, именно его использование лежит в основе многих "ускорителей Интернета" — такие программы просто записывают адреса серверов, к которым вы обращаетесь, в файл hosts и при следующем обращении берут данные из него, не тратя время на запрос к DNS-серверу).

На смену "однофайловой" схеме пришел DNS — иерархическая структура имен. Существует "корень дерева" с именем . (точка). Так как корень един для всех доменов, то точка в конце имени обычно не ставится (но она используется в описаниях DNS). Ниже корня лежат домены первого уровня. Их немного — com, net, info, ru и т.д. Ниже находятся домены второго уровня, например, listsoft.ru. Еще ниже — третьего и т.д.

Иерархичность DNS-серверов — штука довольно интересная, если проследить прохождение запроса. При установке (точнее, при настройке) клиенту указывается как минимум один DNS-сервер (как правило, их два) — его адрес выдается провайдером. Клиент посылает запрос этому серверу. Сервер, получив запрос, либо отвечает (если ответ ему известен), либо пересылает запрос на "вышестоящий" сервер (если он известен) или на корневой (каждому DNS-серверу известны адреса корневыхDNS-серверов). Так выглядит "восходящая иерархия". Затем запрос начинает спускаться вниз — корневой сервер пересылает запрос серверу первого уровня, тот — серверу второго уровня и т.д. Таким образом, каждый DNS-сервер всегда либо знает ответ, либо знает, у кого спросить.

Помимо "вертикальных связей", у серверов есть еще и "горизонтальные" отношения: "первичный — вторичный". Действительно, если предположить, что сервер, обслуживающий какой-то домен и работающий "без страховки" вдруг перестанет быть доступным, то все машины, расположенные в этом домене, окажутся недоступны! Именно поэтому при регистрации домена второго уровня выдвигается требование указать минимум два сервера DNS, которые будут этот домен обслуживать.

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

Полезным свойством DNS является умение использовать "пересыльщиков" (forwarders). "Честный" DNS-сервер самостоятельно опрашивает другие сервера и находит нужный ответ, но если ваша сеть подключена к Интернету по медленной (например,dial-up) линии, то этот процесс может занимать довольно много времени. Вместо этого можно перенаправлять все запросы, скажем, на сервер провайдера, а затем принимать его ответ. Использование пересыльщиков может оказаться интересным и для больших компаний с несколькими сетями: в каждой сети можно поставить относительно слабый DNS-сервер, указав в качестве пересыльщика более мощную машину, подключенную по быстрой линии. При этом все ответы будут кэшироваться на этом мощном сервере, что ускорит разрешение имен для целой сети.

Resource Record

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

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

[имя][время] [класс] тип данные

Имя домена (Domain Name): может быть относительным или абсолютным (FQDN — Fully Qualified Domain Name**). Если имя относительное (не заканчивается точкой — помните про корневой домен?), то к нему автоматически добавляется имя текущего домена. Например,если в домене listsoft.ru я опишу имя «www», то полное имя будет интерпретироваться как "www.listsoft.ru." Если же это имя указать как "www.listsoft.ru" (без последней точки), то оно будет считаться относительным и будет интерпретировано как "www.listsoft.ru.listsoft.ru."

Время жизни (TTL - Time to Live): TTL определяет, сколько времени DNS-запрос или ответ может храниться в кэше DNS-серверов, прежде чем он станет недействительным и должен быть обновлен. TTL измеряется в секундах.

Класс записи (Class): определяет класс сети. Практически всегда это будет IN, обозначающее INternet.

Тип записи (Record Type): Этот тип указывает на назначение записи ресурса и определяет, какие данные она содержит.

  • SOA (Start of Authority) запись: Эта запись содержит информацию о домене и его зонах, такую как адрес электронной почты ответственного лица (admin), временные интервалы обновления и другую метаинформацию. Должна идти самой первой.

    1. example.com.   IN   SOA   ns1.exampledns.com. admin.example.com. (
                     2023090901 ; серийный номер
                     3600       ; время обновления
                     900        ; время повтора
                     1209600    ; время истечения
                     3600       ; минимальное TTL
                     )
      
  • A (Address) запись: A-запись, также известная как запись типа A, является одной из наиболее распространенных DNS-записей. Она связывает доменное имя с IPv4-адресом, позволяя устанавливать соответствие между человекочитаемыми доменами и числовыми IPv4-адресами, которые используются для идентификации компьютеров и серверов в Интернете.

    1. example.com. IN A 192.0.2.1
      • example.com.: Это доменное имя, к которому привязан этот IPv4-адрес.
      • IN: Это класс записи, который обычно остается "IN" для записей в интернет-доменах.
      • A: Это тип записи, который указывает, что это A-запись.
      • 192.0.2.1: Это IPv4-адрес, к которому привязано доменное имя example.com.
  • AAAA (IPv6 Address) запись: Эта запись подобна A-записи, но она связывает доменное имя с IPv6-адресом. Она используется для IPv6-сетей.

    1. example.com. IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • CNAME (Canonical Name) запись: Эта запись создает альтернативное имя для существующего домена (каноническое имя). Она позволяет одному доменному имени иметь несколько альтернативных имен.

    1. www IN CNAME example.com.
  • MX (Mail Exchanger) запись: Эта запись указывает на почтовый сервер, который отвечает за доставку электронной почты для домена. Она содержит приоритет и имя почтового сервера.

    1. example.com. IN MX 10 mail.example.com.
  • TXT (Text) запись: В этой записи можно хранить произвольный текст, который может использоваться для различных целей, включая аутентификацию и поддержку SPF (Sender Policy Framework).

    1. example.com. IN TXT "Это текстовое описание домена."
  • NS (Name Server) запись: Эта запись определяет DNS-серверы, которые являются авторитетными для данного домена. Они отвечают за предоставление информации о домене.

    1. example.com. IN NS ns1.exampledns.com.
  • PTR (Pointer) запись: Обратная запись. Она связывает IP-адрес с доменным именем. Используется в основном для обратного поиска.

    1. 1.2.3.4.in-addr.arpa. IN PTR mail.example.com.
  • SRV (Service) запись: Эта запись используется для указания службы (сервиса), доступного на указанном хосте в определенном домене.

  • SPF (Sender Policy Framework) запись: Эта запись используется для указания, какие серверы имеют право отправлять электронную почту от имени данного домена.

В записях можно использовать символы # и ; для комментариев, @ для обозначения текущего домена, () — скобки — для написания данных на нескольких строках. Кроме того, можно использовать метасимвол ***** в имени. Порядок записей не имеет значения за одним исключением: запись SOA должна идти первой. Дальнейшие записи считаются относящимися к той же зоне, пока не встретится новая запись SOA. Как правило, после записи зоны указывают записи DNS-серверов, а остальные записи располагают по алфавиту, но это не обязательно.

Дополнительно: