Установка DNSCrypt-сервера

()

Протокол DNSCrypt медленно но верно получает распространение. Его поддержка по-тихоньку появляется в популярных DNS-серверах и сейчас уже каждый желающий может развернуть свой персональный DNSCrypt-сервер. Далее будет рассмотрен пример DNCrypt-сервера на базе балансировщика DNS-запросов dnsdist, разработанном создателями DNS-сервера PowerDNS.

PowerDNS dnsdist + DNSCrypt

Разворачивать наш DNSCrypt-сервер мы будем на VPS от Vultr под управлением Ubuntu 18.04. В Ubuntu пакет dnsdist собран без поддержки DNSCrypt, потому ставить dnsdist будем из официального репозитория PowerDNS. Первым шагом создадим файл «/etc/apt/sources.list.d/pdns.list» следующего содержания:

deb [arch=amd64] http://repo.powerdns.com/ubuntu bionic-dnsdist-13 main

Затем опишем приоритет этого репозитория в файле «/etc/apt/preferences.d/dnsdist»:

Package: dnsdist*
Pin: origin repo.powerdns.com
Pin-Priority: 600

Добавим ключ для проверки подписей пакетов:

curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -

И установим пакет dnsdist:

sudo apt-get update
sudo apt-get install dnsdist

По умолчанию dnsdist не использует файл конфигурации. Чтобы это исправить надо скопировать файл «/lib/systemd/system/dnsdist.service» в директорию «/etc/systemd/system/» и отредактировать под наши задачи. Изменения минимальны:

#ExecStartPre=/usr/bin/dnsdist --check-config -u _dnsdist -g _dnsdist
ExecStartPre=/usr/bin/dnsdist --check-config -u _dnsdist -g _dnsdist --config /etc/dnsdist/dnsdist.conf

#ExecStart=/usr/bin/dnsdist --supervised --disable-syslog -u _dnsdist -g _dnsdist
ExecStart=/usr/bin/dnsdist --supervised --disable-syslog -u _dnsdist -g _dnsdist --config /etc/dnsdist/dnsdist.conf

Закончив правки обновим конфигурацию systemd:

systemctl daemon-reload

Создадим директорию для хранения ключей нашего DNSCrypt-сервера:

mkdir -p /var/lib/dnsdist
chown -vR _dnsdist:_dnsdist /var/lib/dnsdist

Далее нужно сгенерировать ключ для управления демоном:

echo 'makeKey()' | dnsdist -l 5555

В выводе этой команды нас интересует строка вида:

setKey("iR/y3Mp8zsUcfqYtiEVlt3jUj85uZdNAU+XaQxywqR8=")

Запоминаем эту строку и создаём файл конфигурации «/etc/dnsdist/dnsdist.conf»:

controlSocket('127.0.0.1:5199')
setKey("iR/y3Mp8zsUcfqYtiEVlt3jUj85uZdNAU+XaQxywqR8=")
newServer("8.8.8.8")
newServer("8.8.4.4")
setACL("0.0.0.0/0")
setLocal('127.0.0.1:8853')

После создания файла конфигурации нам надо получить две временных метки: начала действия ключа сервера и окончания действия ключа сервера. Получить их можно командой:

date +%s && date +%s --date="2030-12-31 23:59:59"

Перезапускаем сервис и подключаемся к его консоли управления:

service dnsdist restart
dnsdist -c

В консоли управления последовательно вводим команды:

generateDNSCryptProviderKeys("/var/lib/dnsdist/providerPublic.key", "/var/lib/dnsdist/providerPrivate.key")

generateDNSCryptCertificate("/var/lib/dnsdist/providerPrivate.key", "/var/lib/dnsdist/resolver.cert", "/var/lib/dnsdist/resolver.key", 1, 1529585908, 1924981199)

Во вторую команду вместо 1529585908 и 1924981199 нужно подставить полученные ранее временные метки. Далее придумываем имя нашему серверу. Например «mydnscryptsrv». После чего дописываем в файл «/etc/dnsdist/dnsdist.conf» строку:

addDNSCryptBind("0.0.0.0:8854", "2.mydnscryptsrv", "/var/lib/dnsdist/resolver.cert", "/var/lib/dnsdist/resolver.key")

И ещё раз перезапускаем сервис:

service dnsdist restart

Получаем цифровой отпечаток сервера командой:

echo 'printDNSCryptProviderFingerprint("/var/lib/dnsdist/providerPublic.key")' | dnsdist -c

На этом конфигурация DNSCrypt-сервера завершена и можно перейти к настройке клиента. Если используется dnscrypt-proxy на машине под управлением Ubuntu 18.04 то достаточно привести файл «/etc/dnscrypt-proxy/dnscrypt-proxy.conf» к виду:

Daemonize no
LocalAddress 127.0.2.1:53
ProviderName    2.usvpnyls
ProviderKey     цифровой_отпечаток_сервера
ResolverAddress IP-сервера:8854

И перезапустить сервис:

service dnscrypt-proxy restart

Важно отметить что в данной конфигурации dnsdist не кэширует запросы. Кроме того доступ к нему разрешён всем желающим (правда они должны иметь ключ). Если надо ограничить доступ только определёнными IP-адресами то надо соответствующим образом отредактировать ACL.

На этом всё. Приятной работы!

Ключевые слова: dnscrypt, dnsdist, powerdns, dnscrypt-proxy, systemd.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE