Как установить и настроить DNS-сервер в Debian

debian logo Network

DNS или система доменных имен - это система, которая переводит имя домена в соответствующий ему IP-адрес. Например, когда вы набираете в браузере адрес www.example.com, он сопоставляется с IP-адресом конкретного веб-сервера в Интернете. Это позволяет людям легко запоминать серверы, приложения или любые другие устройства, подключенные к Интернету, без необходимости запоминать их IP-адреса.

Что такое DNS?

DNS - это иерархическая распределенная система баз данных. Она имеет древовидную структуру с узлами, расположенными в слоях, называемых доменами. Каждый домен указывает на узел, расположенный на несколько уровней ниже его самого. В DNS эти домены определяются как поддомены, и каждый из них находится на своем собственном DNS-сервере, либо Master DNS, либо Primary DNS, который содержит записи для всех IP-адресов и имен хостов в своей доменной зоне.

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

Запросы обрабатываются рекурсивными DNS-серверами на основе информации в их кэше в сочетании с данными рекурсивного сервера имен, указанными в файле /etc/resolv.conf. Система доменных имен является важнейшим элементом архитектуры Интернета, она необходима для объединения компьютеров в сеть, которую мы сегодня называем "Интернет".

Параметры конфигурации DNS можно редактировать с помощью инструмента "dig" или непосредственно редактируя файлы зон. Редактирование файлов зон не рекомендуется, поскольку ошибка может привести к недоступности веб-сайта, хотя такое случается крайне редко. Если вы не уверены в том, что делаете, то по возможности используйте инструмент dig. Некоторые пакеты BIND или Berkeley Internet Name Domain поставляются с "dnsutils" и "host", которые используются для запроса DNS-серверов и вывода результатов. В большинстве систем UNIX также имеется утилита nslookup, которую можно использовать для аналогичных целей. Однако "dig" обычно более надежен, чем оба этих инструмента.

Как работает DNS?

DNS работает как иерархическая система, начиная с корня домена. Например, если вы набираете в браузере www.example.com, он запрашивает эту информацию у вашего локального DNS-сервера. Если у него ее нет, поскольку он не является авторитетным для данного домена, он направляет запрос на один из вышестоящих рекурсивных DNS-серверов. Эти серверы сначала проверят свой кэш, а затем обратятся ко всем авторитетным серверам имен, непосредственно отвечающим за домен "example", пока не выяснят, какой DNS имеет эти данные, и отправят их обратно на клиентский компьютер с IP-адресом для этого домена.

Как вы видите, каждый домен или поддомен имеет свой собственный авторитетный сервер имен, и он отвечает за разрешение запросов только для этого поддомена. Поэтому DNS-сервер должен обладать всей информацией для ответа на любой запрос о конкретном домене. Поэтому если "example.com" не является основным доменом вашего локального DNS-сервера, то он не сможет разрешить запросы для www.example.com без перенаправления их вверх по течению.

По возможности настраивайте разные серверы имен для каждого поддомена, поскольку каждый из них требует отдельного обслуживания и административных процедур. Фактически, именно так DNS был разработан в самом начале, когда протоколы TCP/IP были выпущены в 1983 году до изобретения системы доменных имен. Это было сделано позже, после создания регистрационных служб InterNIC в 1992 году. Поддомены были введены в качестве расширения протокола DNS, и предназначались они только для административных целей.

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

Если это запрос Internet (IN), то он разрешает имена хостов, начиная с корня домена и работая вниз через каждый родительский домен, пока не достигнет авторитетных серверов для этой зоны. Это называется "начинать сверху", и обычно это делается первым, поскольку серверы имен, отвечающие за ДВУ (.com, .net и т.д.), имеют более высокую скорость соединения с большей пропускной способностью, чем серверы для доменов второго уровня, например, "example". При этом ваш локальный DNS-сервер учитывает, может ли он доверять ответу вышестоящих DNS-серверов. Если у вас нет доступа к файлу /etc/hosts или /etc/resolv.conf, а DNS-серверы, используемые вашим провайдером, кэшируют свои ответы, то есть шанс, что большая часть вашего сетевого трафика регистрируется. Таким образом, это может представлять угрозу безопасности, а если нет, то он будет напрямую запрашивать эти данные у рекурсивных серверов. Это называется "начинать снизу", поскольку серверы имен, отвечающие за домены второго уровня, имеют более низкую скорость соединения и меньшую пропускную способность, чем серверы, отвечающие за домены верхнего уровня.

Весь этот процесс повторяется итеративно до тех пор, пока либо:

  1. Неавторитетный сервер имен отвечает на запрос IN, сообщая, что он не знает запрашиваемой информации.
  2. Сервер имен находит авторитетный, по его мнению, ответ на запрос и отправляет его обратно на клиентский компьютер.
  3. Истекает количество итераций, предварительно настроенное в кэше имен сервера имен.

