Как установить DNSCrypt на вашем сервере

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

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

В данной статье мы представим пошаговую инструкцию по установке и настройке DNSCrypt-сервера на вашем сервере.


Установка DNSCrypt

Как только ваш сервер начал свою работу, выполните подключение к нему через SSH для дальнейших действий. Обычно, для достижения максимальной кастомизации, рекомендуется настроить собственное имя пользователя и установить правила брандмауэра, но в данной статье мы не будем вдаваться в эти детали для удобства и краткости материала.

Прежде всего, необходимо создать специальный каталог для хранения всех файлов, связанных с работой сервера DNSCrypt.

sudo mkdir -p /opt/encrypted-dns

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

cd /opt/encrypted-dns
sudo wget https://github.com/jedisct1/encrypted-dns-server/releases/download/0.3.22/encrypted-dns_0.3.22_amd64.deb

После этого выполните установку загруженного пакета.

sudo dpkg -i encrypted-dns_0.3.22_amd64.deb

Настройка DNSCrypt-сервера

Вы получите образец конфигурационного файла, который нужно скопировать и настроить согласно вашим требованиям.

sudo cp /usr/share/doc/encrypted-dns/example-encrypted-dns.toml /opt/encrypted-dns/encrypted-dns.toml

Для настройки вашего DNSCrypt-сервера, произведите следующие изменения в параметрах файла encrypted-dns.toml.

listen_addrs = [
   { local = "0.0.0.0:443", external = "public_ipv4_address:443" },
   { local = "[::]:443", external = "[public_ipv6_address]:443" }
]

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

Также у вас есть возможность кастомизировать следующие настройки:

[dnscrypt]
## Provider name (with or without the `2.dnscrypt-cert.` prefix)
provider_name = "example.com"

## Does the server support DNSSEC?
dnssec = true

## Does the server always returns correct answers (no filtering, including ad-blocking)?
no_filters = true

## Set to `true` if the server doesn't keep any information that can be used to identify users
no_logs = true

Дополнительно, могу посоветовать активировать опцию [anonymized_dns].

Запуск DNSCrypt в роли системной службы

Теперь, после установки DNSCrypt и настройки файла конфигурации, вы находитесь в двух шагах от запуска сервера. Однако, чтобы обеспечить более удобную работу DNS-сервера, следует настроить его как службу systemd.

Подготовьте файл юнита systemd для управления службой. Здесь в примере используется имя encrypted-dns. Просто скопируйте и вставьте весь предложенный код в ваш SSH-терминал.

sudo bash -c 'cat << EOF > /etc/systemd/system/encrypted-dns.service
# /etc/systemd/system/dnscrypt-server.service
[Unit]
Description=DNSCrypt v2 server
ConditionFileIsExecutable=/usr/bin/encrypted-dns
After=syslog.target network-online.target

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml
WorkingDirectory=/opt/encrypted-dns/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF'

Далее активируйте и запустите службу с использованием следующей команды:

sudo systemctl enable --now encrypted-dns

При успешном завершении процесса, теперь у вас должна быть возможность убедиться, что DNSCrypt-сервер функционирует. Выполните проверку состояния службы с использованием данной команды:

