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

Настройка кэширующего DNS-server в операционной системе Ubuntu Server 20.4

Кэширующий DNS-server обрабатывает запросы на преобразование доменного имени в IP-адрес. Его наличие позволяет не обращаться к внешнему DNS-серверу. Происходит это следующим образом. Когда пользователь с рабочей станции открывает в браузере поисковик yandex.ru, то для того, чтобы открыть сайт поисковика необходимо сначала узнать его IP-адрес. Для этого отправляется запрос на DNS-сервер, который указан в настройках сетевой карты. Так как для рассматриваемой схемы (Рисунок 1) DNS-сервером является первый сервер (Ubuntu Server), то запрос идет к нему.

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

Соответственно, первый сервер не знает этот адрес и перенаправляет запрос на следующий DNS-сервер. В итоге запрос дойдет до сервера, у которого есть необходимая информация и ответ вернется на рабочую станцию. В ответе будет указан IP-адрес поисковика yandex.ru (например, 5.255.255.77). Наличие кэширующего DNS-сервера позволяет эту информацию сохранить у себя, то есть на первом сервере. Затем, если другая рабочая станция с локальной сети будет открывать поисковик yandex.ru, то первый сервер (Ubuntu Server) уже не будет делать запрос на внешний сервер и ждать ответа, а возьмет эту информацию со своего кэша и сразу ответит на запрос рабочей станции.

Начало истории

Предварительно на обоих Ubuntu Server была настроена IP-адресация

DHCP на втором Ubuntu Server

и прокси-сервер на первом Ubuntu Server

Видеоролик о настройке кэширующего DNS-сервера:

Настройку кэширующего DNS-сервера на Ubuntu Server можно выполнить в следующей последовательности.

1) Установить службу bind9

sudo apt install bind9

2) Создать копию конфигурационного файла named.conf.options

sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bak

3) Используя mc, перейти в каталог /etc/bind

sudo mc /etc/bind

и открыть файл named.conf.options для редактирования (клавиша F4).

4) Отредактировать содержимое конфигурационного файла использую пример, приведенный на рисунке 2.

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

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

5) Сохранить конфигурационный файл и выйти из редактирования и консоли МС.

6) Перезапустить сервис командой

sudo systemctl restart bind9

7) Проверить статус сервиса командой

sudo systemctl status bind9

Если статус не активен, то проверить наличие ошибок в конфигурационном файле.

8) Прежде чем проверить работоспособность кэширующего DNS-сервера необходимо настроить пропуск ICMP-запросов на первом сервере. Дело в том, что изначально пропуск ICMP-запросов не разрешен. В этом легко убедиться, если зайти, например, на рабочую станцию с операционной системой Windows и в командной строке набрать команду (рисунок 3)

ping yandex.ru

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

Для разрешения пропуска ICMP-запросов:

8.1) Разрешить Forwarding портов командой

sudo sysctl -w net.ipv4.ip_forward=1

8.2) Открыть файл для редактирования

sudo nano /etc/sysctl.conf

и раскомментировать строку

net.ipv4.ip_forward=1

сохранить и закрыть конфигурационный файл.

8.3) Применить изменения командой

sudo sysctl –p

8.4) Добавить правило для пропуска прокола ICMP командой (соответственно указывая адрес своей сети)

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -p icmp -m icmp --icmp-type 8 -j MASQUERADE

После ввода данной команды выйдет с сообщение о создание правила, которое необходимо принять (рисунок 4)

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

8.5) Чтобы это правило сохранилось, необходимо установить демона соглашаясь с вопросами о сохранении правил

sudo apt install iptables-persistent

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Для проверки можно просмотреть содержимое конфигурационного файла (Рисунок 5)

sudo nano /etc/iptables/rules.v4

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

8.6) Перезапустить сервер.

8.7) Проверить пропуск ICMP протокола запустив с рабочей станции в терминале (командной строке) команду (рисунок 6)

ping yandex.ru

если проходят запросы и ответы, то пропуск ICMP протокола настроен верно.

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

8.8) Если необходимо запретить пропуск ICMP-запросов, то нужно в конфигурационном файле закомментировать соответствующую строку (рисунок 7)

sudo nano /etc/iptables/rules.v4

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

9) Проверка работоспособности кэширующего DNS-сервера (при разрешенном пропуске ICMP-запросов).

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

sudo rndc dumpdb –all

а затем просмотреть ее (рисунок 8)

nano /var/cache/bind/named_dump.db

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

Как правило, после перезагрузки сервера информации в кэше DNS практически отсутствует.

9.1) Если зайти на рабочую станцию с операционной системой на основе Linux и в терминале набрать команду (можно указать имя любого общедоступного сервера, находящегося в сети интернет)

dig ya.ru

9.2) Повторить команду еще раз и сравнить время ответа на первую и вторую команду. Время ответа на второй запрос должно составлять 0 мсек (Рисунок 9).

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

9.3) Повторно на сервере просматриваем содержимое кэширующего DNS-сервера (рисунок 10).

sudo rndc dumpdb –all

nano /var/cache/bind/named_dump.db

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

Для нахождения необходимой записи можно воспользоваться встроенным поиском в редакторе nano, нажав комбинацию клавиш Ctrl+W.

9.4) Аналогичную проверку можно сделать, если с рабочих станций (Windows или Linux) воспользоваться утилитой nslookup.

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

nslookup yandex.ru

или проверки доступности одного из адресов сервера яндекс (рисунок 11)

nslookup 5.255.255.77

Рисунок 11
Рисунок 11

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