DNS (Domain Name System) – система доменных имен, неотъемлемая часть взаимодействия разных систем в Интернете. Без DNS компьютеры и люди, которые их используют, смогут подключаться только с помощью числовых адресов, известных как IP-адреса.
Помимо очевидной проблемы запоминания большого количества сложных числовых последовательностей для решения простых задач, взаимодействие по IP-адресам также вызывает некоторые другие проблемы. Перемещая веб-сайт на другой хостинг или изменяя местоположение сервера, вы должны сообщить о новом местоположении каждому клиенту.
DNS-серверы – компьютеры, образующие систему, которая позволяет использовать имена вместо адресов, – могут обслуживать множество различных функций, каждая из которых позволяет получить доступ к серверам по имени.
Примечание: Подразумевается, что вы знакомы с базовыми понятиями DNS.
В данной статье речь пойдет о разных типах настройки DNS-серверов, а также о преимуществах, вариантах использования и свойствах каждого из них.
Путь DNS-запроса
Когда клиентская программа хочет получить доступ к серверу по его доменному имени, она должна выяснить, как перевести доменное имя в маршрутизируемый адрес, который можно использовать для связи. Программе необходима эта информация, чтобы получать или отправлять данные на сервер.
Некоторые приложения, включая большинство веб-браузеров, поддерживают внутренний кеш последних запросов. Это первое место, где приложение будет искать IP-адрес требуемого домена (если у него есть эта возможность). Если ответ не найден в кэше, приложение использует системный определитель (или распознаватель), чтобы узнать адрес домена.
Определителем может быть любой компонент, который выступает в DNS-запросе на стороне клиента. Системный определитель – это разрешающая библиотека, используемая операционной системой для поиска ответа на запросы DNS. Обычно системные определители не способны выполнять много сложных функций, их работа ограничивается поиском нескольких статических файлов в системе (например, файла /etc/hosts) и пересылкой запросов другому определителю.
Как правило, от клиентского приложения поступает запрос системному определителю, откуда он передается на DNS-сервер, у которого есть требуемый адрес адрес. Этот DNS-сервер называется рекурсивным DNS-сервером. Рекурсивный сервер – это DNS-сервер, который будет запрашивать другие DNS-серверы, пока не найдет нужные данные. Затем он вернет ответ или сообщение об ошибке клиенту (точнее, системному определителю, который, в свою очередь, передаст его клиентскому приложению).
Рекурсивные серверы обычно поддерживают кэш. Сначала такой сервер проверит свой кэш, чтобы найти там ответ на запрос. Если этого не произойдет, он будет искать адрес на любом из серверов, которые управляют компонентами домена верхнего уровня.
К примеру, если запрос предназначен для www.example.com и сервер не может найти адрес этого хоста в своем кэше, он будет искать адрес на серверах имен для example.com и при необходимости com. Затем он отправит запрос на сервер имен для определенного компонента домена, чтобы запросить дополнительную информацию.
Если сервер не находит адрес для любого из компонентов домена, он должен начать поиски с самого верха иерархии, запрашивая корневые серверы имен.
Корневые серверы знают адреса всех серверов имен доменов верхнего уровня, которые управляют зонами.com, .net, .org и т. п. Рекурсивный сервер будет запрашивать адрес условного домена www.example.com на корневых серверах. Корневой сервер переведет рекурсивный сервер на серверы имен для домена высшего уровня .com.
Затем рекурсивный сервер следует по рефералам к каждому последующему серверу имен, который отвечает за компоненты домена, пока не обнаружит сервер имен, который имеет полный ответ. Рекурсивный сервер помещает этот ответ в свой кэш для более поздних запросов, а затем возвращает его клиенту.
Как видно из этого примера, существует много разных типов серверов, и все они играют разные роли. Давайте рассмотрим особенности разных типов DNS-серверов.
Функциональные отличия DNS-серверов
Некоторые различия между DNS-серверами являются чисто функциональными. Большинство серверов, связанных с DNS, специализируются на определенных функциях. Тип DNS-сервера, который вы выберете, во многом будет зависеть от ваших потребностей и того, какую проблему вы хотите решить.
Авторитативные DNS-серверы
Авторитативный DNS-сервер – это сервер, который обрабатывает только запросы для зон, за которые он отвечает. Поскольку он не помогает разрешать запросы для сторонних зон, он, как правило, очень быстрый и может эффективно обрабатывать множество запросов.
Авторитативные серверы имеют такие свойства:
- Очень быстро реагирует на запросы для зон, которые он контролирует. Авторитативный сервер имеет всю информацию о домене, за который он отвечает, и все справочные данные о зонах в домене, за которые отвечают другие серверы имен.
- Не отвечает на рекурсивные запросы. Авторитативный сервер по определению не обрабатывает рекурсивные запросы. Потому в системе DNS он всегда выступает на серверной стороне. Любой запрос, направленный к такому серверу, как правило, поступает от определителя, который получил ссылку на него. Это означает, что авторитарный сервер либо имеет полный ответ, либо сможет передать новый реферал на ответственный сервер имен.
- Не кэширует результаты запросов. Поскольку авторитативный сервер никогда не запрашивает информации для разрешения запроса у других серверов, у него нет возможности кэшировать результаты. Вся информация, которую он знает, уже находится в его системе.
Кэширующие DNS-серверы
Кэширующий DNS-сервер – это сервер, который обрабатывает рекурсивные запросы клиентов.
Кэширующие серверы умеют отвечать на рекурсивные запросы от клиентов. Авторитетные серверы идеально подходят для обслуживания определенной информации о зоне, в свою очередь кэширующие DNS-серверы более широко используются на стороне клиента.
Чтобы избежать необходимости выдавать множественные итеративные запросы другим DNS-серверам при получении рекурсивного запроса, сервер кэширует свои результаты. Это позволяет ему получить доступ к широкой базе данных DNS, а также быстро обрабатывать текущие запросы.
Кэширующий DNS-сервер имеет следующие свойства:
- Доступ ко всему диапазону общедоступных данных DNS. Все данные зон, обслуживаемых общедоступными DNS-серверами, подключенными к глобальному дереву, можно получить с помощью кэширующего DNS-сервера. Он знает о корневых DNS-серверах и может разумно следовать рекомендациям по мере получения данных.
- Способность обработать данные для клиентов. Почти каждая современная операционная система разгружает разрешение DNS на выделенные рекурсивные серверы. Определительные библиотеки просто отправляют рекурсивный запрос и ожидают полного ответа. Кэширующий DNS-сервер имеет все возможности для обслуживания этих клиентов. Принимая рекурсивный запрос, эти серверы обещают либо вернуть ответ, либо выдать сообщение об ошибке DNS.
- Поддерживает кэш недавно запрошенных данных. Кэшируя результаты, DNS-сервер создает кэш последних данных DNS. В зависимости от того, сколько клиентов использует сервер, насколько велик кэш и как долго данные TTL находятся в записях DNS, в большинстве случаев это может значительно ускорить разрешение DNS.
Перенаправляющие DNS-серверы
Перенаправляющий DNS-сервер (или внутренний DNS-сервер) – это альтернативный подход к разработке кэша для клиентских компьютеров. Этот подход добавляет дополнительную ссылку в цепочке разрешения DNS. Перенаправляющий DNS-сервер просто передает все запросы другому DNS-серверу с рекурсивными возможностями (таким как кеширующий DNS-сервер).
Преимущество этой системы заключается в том, что она может дать доступ к локально доступному кэшу, не требуя рекурсивных запросов (которые могут привести к дополнительному сетевому трафику и отнять значительные ресурсы). Также она добавляет гибкость при делении частного и общего трафика путем пересылки на разные серверы.
Перенаправляющие DNS-серверы имеют такие свойства:
- Возможность обработки рекурсивных запросов без выполнения самой рекурсии. Наиболее фундаментальным свойством перенаправляющих DNS-серверов является то, что он передает запросы для разрешения другому агенту. Перенаправляющий сервер может иметь минимальные ресурсы и по-прежнему представлять большую ценность благодаря своему кэшу.
- Предоставляет локальный кэш ближе по сети. Если вы не хотите создавать и поддерживать полноценный рекурсивный DNS-сервер, перенаправляющий сервер может использовать общедоступные рекурсивные DNS-серверы. Он может выбрать кэширующие серверы, которые находятся очень близко к клиентским машинам. Это может уменьшить время ответа.
- Повышает гибкость при определении локального пространства. Передавая запросы на разные серверы, перенаправляющий сервер может гарантировать, что внутренние запросы обслуживаются частными серверами, а внешние запросы используют общедоступный DNS.
Комбинирование DNS-серверов
Хотя вышеупомянутые решения спроектированы с учетом очень специфических целей, часто рекомендуется настроить DNS-сервер таким образом, чтобы объединить преимущества каждого из них.
DNS-сервер может быть настроен как рекурсивный, кэширующий сервер для выбранного количества локальных клиентов, отвечая только на итеративные и авторитативные запросы от других клиентов. Эта общая конфигурация позволяет вам отвечать на глобальные запросы домена, а также помогает вашим локальным клиентам использовать сервер для рекурсивного разрешения.
Хотя определенное программное обеспечение DNS специально предназначено для выполнения одной конкретной роли, бывают и невероятно гибкие приложения (например, Bind), которые могут использоваться в качестве гибридных, комбинированных решений.
Различия отношений DNS-серверов
Хотя наиболее очевидные различия между конфигурациями DNS-серверов, вероятно, являются функциональными, отличия в отношениях между DNS-серверами также чрезвычайно важны.
Первичные и вторичные DNS-серверы
Учитывая важность DNS для обеспечения доступности сервисов и целых сетей, большинство авторитативных DNS-серверов имеют встроенную избыточность. Существуют различные термины для описания отношений между этими серверами, но, как правило, сервер может быть либо мастером (первичным), либо слейвом (вторичным сервером).
Мастер и слейв являются авторитативными серверами для зон, которые они обрабатывают. Мастер не имеет больше полномочий над зонами, чем слейв. Единственное отличие между первичным и вторичным сервером – это то, откуда они считывают свои файлы зон.
Первичный сервер считывает свои файлы зон из файлов на диске системы. Обычно это происходит, когда администратор зоны добавляет, редактирует или перемещает исходные файлы зон. Такой сервер имеет право на изменение зон.
Слейв получает данные о зонах и изменениях в них от одного из первичных серверов. Как только он получает эти данные, он помещает их в кеш. Если он должен перезагрузиться, он сначала проверяет свой кеш, чтобы узнать, обновлены ли зоны. Если нет, он запрашивает обновленную информацию у мастера.
Серверы не делятся на чисто первичные и вторичные. Статус первичного или вторичного сервера назначается на основе зоны, поэтому сервер может быть одновременно мастером для одних зон и слейвом для других.
Зоны DNS обычно используют как минимум два сервера имен. Часто для поддержки нагрузки и увеличения избыточности используется несколько серверов имен.
Внешние и внутренние DNS-серверы
Организация может поддерживать внешний авторитативный DNS-сервер для обработки общедоступных DNS-запросов для доменов и зон, за которые он отвечает. Для своих внутренних пользователей организация может поддерживать отдельный DNS-сервер, содержащий информацию внешнего DNS, а также дополнительную информацию о внутренних хостах и службах. Он также может предоставлять дополнительные функции, такие как рекурсия и кэширование.
Хотя все эти задачи теоретически может обрабатывать один комбинированный сервер, у разделения рабочей нагрузки есть определенные преимущества. На самом деле часто желательно поддерживать полностью отдельные друг от друга внутренние и внешние серверы. Особенно важно с точки зрения безопасности, чтобы на внешнем сервере не было записей внутреннего сервера.
Есть несколько дополнительных нюансов, о которых следует помнить. Иногда удобно, чтобы внешние и внутренние серверы совместно использовали общие данные о зонах, которые у них есть ввиду традиционных отношений первичного и вторичного сервера. Однако это может привести к утечке информации о частной инфраструктуре.
Обычно также рекомендуется удалить из конфигурационного файла внешнего сервера все ссылки на внутренний сервер: все данные о перемещении, уведомления и настройки мастера. Таким образом взлом внешнего сервера не будет иметь никаких последствий для внутреннего сервера.
Поддерживая отдельные файлы зон для внешнего и внутреннего сервера, вы обеспечиваете более высокий уровень безопасности инфраструктуры.
Заключение
Выбор DNS-сервера будет во многом зависеть от ваших потребностей. Определите ваш основной приоритет: кэширующиеи перенаправляющие серверы предоставляют более быстрое средство разрешения DNS, а авторитативные серверы обслуживают домены и зоны. Также часто используются комбинированные подходы. Помните также о том, что всегда необходимо учитывать обе стороны процесса разрешения.