Настройка Unbound на сервере с Ubuntu 22.04/20.04 или Debian 11/12

Апрель 29, 2024 - Время чтения: 5 минуты

В этом руководстве будет рассказано, как настроить локальный 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/ который содержит два файла конфигурации:

  • qname-minimisation.conf: включает QNAME.
  • root-auto-trust-anchor-file.conf: включает проверку DNSSEC.

Править их нет необходимости, при условии что вы не знаете что с ними делать.

Пример настроек можно посмотреть /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
  • По умолчанию Ubuntu/Debian запускает заглушку, которая прослушивает 127.0.0.53:53. Её нужно остановить чтобы unbound смог привязаться к 0.0.0.0:53.
sudo systemctl disable systemd-resolved --now
  • Если вы используете подсеть отличную от 10.0.0.0/8, вам необходимо изменить её на свою, например:
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 сервера, как это сделать, для своей операционной системы, можно посмотреть в интернете.

Категории