Добавить в корзинуПозвонить
Найти в Дзене

Настраиваем DNS-резольвер Unbound для работы с DNS over TLS

Сегодня, в эпоху всеобщего шифрования, отправлять DNS-запросы открытым текстом довольно опасно. Мало того, что вы даете возможность третьим лицам полностью ознакомиться с вашей сетевой активностью, так еще и остается возможность подменить DNS-ответ по дороге, направив вас на совершенно другой ресурс. Поэтому современный DNS также требует TLS-защиты, наиболее просто и прозрачно для администратора использовать DNS over TLS (DoT). Да, эта технология не маскирует себя под HTTPS-трафик, но в большинстве случаев это и не нужно. Для реализации нашей задумки мы будем использовать популярный DNS-резольвер Unbound, который присутствует в репозиториях всех основных дистрибутивов Linux. Установить его можно командой: apt install unbound Затем откроем основной конфигурационный файл /etc/unbound/unbound.conf и приведем его к следующему виду: include-toplevel: "/etc/unbound/unbound.conf.d/*.conf" server: use-syslog: yes username: "unbound" directory: "/etc/unbound" tls-cert-bundle: /etc/ssl/ce

Настраиваем DNS-резольвер Unbound для работы с DNS over TLS

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

Поэтому современный DNS также требует TLS-защиты, наиболее просто и прозрачно для администратора использовать DNS over TLS (DoT). Да, эта технология не маскирует себя под HTTPS-трафик, но в большинстве случаев это и не нужно.

Для реализации нашей задумки мы будем использовать популярный DNS-резольвер Unbound, который присутствует в репозиториях всех основных дистрибутивов Linux.

Установить его можно командой:

apt install unbound

Затем откроем основной конфигурационный файл /etc/unbound/unbound.conf и приведем его к следующему виду:

include-toplevel: "/etc/unbound/unbound.conf.d/*.conf"

server:

use-syslog: yes

username: "unbound"

directory: "/etc/unbound"

tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt

verbosity: 2

do-ip6: no

interface: 192.168.100.53

port: 53

prefetch: yes

root-hints: /usr/share/dns/root.hints

harden-dnssec-stripped: yes

cache-max-ttl: 86400

cache-min-ttl: 900

aggressive-nsec: yes

hide-identity: yes

hide-version: yes

use-caps-for-id: yes

private-address: 192.168.0.0/16

private-address: 169.254.0.0/16

private-address: 172.16.0.0/12

private-address: 10.0.0.0/8

#control which clients are allowed to make (recursive) queries

access-control: 127.0.0.1/32 allow_snoop

access-control: 127.0.0.0/8 allow

access-control: 192.168.100.0/24 allow

num-threads: 4

msg-cache-slabs: 8

rrset-cache-slabs: 8

infra-cache-slabs: 8

key-cache-slabs: 8

rrset-cache-size: 256m

msg-cache-size: 128m

so-rcvbuf: 8m

forward-zone:

name: "."

forward-ssl-upstream: yes

forward-addr: 1.1.1.1@853#one.one.one.one

forward-addr: 1.0.0.1@853#one.one.one.one

forward-zone:

name: "nalog.ru."

forward-ssl-upstream: yes

forward-addr: 77.88.8.8@853#common.dot.dns.yandex.net

Мы не будем касаться подробно всех параметров, объем заметки этого не позволяет, они более-менее стандартные. Можете попросить любой ИИ, и он вам охотно пояснит их значение.

Мы же разберем настройки непосредственно DoT. Так как Unbound не DNS-сервер, а именно резольвер, то он на все запросы либо отдает данные из кеша, либо запрашивает их у вышестоящих серверов.

Где именно это делать мы указываем в секциях forward-zone, таких секций может быть несколько и тогда Unbound ищет среди низ наиболее точное совпадение.

В нашем примере таких секций две: "." и "nalog.ru." – обратите внимание, что имена зон всегда должны заканчиваться на точку, точка обозначает корень системы DNS.

И именно поэтому в одном из имен зон пересылки у нас стоит точка, это обозначает, что сюда следует посылать все DNS-запросы, которым не нашлось иного совпадения. Вторая зона у на нас отвечает за домен nalog.ru.

В нашем примере для nalog.ru мы используем сервера Яндекс.DNS, для всех остальных запросов будут использоваться Cloudflare DNS.

Опция forward-ssl-upstream: yes включает DoT для указанных зон, ниже перечисляются сервера, к которым следует делать запросы. В записи мы указываем адрес и порт, по умолчанию это 853.

А вот запись после # - это не комментарий, это доменное имя, на которое выписан сертификат сервера. Что позволяет выполнить проверку сертификата на стороне клиента. Даже если кто-то перехватит наш трафик и направит на поддельный DoT-сервер, он не сможет предъявить клиенту валидный сертификат.

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