DNSCrypt – это открытая спецификация, разработанная для аутентификации связи между DNS-клиентом и DNS-резольвером. Она использует криптографические подписи для подтверждения, что ответы исходят от выбранного DNS-резольвера и не были изменены, при этом сообщения все равно передаются через протокол UDP.
DNSCrypt обеспечивает уровень повышенной конфиденциальности, применяя шифрование содержимого DNS-сообщений и предотвращая подделку DNS с использованием аутентификации. Несмотря на то, что DNSCrypt пока не имеет официального стандарта, радует то, что существует несколько реализаций и наборов DNSCrypt-серверов. Например, OpenDNS предоставляет доступ к DNSCrypt.
В данной статье мы представим пошаговую инструкцию по установке и настройке DNSCrypt-сервера на вашем сервере.
EasyTools — бот содержит набор инструментов для айтишников и не только.
▪️ Генератор паролей
▪️ Поиск IP-адреса
▪️ Проверка SSL
▪️ DNS-поиск
▪️ Сканер портов
▪️ IP-калькулятор
Чтобы попробовать, нажми по ссылке: клик
Содержание
Установка 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-Proxy – для Linux
- DNSCloak (GUI) – для iOS
- RethinkDNS (GUI) – для Android
- DNSCrypt-Proxy – для macOS
- YogaDNS (GUI) – для Windows
Обширный список клиентских реализаций 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-сервера и клиента вы легко обеспечиваете конфиденциальность и безопасность как для серверных кластеров, так и для домашних сетей.