В этом руководстве мы расскажем вам, как настроить собственный внутренний DNS-сервер в Debian. Для этого мы используем программное обеспечение сервера имен BIND (BIND9).

Что такое BIND9?

BIND (Berkeley Internet Name Domain) - это реализация протокола DNS. В BIND 9 было сделано несколько серьезных усовершенствований, включая поддержку IPv6, более гибкую конфигурацию и управление, улучшенную производительность кэширования, поддержку EDNS0 для больших ответов UDP и улучшенное управление динамически назначаемыми IP-адресами.

BIND является наиболее широко используемым программным обеспечением сервера имен в Интернете. Он поддерживает ряд различных протоколов службы доменных имен, включая BIND4 (оригинальный Berkeley Internet Name Domain, версия 4), BIND8 (исторический преемник BIND4), а также службы DNS для IPv6 посредством двух отдельных реализаций: одна основана на демоне, а другая называется lwres (light-weight resolver).

BIND 9.16.33 - это текущая стабильная версия BIND, доступная для загрузки с дистрибутивов Debian.

Предварительные условия

Прежде чем мы начнём процесс установки DNS-сервера в Debian, вы должны спросить себя: "Действительно ли мне нужен DNS-сервер?".

Эта статья посвящена только IPv4, поэтому если вы заинтересованы в использовании DNS для IPv6, вам придётся проделать больше работы. Это руководство больше не поможет вам в таких вопросах, как добавление записей AAAA вручную и т.д.

Для проверки шагов в этом руководстве необходима свежая установка сервера Debian. Некоторые из используемых здесь команд могут отличаться для вашего случая, и эти различия будут указаны там, где это необходимо.

Это руководство предполагает, что у вас есть работающая сеть IPv4 и знания по правильной настройке статических IP-адресов на клиентских компьютерах.

В вашей системе уже должны быть настроены пользователь sudo и брандмауэр.

Установка DNS сервера BIND 9

Обновление вашей системы

Процесс установки довольно прост, но давайте рассмотрим его подробнее. Во-первых, необходимо убедиться, что в системе установлены и обновлены все необходимые пакеты, выполнив следующую команду:

sudo apt-get update && sudo apt-get upgrade -y

Флаг -y будет автоматически отвечать "да" на все подтверждения, которые могут быть заданы.

Команда apt-get update обновит списки пакетов сервера. При использовании команды apt-get upgrade все установленные на сервере пакеты будут обновлены.

Это займет некоторое время в зависимости от скорости вашего сетевого соединения и количества устанавливаемых обновлений.

Установка BIND9

Теперь, когда ваша система обновлена, вы можете приступить к установке DNS-сервера - BIND. Это будет сделано путем установки нескольких новых пакетов:

Установка BIND9

Приведенная выше команда установит BIND9 и два вспомогательных пакета, которые содержат необходимые файлы для правильного функционирования DNS-сервера.

BIND9 - это программное обеспечение DNS-сервера.

bind9utils - это утилиты для управления конфигурацией BIND, а также название команды, используемой для управления BIND из командной строки.

bind9-doc - это пакет документации для программного обеспечения BIND.

Проверка установки сервера DNS

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

Приведенная выше команда покажет установленную версию BIND и его зависимостей.

Проверка версии BIND

BIND запускается автоматически при установке. Вы можете проверить его состояние с помощью команды systemctl, как показано ниже:

Проверка статуса службы bind9

Команда выше даст вам более подробное представление о функциях BIND на вашем сервере, таких как активное время, количество зон и т.д.

Если вы захотите запустить, остановить или перезапустить BIND, просто выполните приведенные ниже команды:

По умолчанию сервер BIND будет работать от имени пользователя и группы bind. Это делает его достаточно безопасным, поскольку любые изменения в файлах зон разрешены только для этого пользователя. По умолчанию сервер BIND слушает DNS-запросы на порту 53. При желании вы можете изменить этот порт в файле named.conf. Выполните следующую команду, чтобы узнать, какой порт прослушивает ваш сервер BIND:

Список прослушиваемых портов BIND

Приведенная выше команда показывает, что названный демон в настоящее время запущен и прослушивает порт 53 UDP. Используйте эту информацию, чтобы проверить, правильно ли вы используете номер порта.

Если ваш сервер не использует порт 53, вы можете исправить это, отредактировав /etc/bind/ named.conf.local и изменив номер порта на любой другой. Вы также можете изменить имя файла журнала сервера, отредактировав /etc/bind/ named.conf.default-zones и добавив утверждения логирования в директиве options.

Настройка BIND9

Теперь, когда BIND9 установлен на вашем сервере, пришло время приступить к его настройке.

Каталог конфигурации для BIND находится в каталоге /etc/bind. В этом каталоге есть несколько важных файлов:

