DNS over HTTPS на Debian 10
Общая
В данной статье будет рассказано как поднять DNS over HTTPS сервер на Debian 10 внутри локальной сети для обслуживания запросов обычных клиентов.
Данная конфигурация поможет скрыть все DNS запросы локальных устройств из локальной сети.
В данной статье используется Unbound — высокопроизводительный, кеширующий и рекурсивный DNS сервер в сочетании с DNSCrypt-proxy — гибкий DNS-прокси с поддержкой современных зашифрованных протоколов DNS.
Установка DNSCrypt-proxy
Прописываем тестовый репозиторий
echo "deb https://deb.debian.org/debian/ testing main" | tee /etc/apt/sources.list.d/testing.list
Настраиваем pinning в APT
nano /etc/apt/preferences.d/pinning.pref
Добавляем в файл:
Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release a=testing Pin-Priority: 500 Package: * Pin: release a=unstable Pin-Priority: 100
Обновляемся и устанавливаем DNSCrypt-proxy
apt update && apt install -t testing dnscrypt-proxy
Проверяем работоспособность прокси:
lsof -i -P -n | grep dnscrypt
https://itcrowd.top/doh-debian#sigProIdd36128c573
Делаем запрос к прокси:
dnscrypt-proxy -resolve itcrowd.top
Если выскакивает ошибка [FATAL] Unable to load the configuration file [dnscrypt-proxy.toml] -- Maybe use the -config command-line switch?
То выполняем следующее:
ln -s /etc/dnscrypt-proxy/dnscrypt-proxy.toml /usr/sbin/dnscrypt-proxy.toml
На данном этапе мы получаем рабочий dnscrypt-proxy который слушает 53 порт и если вам не нужны расширенные возможности DNS сервера Unbound то дальнейшую установку можно опустить, взяв во внимание только пункт по настройке dnscrypt-proxy.toml
Настройка DNSCrypt-proxy
Редактируем dnscrypt-proxy.socket
nano /lib/systemd/system/dnscrypt-proxy.socket
Заменяем содержимое файла на:
[Unit] Description=dnscrypt-proxy listening socket Documentation=https://github.com/DNSCrypt/dnscrypt-proxy/wiki Before=nss-lookup.target Wants=nss-lookup.target Wants=dnscrypt-proxy-resolvconf.service [Socket] ListenStream=127.0.2.1:5353 ListenDatagram=127.0.2.1:5353 NoDelay=true DeferAcceptSec=1 [Install] WantedBy=sockets.target
Настраиваем dnscrypt-proxy.toml
nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
Заменяем содержимое файла на:
# Empty listen_addresses to use systemd socket activation listen_addresses = [] #Указываем нужные сервера согласно списка https://dnscrypt.info/public-servers/ server_names = ['cloudflare', 'google'] #Указываем куда идти если указанные сервера в server_names недоступны fallback_resolvers = ['8.8.4.4:53', '8.8.8.8:53', '1.1.1.1:53'] [query_log] file = '/var/log/dnscrypt-proxy/query.log' [nx_log] file = '/var/log/dnscrypt-proxy/nx.log' [sources] [sources.'public-resolvers'] url = 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md' cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md' minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' refresh_delay = 72 prefix = ''
Перезагружаемся:
reboot
Установка Unbound
apt install unbound
Настройка Unbound
Создаем дополнительный файл конфигурации
nano /etc/unbound/unbound.conf.d/dns.conf
И добавляем туда следующую конфигурацию.
server: chroot: "" logfile: /var/log/unbound/unbound.log verbosity: 1 log-queries: yes pidfile: /run/unboun #Указываем сети\узлы которые можно обслуживать access-control: 192.168.0.0/16 allow access-control: 127.0.0.1 allow aggressive-nsec: yes cache-max-ttl: 14400 cache-min-ttl: 1200 directory: /etc/unbound do-ip4: yes do-tcp: yes hide-identity: yes hide-version: yes interface: 0.0.0.0 port: 53 prefetch: yes rrset-roundrobin: yes tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" use-caps-for-id: yes do-not-query-localhost: no num-threads: 8 msg-cache-slabs: 4 rrset-cache-slabs: 4 infra-cache-slabs: 4 key-cache-slabs: 4 msg-cache-size: 512M rrset-cache-size: 1024M key-cache-size: 10m # Uncomment. Time to live maximum for RRsets and messages in the cache. Default is 86400 seconds (1 day). # cache-max-ttl: 86400 # Uncomment. Time to live minimum for RRsets and messages in the cache. Default is 0. # cache-min-ttl: 0 outgoing-range: 512 # Uncomment. The number of queries that every thread will service simultaneously. # num-queries-per-thread: 4096 forward-zone: name: "." forward-addr: 127.0.2.1@5353>
Проверяем конфигурацию на наличие ошибок:
unbound-checkconf
Если появляется ошибка fatal error: logfile directory does not exist
То выполняем следующее:
mkdir /var/log/unbound/ touch /var/log/unbound/unbound.log chown unbound:unbound /var/log/unbound/unbound.log
Перезагружаем службу unbound
service unbound restart
Проверяем работоспособность утилитой dig из пакета dnsutils
dig @127.0.0.1 itcrowd.top
https://itcrowd.top/doh-debian#sigProId3f69a1cc3d
Некоторое описание значений
Параметр num-threads
указывает количество потоков
Параметры msg-cache-slabs
, rrset-cache-slabs
, infra-cache-slabs
и key-cache-slabs
должны быть установлены степенями двойки, максимально близкими к num-threads.
Параметр outgoing-range
указывает количество портов которые могут быть открыты
Параметры msg-cache-size
, rrset-cache-size
и key-cache-size
указывает на объем кэша, при этом rrset-cache-size должен быть в два раза больше msg-cache-size.
Параметр cache-max-ttl
указывает максимальное время жизни записи в кэше.
Параметр cache-min-ttl
указывает минимальное время жизни записи где по умолчанию стоит 0. Ноль указывает что время жизни записи будет таким-же как установил владелец домена.
Параметр forward-addr
указывает адрес пересылки и указывается по принципу ip@порт#публичное_имя
. Публичное имя сервера указывается для подтверждения сертификата сервера tls-cert-bundle
.
Больше описаний можно найти тут.
Если не работает лог.
Если записей в логе нет, а при запуске unbound
в syslog
пишется что нет доступа к файлу, то сначала проверьте права на этот файл. Права на запись должны быть выданы группе и пользователю unbound
, который создается автоматически при установке сервера.
Если это не помогло то открывает следующий файл:
nano /etc/apparmor.d/local/usr.sbin.unbound
И добавляем одну строку:
/var/log/unbound/unbound.log rw,
Далее перезагружаем apparmor и unbound
apparmor_parser -r /etc/apparmor.d/usr.sbin.unbound service unbound restart
После чего проверяем логи.
- Просмотров: 15067