DNS over HTTPS на Debian 10

Main

Оценка: 99.5% - 4 Голосов

Общая

В данной статье будет рассказано как поднять DNS over HTTPS сервер на Debian 10 внутри локальной сети для обслуживания запросов обычных клиентов.

 
doh net
 

Данная конфигурация поможет скрыть все 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

View the embedded image gallery online at:
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

View the embedded image gallery online at:
https://itcrowd.top/doh-debian#sigProId3f69a1cc3d

 

Некоторое описание значений

Параметр num-threads указывает количество потоков

Параметры msg-cache-slabs, rrset-cache-slabsinfra-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

После чего проверяем логи.

 
 
  • Просмотров: 3457
Добавить комментарий