Файл с именем 'named.conf' - это основной конфигурационный файл, который содержит множество комментариев для пояснения каждого раздела.

Следующий конфигурационный файл, который мы будем редактировать, находится по адресу /etc/bind/named.conf.local. Этот файл содержит всю вашу сетевую информацию о сервере и зонах, которые вы хотите разрешать локально (с серверов имен).

Файл named.conf.default-zones находится по адресу /etc/bind/named.conf.default-zones. Этот файл содержит информацию о сервере для зон, используемых BIND, когда ему явно не указано использовать другую зону. Другими словами, зоны, которые включены.

Итак, давайте начнем с базовой конфигурации.

Список файлов конфигурации bind9

Настройка просушиваемых интерфейсов (IP-адресов)

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

Изменим это, отредактировав файл конфигурации named.conf.options

/etc/bind/named.conf.options

Установим прослушивание только конкретного сетевого интерфейса, задокументировав не нужные нам опции

/etc/bind/named.conf.options

Сохраните и закройте файл, когда закончите. Затем перезапустите демон BIND9 командой ниже:

Теперь мы разрешили BIND9 прослушивать только определенный интерфейс.

Создание зон прямого просмотра (домен -> IP)

Зоны прямого просмотра являются наиболее распространенным видом файлов зон. Они сопоставляют доменное имя с IP-адресом и используются при преобразовании доменных имен в IP-адреса для электронной почты, веб-страниц и т.д. Следующим шагом будет создание файла зоны прямого просмотра.

Мы отредактируем файл "/etc/bind/named.conf.local", чтобы объявить зону прямого поиска. Для единственной цели этого руководства мы объявим домен под названием "test.local" и укажем его IP-адрес сервера.

Если вы планируете разрешать внешние домены из своей сети, на вашем сервере должен быть установлен действительный IP-адрес с доступом в интернет.

Теперь мы отредактируем файл "/etc/bind/named.conf.local", чтобы объявить зону прямого поиска:

Добавьте следующее в конец файла:

Тип "master". Это файл зоны ведущего домена. Параметр типа может быть установлен в "slave", если вы размещаете прямую или обратную зону только для авторизации и не хотите разрешать динамические обновления.

"/etc/bind/db.domaine.com" - это файл, содержащий записи для домена "test.local" с полным путем.

allow-transfer {xxx.xxx.xxx.xxx;}. Это необходимо, чтобы разрешить передачу зоны на вторичный DNS-сервер хостера, потому что если ваш хостинг-провайдер не разрешит вам это сделать, вы не сможете обновить ее онлайн с помощью команды "rndc reload" на localhost. xxx.xxx.xxx.xxx.xxx; IP-адрес вторичного DNS-сервера (Name Servers), который находится у вашего хостинг-провайдера.

Сохраните и закройте файл, когда закончите.

Теперь мы создадим файл для каждой зоны, объявленной выше:

Заполните файл следующим образом

В этом файле замените значения test.local на ваше доменное имя, за которым следует точка (.) Это необходимо, и это НЕ является ошибкой.

Замените "192.168.0" на ваш публичный IP-адрес, за которым следует точка (.) Это необходимо для того, чтобы сервер был доступен из интернета.

Не забудьте сохранить и закрыть файл после завершения работы.

Создание зон обратного поиска (IP -> домен)

Зоны обратного поиска используются для сопоставления IP-адреса с доменным именем и обычно требуются для отправки электронной почты. Следующим шагом будет создание файла обратной зоны.

Имя обратной зоны состоит из идентификатора сети (обратного), за которым следует ".in-addr.arpa".

Например:

Если сервер имеет IP-адрес "10.20.30.40", его сетевой ID будет "10.20.30", а имя обратной зоны будет "40.20.10.in-addr.arpa".

Теперь отредактируем файл "/etc/bind/named.conf.local", чтобы объявить обратную зону:

Затем добавьте в файл следующее:

Затем создадим файл для объявленной выше зоны:

Затем заполним файл следующим образом:

Проверка синтаксиса конфигурации BIND

Теперь мы проверим синтаксис конфигурации в каждом файле на наличие ошибок. Для этого у нас будет запрос named со следующей командой:

Если ошибок нет, эта команда вернется в пустую оболочку:

Применение настроек и проверка

Для применения настрок, введите команду

для проверки работы, введите команду nslookup со следующим синтаксисом

к примеру

Проверка домена

Для обратной зоны (PTR) синтаксис аналогичный

Просмотр PTR

Заключение

DNS - одна из самых важных служб на сервере. Все ее используют. Она нужна всем, и, в конце концов, вы же не хотите, чтобы ваши машины потерялись в сети, потому что не могут найти друг друга. Эта статья содержит руководство по настройке внутреннего DNS-сервера на Debian с использованием программного обеспечения сервера имён BIND (BIND9).

Avatar for Gnostis
Gnostis
Добавить комментарий