Найти в Дзене
Евгений Дергунов

Настройка кэширующего DNS-сервера на FreeBSD-сервере

Кэширующий DNS-server обрабатывает запросы на преобразование доменного имени в IP-адрес. Его наличие позволяет не обращаться к внешнему DNS-серверу. В связи с этим последующие запросы для того же доменного имени могут быть обслужены непосредственно из кэша, что минимизирует задержку. Кэширование помогает уменьшить количество и объём DNS-запросов, которые должны отправиться за пределы локальной сети, в результате чего снижается нагрузка на DNS-серверы. В качестве службы кэширующего DNS-сервер будет использована служба bind9. Служба bind9 - это открытая и наиболее распространённая реализация DNS-сервера, обеспечивающая преобразование как DNS-имени в IP-адрес, так и наоборот.Порядок установки и настройки кэширующего DNS-сервера можно выполнить в следующей последовательности. Для определения последней версии пакета bind9 необходимо ввести команду (рисунок 1): pkg search bind9 В данном примере пакет последней версии обозначен именем bind920. Для установки вводится команда вида: pkg insta

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

В качестве службы кэширующего DNS-сервер будет использована служба bind9. Служба bind9 - это открытая и наиболее распространённая реализация DNS-сервера, обеспечивающая преобразование как DNS-имени в IP-адрес, так и наоборот.Порядок установки и настройки кэширующего DNS-сервера можно выполнить в следующей последовательности.

Для определения последней версии пакета bind9 необходимо ввести команду (рисунок 1):

pkg search bind9

Рисунок 1
Рисунок 1

В данном примере пакет последней версии обозначен именем bind920. Для установки вводится команда вида:

pkg install bind9<последняя версия>

В данном случае

pkg install bind920

Прежде, чем настраивать службу рекомендуется сохранить копию оригинального файла named.conf (вводится одной командой):

cp /usr/local/etc/namedb/named.conf /usr/local/etc/namedb/named.conf.back

Затем файл очищается от базовых и шаблонных настроек

echo '' > /usr/local/etc/namedb/named.conf

Далее открывается файл при помощи текстового редактора (в примере используется редактор nano):

nano /usr/local/etc/namedb/named.conf

В открывшемся файле прописывается конфигурация, исходя из параметров сети (рисунки 2 и 3).

Рисунок 2
Рисунок 2

Некоторые пояснения к конфигурации:

- dump-file - файл для хранения кэша ответов;

- параметр listen-on разрешает слушать на всех сетевых интерфейсах;

- параметр allow-query разрешает делать запросы от клиентов указанной сети;

- в параметре forwarders указываются DNS-сервера, на которые будут запросы перенаправляться на разрешение имён (если их нет в кэше или не могут изначально получить разрешение). В примере используются общедоступные DNS-сервера от Google, но можно указать и другие, например DNS-сервера провайдера;

- recursion включает рекурсивные запросы;

- dnssec-validation включает автоматическую проверку корректности ответов в рамках DNSSEC (Domain Name System Security Extensions — протокол для повышения безопасности системы доменных имён DNS).

В конце файла дописывается информация о двух дополнительных файлах в которых будут записываться определённые параметры под их особенности (рисунок 3).

Рисунок 3
Рисунок 3

В файле query.log будут записываться запросы клиентов, а во втором файле default.log - логирование по умолчанию.

Для того чтобы создать директорию для файлов, прописанных в конфигурационном файле named.conf в блоке logging, и выдать созданной директории права bind, необходимо ввести следующую команду:

mkdir -p /var/log/named && chown bind:bind /var/log/named

Для того чтобы создать два файла, прописанные в конфигурационном файле named.conf в блоке logging, нужно ввести две команды:

touch /var/log/named/query.log && chown bind:bind /var/log/named/query.log

touch /var/log/named/default.log && chown bind:bind /var/log/named/default.log

На рисунке 4 показаны два созданных файла - default.log и query.log.

Рисунок 4
Рисунок 4

Теперь необходимо добавить службу bind9 в конфигурационный файл rc.conf. Для этого открывается файл для редактирования:

nano /etc/rc.conf

И в конец файла дописывается служба (указано красной чертой на рисунке 5)

Рисунок 5
Рисунок 5

Для запуска службы вводится команда

service named start

Если необходимо перезапустить службу, то

service named restart

Для того чтобы создать директорию для dump-file, прописанную в конфигурационном файле named.conf в блоке options (рисунок 2), и выдать созданной директории права bind, необходимо ввести следующую команду (рисунок 6):

mkdir -p /var/dump && chown bind:bind /var/dump

Рисунок 6
Рисунок 6

Для того чтобы создать dump-file, необходимо ввести следующую команду:

rndc dumpdb -all

На рисунке 7 показан созданный файл named_dump.db для хранения кэша ответов (показано с помощью файлового менеджера mc).

Рисунок 7
Рисунок 7

Для проверки работоспособности кэширующего DNS-сервера на рабочей станции с операционной системой xUbuntu открывается терминал и вводится команда типа:

dig <имя домена>

В примере в качестве домена будет использован ya.ru (рисунок 8)

dig ya.ru

Рисунок 8
Рисунок 8

Время ответа первого запроса составило 484 мсек. После повторной команды время ответа на запрос заняло 0 мсек, так как кэш от первого запроса был сохранён в файле dump-file службой bind9.

На сервере FreeBSD для просмотра содержимого кэширующего DNS-сервера сначала обновляется база данных файла командой:

rndc dumpdb -all

После этого просматривается содержимое файла dump-file командой (рисунок 9, внутри красной рамки кэш ответа домена ya.ru):

nano /var/dump/named_dump.db

Рисунок 9
Рисунок 9

Также создавались дополнительные файлы в конфигурационном файле named.conf, поэтому можно с помощью команды

nano /var/log/named/query.log

просмотреть с какой рабочей станции был совершён запрос (его IP-адрес) и кому был отправлен запрос (имя домена). На рисунке 10 на последней строке продемонстрировано, что с рабочей станции 192.168.1.2 был совершён запрос на имя домена ya.ru, а также дата и время совершённого запроса.

Рисунок 10
Рисунок 10

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