Сегодня в статье рассмотрим пример настройки локального 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 запускается автоматически. Вы можете проверить его статус с помощью команды:
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
Обычно DNS-запросы отправляются на UDP-порт 53. TCP-порт 53 предназначен для ответов размером более 512 байт.
Есть еще один важный пакет: rndc
, контроллер демона BIND9, который был установлен с пакетом bind9utils
. rndc
используется для перезагрузки / остановки и управления другими аспектами демона BIND. Связь осуществляется через TCP-порт 953.
Вы также можете проверить его статус командой:
sudo rndc status
Настройка локального DNS-сервера BIND9 на Ubuntu 20.04 LTS
Для настройки пакеты BIND9 перейдем в его каталог:
cd /etc/bind
В нем нас будут интересовать следующие файлы:
- 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
или
sudo journalctl -xe | grep named
Из вывода видно что запросы поступают на наш 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-сервер
Закрываем файл и перезагружаем 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 окончена.
[endtxt]