Свой шифрованный DNS без чужих глаз
Приватный DoH/DoT-резолвер на своём VPS: свой шифрованный DNS без чужих глаз
Вообще я микроразработчик, со мной можно связаться как угодно, я открыт ко всему
Сторонний мой проект: Zapret2UI.
Есть у вас VPS (а если читали прошлые статьи, то уже и домен к нему прикрутили). Давайте поднимем на нём полезную штуку - свой личный DNS-резолвер, да ещё и шифрованный (DoH/DoT). Звучит страшно, на деле - полчаса и пара команд. Там так-то вообще ничего сложного
Зачем оно вам? Каждый раз, когда телефон или ноут открывает сайт, он сперва спрашивает
у DNS: «а какой IP у site.ru?». По умолчанию этот вопрос уходит к DNS вашего
провайдера или к публичному (8.8.8.8 и подобным) - открытым текстом, и тот, кто
отвечает, видит вообще всё, куда вы ходите. Свой резолвер забирает эту историю под ваш
контроль: запросы шифруются, никто по дороге их не читает, а заодно можно резать рекламу
и трекеры на всех устройствах разом.
Что такое сам DoH/DoT и чем они отличаются от обычного DNS - я подробно разбирал в отдельной статье про DNS vs DoH vs DoT vs DoQ. Тут - чисто практика: как поднять свой.
Кому пригодится: если надоело, что провайдер и публичные DNS видят каждый ваш шаг; если хочется один раз настроить блокировку рекламы на всю семью и все устройства; или просто интересно пощупать, как это работает, на своём сервере.
Дальше - по шагам и на пальцах. Нужен только результат - листайте в «короткий итог», но для понимания что это такое - лучше прочитайте полностью(маленькая же статья вы че).
Содержание
- Что такое резолвер и зачем он свой
- В чём соль: зачем поднимать свой DNS
- Что понадобится
- Чем поднимать: три варианта
- Ставим AdGuard Home
- Сертификат и шифрование
- Главное: не стать открытым резолвером
- Подключаем устройства
- Проверяем, что всё работает
- Частые грабли
- На чём поднимать
- Короткий итог
Что такое резолвер и зачем он свой
Резолвер - это тот, кто отвечает на вопрос «какой IP у этого домена». Каждое открытие
сайта начинается с такого запроса. Обычно вы пользуетесь чужим резолвером: провайдерским
или публичным вроде Google (8.8.8.8) и Cloudflare (1.1.1.1).
Тут две проблемы. Первая - обычный DNS ходит открытым текстом, как почтовая открытка: любой на пути (провайдер, публичный Wi-Fi в кафе) может прочитать, куда вы собрались. Вторая - тот, кто отвечает, видит и логирует все ваши запросы. Это просто как оно устроено по умолчанию, так что переживать не о чем.
Свой приватный резолвер решает обе проблемы :
- Вы гоните запросы к нему в зашифрованном виде - по DoH (внутри обычного HTTPS) или DoT (TLS на отдельном порту). Открытка превращается в запечатанный конверт.
- Отвечает ваш сервер, а не чужая корпорация. Что с этими запросами делать (и делать ли вообще) - решаете вы.
Грубо говоря, вы нанимаете личного швейцара: он и адреса находит, и рекламные листовки на входе отрывает, и не докладывает о ваших маршрутах никому на стороне.
Решил гнуть ту же аналогию, думаю предельно понятное сравнение с письмами.
В чём соль: зачем поднимать свой DNS
Сразу по пунктам, ради чего люди этим заморачиваются:
- Приватность. Провайдер и публичные DNS перестают видеть, куда вы ходите. Между вашим устройством и сервером - шифрованный канал.
- Блокировка рекламы и трекеров - на уровне сети. Режется ещё до загрузки, сразу на всех устройствах: телефон, ноут, телевизор, консоль. Один раз настроил - работает везде, даже там, где блокировщик не поставишь.
- Единый профиль на всё. Свои списки блокировок, свои исключения, своя статистика. Одинаково дома, на телефоне и в поездке, где вы будете им пользоваться, конечно.
- Контроль и прозрачность. Видно, кто и что запрашивает (привет, приложения, которые ночью долбятся в свою телеметрию).
Важная честность про приватность. Если ваш резолвер просто пересылает запросы дальше в Cloudflare/Quad9, то этот верхний DNS их всё равно видит (пусть и не так привязанно к вам, и по шифрованному каналу). Хотите приватность по-максимуму - надо, чтобы сервер сам резолвил с корневых серверов, без посредника. Про это ниже, в варианте с Unbound.
Кому реально надо: тем, кто не хочет светить историю посещений провайдеру; кто задолбался от рекламы на устройствах без блокировщиков; кто любит, когда инфраструктура своя и подконтрольная(очевидно, что контроль должен быть нормально настроен).
Что понадобится
Ничего экзотического:
- VPS - самый скромный. DNS почти не ест ресурсы, хватит 1 ядра и 512 МБ - 1 ГБ RAM. Важнее не мощность, а низкий пинг до вас (к резолверу устройство обращается постоянно, лишние миллисекунды множатся) и стабильность.
- Домен и поддомен под него - например,
dns.ваш-домен.ru. Заводится A-записью на IP сервера (как это делается - разбирал в статье про домены и поддомены). Именно на имя, а не голый IP: DoH/DoT без нормального домена и сертификата толком не живут, особенно на телефонах. - TLS-сертификат - бесплатный Let's Encrypt(certbot выпускает, команды ниже туда сюда). Без него шифрование не поднять.
- Полчаса времени и капелька терпения. Я думаю, что это самое важное, даже при условии, что всё достаточно легко для понимания.
Чем поднимать: три варианта
Инструментов много, разберём три реальных под разные вкусы.
| Вариант | Кому | Плюсы | Минусы |
|---|---|---|---|
| AdGuard Home | Почти всем | GUI, блокировка рекламы «из коробки», сам отдаёт DoH/DoT/DoQ | Пересылает к верхнему DNS (если не прикрутить рекурсию) |
| Technitium DNS | Любителям GUI и рекурсии | Тоже с веб-панелью, умеет и блокировать, и рекурсивно резолвить | Менее раскручен, чуть сложнее |
| Unbound + dnsdist | Пуристам | Полностью рекурсивный (максимум приватности), гибко | Всё руками, без красивой панели |
Для 90% людей ответ - AdGuard Home: ставится в одну команду, есть удобная панель, блокировка рекламы сразу, и он умеет отдавать клиентам зашифрованный DNS. С него и начнём. А кто хочет приватность по-хардкору - в конце покажу связку с Unbound(Ну вы же не пабло эскобар, че выдумывать, ставишь adg home и всё).
Ставим AdGuard Home
Официальный установщик - одна строка:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
Дальше открываете в браузере http://IP-сервера:3000 - это мастер первичной настройки. Пройдёте пару экранов (логин-пароль для панели, порты) - и AdGuard Home уже работает как DNS на порту 53.
Первым делом - верхние DNS (upstream), куда он будет пересылать запросы. Ставьте сразу шифрованные, чтобы и этот участок был закрыт. В настройках DNS впишите, например:
https://dns.quad9.net/dns-query
tls://dns.adguard-dns.com
И включите блок-листы (вкладка «Фильтры DNS» → «Чёрные списки DNS»): базовый AdGuard-фильтр уже режет рекламу и трекеры, при желании добавите свои, но думаю вряд ли есть что-то подобное.
Хотите приватность по-максимуму (рекурсия, без верхнего провайдера)? Поднимите рядом Unbound, пусть слушает
127.0.0.1:5335, и укажите его единственным upstream в AdGuard Home. Тогда сервер сам обходит корневые серверы, и никакой Cloudflare/Quad9 не видит ваши запросы. Это тот самый «хардкор-вариант», я не знаю от кого вы прячитесь, но вы ща серьезно?)
Сертификат и шифрование
Чтобы отдавать клиентам DoH/DoT, нужен сертификат на ваш поддомен. Берём бесплатный Let's Encrypt:
sudo apt update && sudo apt install -y certbot
sudo certbot certonly --standalone -d dns.ваш-домен.ru
Сертификат ляжет сюда:
/etc/letsencrypt/live/dns.ваш-домен.ru/fullchain.pem # сертификат
/etc/letsencrypt/live/dns.ваш-домен.ru/privkey.pem # ключ
Теперь в панели AdGuard Home → «Настройки шифрования»:
- Имя сервера:
dns.ваш-домен.ru - Укажите пути к
fullchain.pemиprivkey.pem. - Включите HTTPS/DoH (порт 443) и DNS-over-TLS (порт 853).
Открываем порты в файрволе:
sudo ufw allow 853/tcp # DoT
sudo ufw allow 443/tcp # DoH
И не забудьте про автопродление сертификата - иначе через 90 дней всё отвалится. Добавьте перезапуск после обновления:
sudo certbot renew --deploy-hook "systemctl restart AdGuardHome"
После этого ваши адреса подключения:
- DoT:
dns.ваш-домен.ru(порт 853) - DoH:
https://dns.ваш-домен.ru/dns-query
Ваще же просто не?) Но ток обязательно прочитайте инфу ниже, важно там
Главное: не стать открытым резолвером
Самый важный раздел, не пролистывайте. Если оставить резолвер открытым на весь интернет
(особенно порт 53 по UDP на 0.0.0.0), его быстро найдут и начнут использовать в
атаках с усилением (DNS amplification): злоумышленник шлёт мелкие запросы от чужого
имени, а ваш сервер заваливает жертву жирными ответами. Итог - жалобы на abuse и, скорее
всего, блокировка сервера хостером. Оно вам не надо, поэтому сейчас всё настроим.
Что сделать (хотя бы одно, лучше несколько):
- Ограничьте клиентов в AdGuard Home. В «Настройки DNS» → «Список доступа» пропишите разрешённые адреса/подсети, а остальным - отказ.
- Не выставляйте наружу порт 53. Пользуйтесь только DoH/DoT (443/853). Обычный DNS на 53 либо закройте файрволом, либо разрешите только со своих IP.
- Используйте ClientID в DoH/DoT. AdGuard Home умеет делать персональные адреса вида
https://dns.ваш-домен.ru/dns-query/мой-id- чужой без вашего ID не подключится.
Правило простое: наружу торчит только шифрованный резолвер, и только для своих, остальное закрыто.
Подключаем устройства
Теперь самое приятное - раскидать по устройствам. Адрес везде один и тот же, ваш.
- Android 9+ - самый простой случай. Настройки → Подключения → Приватный DNS → «Имя хоста провайдера» → впишите
dns.ваш-домен.ru. Это DoT, готово. - iOS / macOS - нужен профиль конфигурации (
.mobileconfig) с вашим DoH/DoT. AdGuard Home на вкладке «Руководство по установке» подсказывает шаги и даёт готовый профиль - ставите и всё. - Windows 10/11 - Параметры → Сеть → свойства адаптера → назначение DNS вручную + «DNS-over-HTTPS». Иногда шаблон DoH нужно зарегистрировать через
netsh- мелочь, но бывает. - Firefox (на любой ОС)/Google Chrome - Настройки → Приватность → DNS через HTTPS → «Максимальная защита» → свой URL
https://dns.ваш-домен.ru/dns-query./ Откройте Настройки → Безопасность → Найдите пункт «Использовать безопасный DNS-сервер» → Включите опцию и выберите «С другим поставщиком» → В появившемся поле введите:https://dns.ваш-домен.ru/dns-query. - Роутер - если умеет DoT/DoH, прописываете там один раз, и вся домашняя сеть автоматически ходит через ваш резолвер. Самый ленивый и приятный путь.
Проверяем, что всё работает
Быстрая проверка с любой машины. Ставим knot-dnsutils (ради утилиты kdig) и стучимся:
# DoT (порт 853)
kdig @dns.ваш-домен.ru +tls example.com
# DoH
kdig @dns.ваш-домен.ru +https example.com
Если в ответе прилетел нормальный IP и не ругается на сертификат - всё поднялось.
Дальше два бытовых теста:
- Загляните в журнал запросов AdGuard Home - там должны появляться ваши запросы в реальном времени.
- Откройте любой «DNS leak test» в браузере (с уже настроенным на устройстве резолвером): в результатах должен светиться ваш сервер, а не провайдер.
- Проверьте блокировку: зайдите на сайт с рекламой - баннеры должны отваливаться, а в журнале будут видны заблокированные домены.
Частые грабли
Собрал то, на чём ошибаются чаще всего:
Спойлер, просто перепроверяйте действия, которые вы уже делали, если что-то не работает. 95% проблем связанно именно с тем, что вы что-то упустили
- Сертификат не на то имя. Имя в сертификате и адрес, который вы вбиваете на устройстве, должны совпадать ровно (
dns.ваш-домен.ru). Иначе телефон молча откажется подключаться. - Порт закрыт. 853 и/или 443 не открыты в файрволе (или у хостера) - клиент не достучится. Проверьте
ufwи панель хостера. - Android хочет имя, а не IP. В «Приватном DNS» вводится именно хостнейм, по IP оно не заработает - это ограничение самого DoT.
- Забыли про 53 наружу. Открытый рекурсивный резолвер = будущие проблемы с abuse. Перечитайте раздел про открытый резолвер, лень ещё раз писать.
- Upstream остался обычным. Смысл теряется, если сервер сам ходит к верхнему DNS открытым текстом. Ставьте у upstream именно
https://илиtls://. - Сертификат протух. Не настроили автопродление - через 90 дней всё встанет.
certbot renewс deploy-hook снимает вопрос.
На чём поднимать
Требования к серверу тут скромные, но пара нюансов важны. Ресурсов надо мало (1 ядро, 512 МБ - 1 ГБ), а вот пинг до вас критичен: к резолверу устройство обращается перед каждым соединением, и лишние миллисекунды чувствуются на «отзывчивости» интернета в целом. Плюс нужен стабильный аптайм - упал резолвер, и без запасного DNS устройства останутся без интернета.
Поэтому берите VPS поближе к себе географически и со стабильным каналом. Например, на serv.host - низкий пинг из нужных регионов и адекватный аплинк, ровно то, что требуется резолверу. Дальше остаётся направить dns.-поддомен на IP сервера и пройти шаги выше.
Совет: на устройствах всегда держите запасной DNS на случай, если ваш сервер уйдёт на профилактику. Иначе рискуете остаться совсем без резолвинга. Банальные технческие работы хостинга могут застать вас в расплох, в неприятность, в беду, в что-нибудь ещё и т.д
Короткий итог
- Свой DoH/DoT-резолвер - это личный шифрованный DNS: провайдер и публичные сервисы перестают видеть ваши запросы, а реклама режется на всех устройствах разом.
- Проще всего - AdGuard Home: одна команда, веб-панель, блокировка из коробки, отдаёт DoH/DoT. Хотите приватность по-максимуму - добавьте рекурсивный Unbound как upstream.
- Нужны: скромный VPS с низким пингом, поддомен
dns.на его IP и бесплатный сертификат Let's Encrypt. - Обязательно закройте резолвер от чужих (список доступа / ClientID / не светить порт 53), иначе поймаете abuse, если вам так сказать не повезет(вообще, почти любые вопросы решаемы, но тем не менее)
- Устройства подключаются одним адресом: Android - «Приватный DNS», iOS/macOS - профиль, Firefox/Windows - DoH-URL, а лучше сразу на роутере.
- Всегда держите запасной DNS на случай простоя.
Полчаса работы - и у вас личный, приватный, режущий рекламу DNS, который вы полностью контролируете. Приятная штука пользуйтесь блин
Источники
Это вам на почитать, там всё на англиском, если че не понятно дайте нейронке, че вы тоже как дети, или переводчик. Ну разберетесь, бб

