DNS-шифрование
AdGuard Home поддерживает все современные протоколы DNS-шифрования из коробки:
AdGuard Home поддерживает DNSCrypt как на стороне клиента, так и на стороне сервера. Узнайте, как настроить AdGuard Home как DNSCrypt-сервер.
В этом руководстве объясняется, как настроить зашифрованный DNS-сервер с помощью AdGuard Home.
Установка сервера
Цель защиты DNS-трафика — обезопасить его от третьих лиц, таких как интернет-провайдеры, которые могут анализировать или изменять его.
Это означает, что вам понадобится сервер с публичным выделенным IP-адресом. Есть множество недорогих провайдеров облачных серверов: DigitalOcean, Vultr, Linode и другие. Просто выберите один из них, создайте там облачный сервер и установите AdGuard Home на свой сервер.
Регистрация доменного имени
Прежде всего, вам понадобится доменное имя. Если вы никогда его не регистрировали, вам поможет простая инструкция.
Получение SSL-сертификата
И DNS-over-HTTPS, и DNS-over-TLS основаны на TLS-шифровании, поэтому для их использования вам потребуется SSL-сертификат.
SSL-сертификат можно купить в центре сертификации (Certificate Authority, CA) — компании, которой браузеры и операционные системы доверяют регистрацию SSL-сертификатов для доменов.
Или получите сертификат бесплатно от центра сертификации Let's Encrypt CA, разработанного Internet Security Research Group (ISRG).
Вот руководство по получению бесплатного сертификата.
Используйте CertBot
Certbot — это простой в использовании клиент, который получает сертификат от Let’s Encrypt.
- Перейдите на certbot.eff.org и выберите None of the above в выпадающем меню Software и вашу операционную систему.
- Следуйте инструкции по установке и остановитесь, прежде чем дойдёте до раздела Get Started.
Получите сертификат с помощью DNS-проверки
Если у вас есть доменное имя, проще всего получить сертификат через DNS-проверку.
Выполните эту команду и следуйте инструкциям Certbot:
sudo certbot certonly --manual --preferred-challenges=dns --preferred-chain="ISRG Root X1"
В конце вы получите два файла:
fullchain.pem: ваш SSL-сертификат в кодировке PEMprivkey.pem: ваш приватный ключ в PEM-кодировке
Оба будут необходимы для настройки AdGuard Home.
Для обновления существующего сертификата вам потребуется выполнить ту же процедуру.
Используйте Lego
Также есть хорошая и простая альтернатива CertBot — LEGO.
- Установите его с помощью подходящего метода.
- Выберите своего DNS-провайдера из списка и следуйте инструкциям, чтобы получить сертификат.
Также есть простой скрипт, который можно использовать для автоматизации генерации и продления сертификатов.
Настройка AdGuard Home
Откройте веб-интерфейс AdGuard Home и перейдите в раздел Настройки.
Выберите раздел Шифрование.
![Скриншот настроек шифрования][скриншот шифрования]
Скопируйте и вставьте содержимое файла
fullchain.pemв поле ввода в разделе Сертификаты или укажите путь к файлу.Скопируйте и вставьте содержимое файла
privkey.pemв поле Приватный ключ или укажите путь к файлу.Введите имя вашего домена в поле Имя сервера.
Получите сообщения об успешной проверке и нажмите Сохранить настройки.
AdGuard Home будет автоматически перезагружать сертификаты и/или приватные ключи, указанные в пути к файлу, при их изменении. Перезагрузка также может быть инициирована сигналом SIGHUP.
Использование с обратным прокси
У нас уже есть руководство по настройке обратного прокси-сервера для доступа к веб-интерфейсу AdGuard Home.
AdGuard Home может ограничивать запросы DNS-over-HTTPS, которые поступают с прокси-сервера, не входящего в список «доверенных». По умолчанию он настроен на приём запросов с IPv4 и IPv6 loopback-адресов.
Чтобы AdGuard Home обрабатывал DNS-over-HTTPS запросы с обратного прокси-сервера, установите параметр trusted_proxies в AdGuardHome.yaml на IP-адрес прокси-сервера. Если у вас несколько прокси-серверов, вы можете использовать CIDR вместо простого IP-адреса.
Обратный прокси Nginx
Чтобы настроить AdGuard Home для принятия запросов от обратного прокси-сервера Nginx, убедитесь, что сам обратный прокси-сервер настроен правильно.
Файл 'nginx.conf' должен содержать соответствующие директивы для добавления поддерживаемых заголовков пересылки в запрос — X-Real-IP или X-Forwarded-For. Это можно реализовать с помощью ngx_http_realip_module. Вкратце процесс такой: модуль берёт реальный IP-адрес клиента и записывает его в заголовок HTTP-запроса. AdGuard Home получит и интерпретирует значение этого заголовка как реальный адрес клиента. Адрес обратного прокси-сервера также будет получен и проверен по списку «доверенных» прокси.
Ещё один заголовок, который вы, возможно, захотите использовать в качестве прокси, — это заголовок Host, необходимый для того, чтобы AdGuard Home распознавал запросы от клиентов, у которых в имени хоста присутствует ClientID.
Например, если конфигурация обратного прокси-сервера содержит следующие директивы:
location /dns-query {
# …
proxy_set_header Host $host;
proxy_set_header X-Real-IP '1.2.3.4';
proxy_bind 192.168.1.2;
# …
}
AdGuard Home получит 192.168.1.2 как адрес вашего прокси-сервера и проверит его по trusted_proxies. Доступ к 1.2.3.4 будет контролироваться настройками доступа в случае, если прокси-сервер является «доверенным».
Cloudflare CDN
Сеть доставки контента Cloudflare выступает в роли обратного прокси-сервера, добавляя свои собственные заголовки cloudflare-headers к пересылаемым запросам, которые имеют вид CF-Connecting-IP и True-Client-IP. Они также поддерживаются AdGuard Home, поэтому адреса обратных прокси-серверов можно вставить напрямую в список trusted_proxies. Инструкции по восстановлению IP-адреса исходного посетителя можно найти в официальном справочнике Cloudflare.
Другие заголовки
В будущем AdGuard Home может начать поддерживать и другие HTTP-заголовки. Однако любые запросы на добавление функций, связанных с заголовками, следует сначала попытаться удовлетворить путем настройки обратного прокси-сервера.
Например, чтобы изменить механизм HTTP Strict Transport Security, включив экспериментальную директиву preload, можно использовать примерно следующий фрагмент конфигурации:
location /dns-query {
# …
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# …
}
Настройка устройств
Android
- Android 9 и выше поддерживает
DNS-over-TLSнативно. Для настройки перейдите в Настройки → Сеть и интернет → Другие соединения → Частный DNS и введите там имя своего домена. - AdGuard для Android поддерживает
DNS-over-HTTPS,DNS-over-TLS,DNSCryptиDNS-over-QUIC. - Intra добавляет поддержку
DNS-over-HTTPSна Android.
iOS
- iOS 14 и выше поддерживают
DNS-over-TLSиDNS-over-HTTPSнативно через профили конфигурации. Для упрощения процесса AdGuard Home может автоматически создавать для вас эти профили. Просто перейдите в Инструкцию по настройке → Зашифрованный DNS и прокрутите до iOS. - AdGuard для iOS поддерживает
DNS-over-HTTPS,DNS-over-TLS,DNSCryptиDNS-over-QUIC. - DNSCloak поддерживает
DNS-over-HTTPS, но чтобы настроить его для использования собственного сервера, нужно сгенерировать DNS Stamp для него.
Windows
- Windows 10 Build 19628 и выше поддерживают
DNS-over-HTTPSнативно. - AdGuard для Windows поддерживает
DNS-over-HTTPS,DNS-over-TLS,DNSCryptиDNS-over-QUIC.
macOS
- macOS Big Sur и выше поддерживают
DNS-over-TLSиDNS-over-HTTPSнативно через профили конфигурации. Для упрощения процесса AdGuard Home может автоматически создавать для вас эти профили. Просто перейдите в Инструкцию по настройке → Зашифрованный DNS и прокрутите до iOS.
Другие решения
- Сам по себе AdGuard Home может быть безопасным DNS-клиентом на любой платформе.
- dnsproxy поддерживает все известные безопасные DNS-протоколы.
- dnscrypt-proxy поддерживает
DNS-over-HTTPS. - Mozilla Firefox поддерживает
DNS-over-HTTPS.
Настройка DNSCrypt
AdGuard Home может работать как DNSCrypt-сервер. Однако эта функция доступна только через файл конфигурации и не может быть настроена с помощью веб-интерфейса. В этом руководстве указаны все тонкости настройки.
Создание файла конфигурации
Рассказываем, как сгенирировать файл конфигурации DNSCrypt и указать его в AdGuard Home:
Убедитесь, что настройки TLS верны и шифрование включено.
Загрузите последнюю версию утилиты
dnscryptдля вашей системы. Распакуйте архив и перейдите в полученную директорию.В Unix при использовании POSIX-совместимой оболочки:
(Здесь и далее
linux-amd64используется в качестве примера. Убедитесь, что вы скачали и используете версию для вашей платформы.)Извлеките файлы:
tar -f ./dnscrypt-linux-amd64-v2.2.3.tar.gz -v -x -zПример результата:
linux-amd64/
linux-amd64/README.md
linux-amd64/LICENSE
linux-amd64/dnscryptПерейдите в извлечнёную директорию:
cd ./linux-amd64/Сгенерируйте файл конфигурации:
./dnscrypt generate --provider-name '2.dnscrypt-cert.example.org' --out ./dnscrypt.yamlПример результата:
```none
2022/01/02 12:34:56 [info] Generating configuration for 2.dnscrypt-cert.example.org
2022/02/02 12:34:56 [info] Configuration has been written to ./dnscrypt.yaml
2022/02/02 12:34:56 [info] Go to https://dnscrypt.info/stamps to generate an SDNS stamp
2022/02/02 12:34:56 [info] You can run a DNSCrypt server using the following command:
2022/02/02 12:34:56 [info] dnscrypt server -c ./dnscrypt.yaml -f 8.8.8.8
```
В Windows, с использованием PowerShell:
(Здесь и далее
windows-amd64используется в качестве примера. Убедитесь, что вы скачали и используете версию для вашей архитектуры процессора.)Извлеките файлы:
Expand-Archive -Path .\dnscrypt-windows-amd64-v2.2.3.zipПерейдите в извлечнёную директорию:
Set-Location -Path .\dnscrypt-windows-amd64-v2.2.3\windows-amd64\Сгенерируйте файл конфигурации:
.\dnscrypt.exe generate --provider-name '2.dnscrypt-cert.example.org' --out .\dnscrypt.yamlПример результата:
2022/01/02 12:34:56 [info] Generating configuration for 2.dnscrypt-cert.example.org
2022/02/02 12:34:56 [info] Configuration has been written to .\dnscrypt.yaml
2022/02/02 12:34:56 [info] Go to https://dnscrypt.info/stamps to generate an SDNS stamp
2022/02/02 12:34:56 [info] You can run a DNSCrypt server using the following command:
2022/02/02 12:34:56 [info] dnscrypt server -c .\dnscrypt.yaml -f 8.8.8.8
Где
example.org— имя вашего хоста, а./dnscrypt.yaml— имя файла с конфигурацией, который будет создан.Вы можете добавить путь к бинарному файлу в свой
PATH/$env:PATH.В конфигурационный файл (обычно
AdGuardHome.yaml) добавьте следующие строки:'tls':
# N.B. The encryption must be enabled.
'enabled': true
# …
'port_dnscrypt': 5443
'dnscrypt_config_file': './dnscrypt.yaml'Где
5443— это порт вашего DNSCrypt-сервера, а./dnscrypt.yaml— это имя конфигурационного файла, сгенерированного на втором шаге.ВажноПеред изменением конфигурационного файла остановите AdGuard Home.
tipВ Windows рекомендуется использовать полный путь к файлу конфигурации. For example,
C:\Users\Me\Files\dnscrypt.yaml.
Создание DNSCrypt stamp
Вот как можно сгенерировать DNSCrypt stamp и проверить установку:
Перейдите по ссылке https://dnscrypt.info/stamps/.
Введите данные из файла конфигурации DNSCrypt. Публичный ключ провайдера — это значение поля
public_keyв вашем конфигурационном файле DNSCrypt.noteВведите хост с пользовательским портом.
Теперь у вас есть метка, которая выглядит примерно так:
sdns://AQcAAAAAAAAADTEyNy4wLjAuMTo0NDMg8R3bzEgX5UOEX93Uy4gYSbZCJvPeOXYlZp2HuRm8T7AbMi5kbnNjcnlwdC1jZXJ0LmV4YW1wbGUub3JnПроверьте правильность установки, выполнив команду:
./dnscrypt lookup-stamp \
--domain 'example.com' \
--stamp 'sdns://AQcAAAAAAAAADTEyNy4wLjAuMTo0NDMg8R3bzEgX5UOEX93Uy4gYSbZCJvPeOXYlZp2HuRm8T7AbMi5kbnNjcnlwdC1jZXJ0LmV4YW1wbGUub3Jn' \
--type 'a'Или на Windows:
.\dnscrypt.exe lookup-stamp `
--domain 'example.com' `
--stamp 'sdns://AQcAAAAAAAAADTEyNy4wLjAuMTo0NDMg8R3bzEgX5UOEX93Uy4gYSbZCJvPeOXYlZp2HuRm8T7AbMi5kbnNjcnlwdC1jZXJ0LmV4YW1wbGUub3Jn' `
--type 'a'Где
example.com— это доменное, для которого выполняется запрос.
Настройка устройств для использования DNSCrypt
Все платформы
dnscrypt-proxy(эталонная реализация). DNSCrypt-Proxy — это прокси-сервер командной строки для Linux, BSD, Windows, macOS, Android и других операционных систем.
Android
- AdGuard для Android поддерживает DNSCrypt.
iOS
- AdGuard для iOS поддерживает DNSCrypt.
- DNSCloak использует
dnscrypt-proxyвнутри и поддерживает DNSCrypt.
Windows
- AdGuard для Windows поддерживает DNSCrypt.
- Simple DNSCrypt — это простой инструмент управления для настройки и запуска
dnscrypt-proxyв Windows.
Дополнительная информация на сайте DNSCrypt и в списке DNS privacy project.