sudo systemctl status encrypted-dns
● encrypted-dns.service - DNSCrypt v2 server
     Loaded: loaded (/etc/systemd/system/encrypted-dns.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-04-24 12:15:00 UTC; 34min ago
   Main PID: 44255 (encrypted-dns)
      Tasks: 3 (limit: 2282)
     Memory: 23.4M
     CGroup: /system.slice/encrypted-dns.service
             └─44255 /usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml

Apr 24 12:15:00 example.com systemd[1]: Started DNSCrypt v2 server.
Apr 24 12:15:00 example.com encrypted-dns[44255]: [INFO ] State file [encrypted-dns.state] found; using existing provider key
Apr 24 12:15:00 example.com encrypted-dns[44255]: [INFO ] Public server address: 83.136.252.155:443
Apr 24 12:15:00 example.com encrypted-dns[44255]: [INFO ] Provider public key: f18c59e9697b1981ba1a2a44b65f5bded4f0463a58ddf9ff6ec45dedf74b94eb
Apr 24 12:15:00 example.com encrypted-dns[44255]: [INFO ] Provider name: 2.dnscrypt-cert.example.com
Apr 24 12:15:00 example.com encrypted-dns[44255]: [INFO ] DNS Stamp: sdns://AQcAAAAAAAAAEjgzLjEzNi4yNTIuMT...

Если вы наблюдаете результат, похожий на описанный в примере выше, это означает, что ваш DNSCrypt-сервер настроен и готов к использованию. В завершение вывода статуса, вы обнаружите DNS-штамп вашего DNSCrypt-сервера. Этот DNS-штамп содержит все необходимые параметры для соединения с безопасным DNS-сервером в одной строке. Можно сравнивать эти штампы с QR-кодами для DNS.

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

Затем вам необходимо будет научиться использовать этот сервер. Перейдите к следующему разделу, в котором описано, как установить DNSCrypt-клиент на вашем локальном компьютере или на другом облачном сервере Linux и настроить его для работы с вашим DNSCrypt-сервером.

Активация защищенного DNS на вашем локальном устройстве.

Сейчас, поскольку ваш DNSCrypt-сервер находится в рабочем состоянии, вы, вероятно, захотите использовать его для выполнения DNS-запросов. Для этого вам необходимо установить DNSCrypt-клиент.

Эти DNSCrypt-клиенты позволяют добавить собственные серверы.

Обширный список клиентских реализаций DNSCrypt доступен на странице информации о DNSCrypt.

В данном примере мы устанавливаем DNSCrypt Proxy на другой Linux-системе. Он может быть использован как на локальных компьютерах под управлением Linux, так и на облачных серверах Linux для работы с вашим новым DNSCrypt-сервером.

Сначала загрузите версию клиентского приложения:

wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.0.45/dnscrypt-proxy-linux_x86_64-2.0.45.tar.gz -O ~/dnscrypt-proxy-linux_x86_64-2.0.45.tar.gz

Далее, распакуйте файлы и перейдите в созданную директорию.

tar -C ~/ -xzf ~/dnscrypt-proxy-linux_x86_64-2.0.45.tar.gz cd ~/linux-x86_64/

Далее, сделайте копию файла конфигурации и откройте эту копию для внесения изменений.

cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
nano dnscrypt-proxy.toml

В самом начале файла, в разделе “Глобальные настройки”, вы найдете пример определения того, какой DNSCrypt-сервер будет использоваться прокси. По умолчанию прокси будет использовать каждый активированный DNSCrypt-резольвер из списка общедоступных.

Для проверки работы вашего нового DNSCrypt-сервера, временно игнорируйте других провайдеров и установите следующие параметры:

server_names = ['myserver']

Далее, переместитесь в самый низ файла, чтобы добавить статическую настройку для вашего пользовательского сервера.

Уберите символ ‘#’ в начале строк, где настраивается статический сервер, и замените его DNS-штампом вашего DNSCrypt-сервера.

[static.’myserver’]

stamp = ‘sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg‘

Если вы еще не сохранили ваш DNS-штамп, не переживайте. Вы всегда можете получить его, выполните команду sudo systemctl status encrypted-dns на вашем DNSCrypt-сервере. По завершению процесса, не забудьте сохранить файл конфигурации и выйти из него.

В заключение, запустите DNSCrypt Proxy.

sudo ./dnscrypt-proxy --config dnscrypt-proxy.toml

После запуска прокси, он автоматически попытается установить соединение с вашим DNSCrypt-сервером. Отслеживайте вывод, чтобы удостовериться, что соединение успешно установлено.

[2021-04-25 08:06:48] [NOTICE] dnscrypt-proxy 2.0.45
[2021-04-25 08:06:48] [NOTICE] Network connectivity detected
[2021-04-25 08:06:48] [NOTICE] Now listening to 127.0.0.1:53 [UDP]
[2021-04-25 08:06:48] [NOTICE] Now listening to 127.0.0.1:53 [TCP]
[2021-04-25 08:06:48] [NOTICE] Source [public-resolvers] loaded
[2021-04-25 08:06:48] [NOTICE] Source [relays] loaded
[2021-04-25 08:06:48] [NOTICE] Firefox workaround initialized
[2021-04-25 08:06:48] [NOTICE] [myserver] OK (DNSCrypt) - rtt: 19ms
[2021-04-25 08:06:48] [NOTICE] Server with the lowest initial latency: myserver (rtt: 19ms)
[2021-04-25 08:06:48] [NOTICE] dnscrypt-proxy is ready - live servers: 1

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

Убедитесь в работоспособности, выполнив DNS-запрос к серверу DNSCrypt.

nslookup example.com
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	example.com
Address: 93.184.216.34
Name:	example.com
Address: 2606:2800:220:1:248:1893:25c8:1946

Если у вас нет доступа к активному серверу, убедитесь, что ваш брандмауэр не блокирует необходимые порты 53 и 443. Также проверьте, что ваш DNS-штамп установлен правильно и в полной мере. Помните, что длина штампа значительно больше, чем заполнитель в примере конфигурационного файла DNSCrypt Proxy.

Заключение

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

Что будем искать? Например,Cisco

Мы в социальных сетях