Настройка DNS-сервера BIND9 на Ubuntu 20.04 LTS

Сегодня в статье рассмотрим пример настройки локального DNS-сервера BIND9 на Ubuntu 20.04 LTS. Всё нижеописанное применимо и для других Debian дистрибутивов, с небольшими поправками на названия файлов и их путей.

Зачем запускать собственный локальный DNS-сервер?

Обычно ваш компьютер или маршрутизатор использует DNS-сервер поставщика услуг интернета для запроса DNS-имен. Запуск собственного локального DNS-сервера может ускорить поиск DNS-имен:

  • Локальный DNS-сервер слушает только ваши DNS-запросы и не отвечает на другие, поэтому у вас есть гораздо более высокий шанс получить ответы DNS непосредственно из вашего кэша .
  • Сетевая задержка между вашим компьютером и DNS-сервером почти нулевая, поэтому DNS-запросы могут быть отправлены на корневые DNS-сервера быстрее.

Если вы запускаете свой собственный почтовый сервер или VPN-сервер на VPS хостинге, то вам также рекомендуется установить собственный DNS-сервер на том же VPS.

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

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

Поскольку наш DNS сервер будет использоваться на локальном хосте/локальной сети, шифрование (DNS через TLS или DNS через HTTPS) не требуется. Настройка Dot или DoH сервера будет обсуждаться в следующей статье.

Установка локального DNS-сервера BIND9 на Ubuntu 20.04

Выполните следующую команду, чтобы установить BIND9 на Ubuntu 20.04 LTS, из репозитория по умолчанию:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc bind9-host

После установки можно проверить версию следующей командой:

named -V
версия BIND9

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

sudo systemctl status bind9

Примечание: В Ubuntu 20.04 LTS BIND9 запускается как служба, а не как сервис. Поэтому команда service bind9 start|stop|restart|status в данном дистрибутиве не действует.

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

sudo systemctl enable bind9
sudo systemctl start bind9

Сервер DNS в вашей системе будет работать от имени bind пользователя, который создается во время установки, и прослушивает TCP и UDP порт 53. Для проверки выполните следующую команду:

sudo netstat -lnptu | grep named
Проверка портов BIND9

Обычно DNS-запросы отправляются на UDP-порт 53. TCP-порт 53 предназначен для ответов размером более 512 байт.

Есть еще один важный пакет: rndc, контроллер демона BIND9, который был установлен с пакетом bind9utilsrndc используется для перезагрузки / остановки и управления другими аспектами демона BIND. Связь осуществляется через TCP-порт 953.

Вы также можете проверить его статус командой:

sudo rndc status
 rndc status

Настройка локального DNS-сервера BIND9 на Ubuntu 20.04 LTS

Для настройки пакеты BIND9 перейдем в его каталог:

cd /etc/bind9

В нем нас будут интересовать следующие файлы:

  • named.conf.options
  • named.conf.local

Подсказка: Пакет bind9 на Ubuntu 20.04 теперь не поставляется с db.root файлом корневых серверов, теперь он использует файл /usr/share/dns/root.hints.

Давайте сперва откроем файл named.conf.options:

sudo nano named.conf.options

И внесем в него следующие изменения:

// ACL список с сетями
acl "lan" {
//        10.5.5.0/24; # Локалка 1
//        10.1.1.0/24; # Локалка 2
        localhost;
};

options {
        directory "/var/cache/bind";
// Слушать только сети перечисленные в списках ACL
        listen-on { "lan"; };
// Запрашивать у DNS если не найдено в собственной базе
        forwarders {
        1.1.1.1;
        8.8.8.8;
        };
// Разрешить рекурсивные запросы
        recursion yes;
// Рекурсия только для ACL списка
        allow-recursion { "lan"; };
// Обрабатывать запросы только из сетей указанных в acl списках
        allow-query { "lan"; };

        dnssec-validation auto;
        auth-nxdomain no;
// Выключаем IPv6 
        listen-on-v6 { none; };
// При запросе версии DNS выдать следующий ответ
        version "NOT CURRENTLY AVAILABLE";
// Логирование
        querylog yes;
};

Сохраните и закройте файл. Затем проверьте синтаксис файла конфигурации.

sudo named-checkconf

Если ничего не выдал, то все в порядке. Можно перезапустить службу:

sudo systemctl restart bind9

Также если у вас закрыты порты то их необходимо открыть.

Для UFW

sudo ufw allow in from 10.5.5.0/24 to any port 53

Для iptables

sudo iptables -A INPUT -s 10.5.5.0/24 -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -s 10.5.5.0/24 -p tcp --dport 53 -j ACCEPT

Это откроет TCP и UDP порт 53 для локальной сети 10.5.5.0 / 24. Затем с другого компьютера в той же локальной сети мы можем выполнить следующую команду для запроса записи A google.com.

dig A google.com @10.5.5.1

где, 10.5.5.1 — IP адрес нашего сервера в локальной сети

Теперь проверьте журнал запросов с помощью следующей командой:

sudo journalctl -eu named
bind9 journalctl

Из вывода видно что запросы поступают на наш DNS сервер, а он в свою очередь на них успешно отвечает.

В файле named.conf.local настраиваются зона прямого и обратного просмотра. В данном материале уже описано как это сделать

Resolver DNS в Ubuntu 20.04 LTS

Какой у вас в системе установлен резолвер можно посмотреть вот такой командой:

sudo systemd-resolve --status

Чтобы установить ваш DNS в качестве резолвера по умолчанию, откройте файл конфигурации systemd-resolved.

sudo nano /etc/systemd/resolved.conf

И пропишите в файле в секции [Resolver] ваш DNS-сервер

resolver local

Закрываем файл и перезагружаем systemd-resolver

sudo systemctl restart systemd-resolved

Если теперь посмотреть статус то DNS должен измениться на IP вашего сервера.

sudo systemd-resolve --status
Локальный резолвер

Также теперь проверьте содержание /etc/resolv.conf.

cat /etc/resolv.conf
nameserver 10.5.5.1
search lan
options ends0

Если привязки не произошло, то можно установить утилиту resolvconf

sudo apt install resolvconf

Запускаем сервис named-resolvconf

sudo systemctl enable named-resolvconf.service
sudo systemctl start named-resolvconf.service

На этом Настройка локального DNS-сервера BIND9 на Ubuntu 20.04 LTS окончена.

Если есть вопросы, то пишем в комментариях.

RSS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 1 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

3 Комментарий
новее
старее большинство голосов
Inline Feedbacks
View all comments
Ewgeniy
Ewgeniy
01.06.2020 00:24

Единственное что а есть ли в этом днс сервере если локально уже поднят pi.hole ?

Ewgeniy
Ewgeniy
Reply to  Смирнов Олег
01.06.2020 21:03

Понял вас, я тогда предлагаю вкупе использовать bind9 + pi.hole, так как последний может работать на своих dns + по спискам блокировать рекламу.