Для чего нужен DNS резолвер думаю знают все, он обеспечивает преобразование запрашиваемого клиентом символьного имени домена в IP-адрес обслуживающего эту доменную зону сервера. Различные DNS-сервера провайдеров как правило являются кеширующим рекурсивным днс-сервером. Где, под кеширующим мы понимаем что сервер какое-то время данные о запрашиваемых сайтах хранит в кеше и возвращает ответы из памяти не обращаясь к корневым серверам. Допустимое время кэширования содержится в поле TTL ресурсной записи. А из понятия рекурсивный следует то что сервер, принявший запрос, опрашивает все узлы в порядке убывания уровня зон (от корневых зон), пока не получит положительный ответ или информацию о том, что запрашиваемый домен не существует. Но давайте оставим теорию и настроим свой рекурсор.
Как обычно все настраиваем из под рута и на 18й убунте, хотя на 20й убунте все должно выглядеть идентично
- Обновляем пакеты и устанавливаем unbound и dnstop для мониторинга/проверки запросов
apt update
apt upgrade
apt install -y unbound dnstop whois
2. Отключаем то что нам любезно установил canonical вместе с убунтой
systemctl disable systemd-resolved
systemctl stop systemd-resolved
rm /etc/resolv.conf
3. Для интереса смотрим что нам предлагают в дефолтном конфиге unbaund’a. Там не густо.
root@netops:/home/netops# cat /etc/unbound/unbound.conf | egrep -v "^$|#"
include: "/etc/unbound/unbound.conf.d/*.conf"
root@netops:/home/netops# cat /etc/unbound/unbound.conf.d/qname-minimisation.conf | egrep -v "^$|#"
server:
qname-minimisation: yes
root@netops:/home/netops# cat /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf | egrep -v "^$|#"
server:
auto-trust-anchor-file: "/var/lib/unbound/root.key"
Поэтому удаляем все что там есть
rm -r /etc/unbound/unbound.conf.d
> /etc/unbound/unbound.conf
И формируем конфиг заново, со следующими опциями. Подробное описание параметров можно подсмотреть по ссылке
# Больше информации по ключам конфига здесь:
# https://nlnetlabs.nl/documentation/unbound/unbound.conf
server:
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# verbosity level 1 дает оперативную информацию (статистику по запросам)
# 0 уровень будет отправлять в лог только ошибки
verbosity: 1
# Время сбора статистики в секундах
statistics-interval: 60
# Статистика накапливается от времени старта анбаунда
statistics-cumulative: yes
# Расширеная статистика. Выводится через unbaund-control
extended-statistics: yes
# Кол-во потоков. Все зависит от кол-ва ядер процессора
num-threads: 4
# Включаем оптимизацию быстрого перераспределения ресурсов
so-reuseport: yes
# Эта опция включает обновление записей в кэше в фоне.
prefetch: yes
# Возвращает просроченную запись с TTL=0, а в фоне пытается получить свежую у
# авторитетных серверов. Включаем по желанию.
# serve-expired: yes
# Указываем на каких адресах сервер слушает клиентов
# interface: 0.0.0.0
# interface: ::0
interface: 10.10.10.2
# При переключении в yes анбаунд будет слушать запросы на всех IP в системе
interface-automatic: no
port: 53
# Интерфейс через который будем обращаться к корневым зонам
outgoing-interface: 10.10.0.1
outgoing-range: 1450
# Кол-во блоков в кеше сообщений. Устанавливаем по кол-ву ЦПУ/потоков
msg-cache-slabs: 4
num-queries-per-thread: 2048
# Размер кеша для DNS записей
rrset-cache-size: 128m
# Кол-во блоков для работы с кешем. Устанавливаем по кол-ву ЦПУ/потоков
rrset-cache-slabs: 4
# запись с ttl больше 3600 секунд в кеш записываем с ttl равным 3600
cache-max-ttl: 3600
# запись с ttl меньше 60 секунд записываем в кэш с ttl равным 60 секунду
cache-min-ttl: 60
infra-host-ttl: 120
# Устанавливаем по кол-ву ЦПУ/потоков
infra-cache-slabs: 4
# Кол-во записей в кеше. По дефолту 10к
infra-cache-numhosts: 120000
# приводит все ответы сервера (и записи в кэше) к нижнему регистру
use-caps-for-id: yes
# включает хождение наружу по протоколам ниже
do-ip4: yes
do-ip6: yes
do-udp: yes
do-tcp: yes
do-daemonize: yes
# Сети из которых разрешен доступ к DNS'y
access-control: 10.0.0.0/8 allow
access-control: 172.16.0.0/12 allow
access-control: 192.168.0.0/16 allow
logfile: "/var/log/unbound/unbound.log"
use-syslog: no
# Если нужен лог днс запросов - раскоментируем строку ниже
#log-queries: yes
# Скрываем данные о программном обеспечении в ответах на запросы
hide-identity: yes
hide-version: yes
key-cache-size: 50m
neg-cache-size: 10m
# You can add locally served data with
#local-zone: "local." static
#local-data: 'mytext.local TXT "content of text record"'
# Если нам надо добавить какие-то зоны в ручную - пишите их в отдельный файл
# Например используется при редиректах заблокированных ресурсов на заглушку
# ### vk.com
# #local-zone: "vk.com." redirect
# #local-data: "vk.com. IN A 10.10.0.1"
#include: "/etc/unbound/userlist"
python:
# Script file to load
# python-script: "/usr/local/etc/unbound/ubmodule-tst.py"
# Remote control config section.
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-port: 953
# unbound server key file.
server-key-file: "/etc/unbound/unbound_server.key"
# unbound server certificate file.
server-cert-file: "/etc/unbound/unbound_server.pem"
# unbound-control key file.
control-key-file: "/etc/unbound/unbound_control.key"
# unbound-control certificate file.
control-cert-file: "/etc/unbound/unbound_control.pem"
# Используем если запросы для определенных сайтов хотим зафорвардить на другой днс
# Forward zones
# name: "factorio.com"
# forward-addr: 8.8.8.8
На всякий случай добавляем в автозагрузку, если по какой-то причине убунту это не сделала при установке
systemctl enable unbound
service unbound start
service unbound restart
И проверяем работу
root@netops:/home/netops# unbound-control status
version: 1.6.7
verbosity: 1
threads: 4
modules: 3 [ subnet validator iterator ]
uptime: 87 seconds
options: reuseport control(ssl)
unbound (pid 5304) is running...
root@netops:/home/netops# unbound-control lookup deminov.net
The following name servers are used for lookup of deminov.net.
;rrset 3500 2 0 7 3
deminov.net. 3500 IN NS ns2.h106.hvosting.ua.
deminov.net. 3500 IN NS ns1.h106.hvosting.ua.
;rrset 260 1 0 8 0
ns1.h106.hvosting.ua. 260 IN A 91.200.40.106
;rrset 260 1 0 8 0
ns2.h106.hvosting.ua. 260 IN A 91.225.139.106
Delegation with 2 names, of which 2 can be examined to query further addresses.
It provides 2 IP addresses.
91.225.139.106 not in infra cache.
91.200.40.106 rto 228 msec, ttl 20, ping 0 var 57 rtt 228, tA 0, tAAAA 0, tother 0, EDNS 0 probed.
Все. DNS работает. Дополнительно советую посмотреть запись на хабре