В этом руководстве будет рассказано, как настроить локальный DNS резолвер в Ubuntu 22.04/20.04 или Debian 11/12 с помощью unbound.
Локальный резолвер позволяет получать мгновенный ответ от DNS (кроме случая, когда мы впервые запрашиваем адрес сервера). Резолверы провайдера/хостера бывают перегружены, запрос в них в любом случае занимает какие-то миллисекунды, да и протокол UDP весьма не надежен.
Обновляем и устанавливаем unbound из стандартного репозитария:
sudo apt update
sudo apt install unbound
Добавляем в автозагрузку:
sudo systemctl enable unbound
По умолчанию сервер Unbound в Ubuntu/Debian включен только для локального хоста. Посторонние запросы будут отклонены.
Редактируем файл конфигурации:
sudo nano /etc/unbound/unbound.conf
По умолчанию в этом файле только одна строка:
include: "/etc/unbound/unbound.conf.d/*.conf"
Она нужна для включения файлов из каталога /etc/unbound/unbound.conf.d/ который содержит два файла конфигурации:
Править их нет необходимости, при условии что вы не знаете что с ними делать.
Пример настроек можно посмотреть /usr/share/doc/unbound/examples/unbound.conf
Добавляем свои настройки в /etc/unbound/unbound.conf:
server:
# рабочий каталог.
directory: "/etc/unbound"
# запускаем от имени пользователя unbound
username: unbound
verbosity: 2 # раскомментируйте и увеличьте число, чтобы получить больше информации в логах.
# прослушиваем все интерфейсы, отвечаем на запросы из локальной подсети.
interface: 0.0.0.0
# закомментируйте строку, если в вашей системе не используется IPv6.
interface: ::0
# выполнить предварительную выборку записей DNS кэша.
prefetch: yes
access-control: 10.0.0.0/8 allow
access-control: 127.0.0.1/24 allow
access-control: 2001:DB8::/64 allow
# скрыть информацию о сервере
hide-identity: yes
hide-version: yes
# указываем DNS сервера, если нужно
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
remote-control:
# Включите удаленное управление с помощью unbound-control(8).
control-enable: no
# какие интерфейсы прослушиваются для удаленного управления.
# укажите 0.0.0.0 и ::0 для прослушивания всех интерфейсов.
# укажите абсолютный путь для использования локальных имен Unix, сертификатов.
# сейчас не используются, поэтому ключи и сертификаты не требуются.
control-interface: 127.0.0.1
# control-interface: ::1
# номер порта для удаленного управления.
control-port: 8953
sudo systemctl disable systemd-resolved --now
access-control: 192.168.0.0/24 allow
unbound будет принимать DNS-запросы из сети 192.168.0.0/24.
Сохраняем конфигурацию и перезапускаем unbound:
sudo systemctl restart unbound
Проверяем статус:
systemctl status unbound
Если все нормально продолжаем настройку.
При использовании на сервере брандмауэра UFW, вам необходимо открыть порт 53, чтобы клиенты локальной сети могли отправлять DNS-запросы:
sudo ufw allow in from 10.0.0.0/8 to any port 53
Это откроет порт 53 TCP и UDP, для сети 10.0.0.0/8.
Теперь нужно сделать так, чтобы сервер использовал 127.0.0.1 как DNS резолвер по умолчанию.
Поэтому создаём файл unbound-resolvconf.service со следующим содержимым:
sudo nano /etc/systemd/system/unbound-resolvconf.service
[Unit]
Description=local unbound via resolvconf
After=unbound.service
ConditionFileIsExecutable=/sbin/resolvconf
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'echo nameserver 127.0.0.1 | /sbin/resolvconf -a lo.unbound'
ExecStop=/sbin/resolvconf -d lo.unbound
[Install]
WantedBy=unbound.service
Сохраняем и перезагружаем systemd:
sudo systemctl daemon-reload
Устанавливаем openresolv, если он ещё не установлен:
sudo apt install openresolv
Перезапускаем службу:
sudo systemctl restart unbound-resolvconf.service
Смотрим содержимое /etc/resolv.conf:
cat /etc/resolv.conf
~
nameserver 127.0.0.1
~
Видим что, 127.0.0.1 (unbound) - DNS резольвер по умолчанию.
Если у вас есть VPN-клиент WireGuard, необходимо указать следующий параметр DNS в файле конфигурации клиента WireGuard.
DNS = 10.0.0.1
При условии что это IP является адресом по умолчанию, если адрес другой, нужно заменить на свой.
Затем перезапустите VPN-клиент WireGuard.
Для настройки клиентов локальной сети, нужно указать IP unbound сервера, как это сделать, для своей операционной системы, можно посмотреть в интернете.