Вот появилась такая необходимость - нужен DoH в локальной сети. Накидаю туту несколько скриптов/файлов, который самому потом нужно будет “только скопировать”.
Предыстория
Так уж случилось, что не все dns серверы умеют в DoH из коробки. В моей локальной сети я решил поднять Pi-hole, а он как-раз сам в DoH не умеет. Локальный же провайдер любит у меня заниматься DNS hijacking-ом.
Можно конечно завернуть весь свой dns трафик по порту скажем в vpn, или настроить отправку через vpn всех запросов на ip выбранных dns-провайдеров. Это решит проблему с подменой, но тут возникает небольшое неудобство: иногда (хоть и редко 🙃) хочется глянуть: подменен ли конкретный адрес у провайдера. И тут приходится думать над временными правилами в файрволе для себя, или отключением отправки всего dns трафика в vpn на время. Это немного не удобно. Да и не все сети (гостевая например) могут быть направлены в свой личный VPN.
Ну а уж глянуть разницу в DNS провайдера и своего DNS, тут вообще без вариантов.
|
|
И сразу видно - работает ли DoH и что придумал провайдер. Так что решено - далем DoH proxy-dns на ресолвере в сети.
Делать будем на примере Cloudflared proxy-dns
. Есть варианты с Unbound
, BIND
, PowerDNS
, но так уж “исторически
сложилось”.
Исходные состояние
Исходно у нас есть SBC с установленной Armbian 23.02. На него накачен Pi-hole. Это процесс мы пропустим на данный момент. Сам по себе Pi-hole не умеет отправлять и обрабатывать запросы по DoH, ему нужно помочь.
Cloudflared
У приложения Cloudflared есть свой репозиторий на гитхабе: https://github.com/cloudflare/cloudflared. Можно скачать оттуда и обновлять руками время от времени, но перейдя по нескольким ссылкам мы находим репозиторий, с инструкцией для нашего дистрибьютива (построен то он поверх Ubuntu Jammy).
Установка
Подготавливаем место для ключа-подписи репозитория:
|
|
Скачиваем ключ:
|
|
Добавляем репозиторий:
|
|
Теперь приложение Cloudflared доступно в виде пакета, которое будет обновляться централизованно через менеджер пакетов. Ставим приложение:
|
|
Проверить что приложение установлено можно командой:
|
|
Готовим конфигурацию
Создадим папку с настройками:
|
|
Внутри папки создадим файл proxy-dns
с параметрами запуска нашего proxy-dns:
|
|
Так же можно добавить параметр --address
с указанием интерфейса, на котором будет доступен proxy-dns.
В апстримах указываем ссылки для DoH понравившихся нам провайдеров, вот список для примера: https://dnsprivacy.org/public_resolvers/#dns-over-https-doh.
Настраиваем запуск в виде сервиса
Первым делом создадим отдельного пользователя без возможности залогиниться в систему (но можно и от root
запустить 🙃):
|
|
Теперь создадим systemd unit (--force
ключ нужен для создания нового файла):
|
|
И заполнит файл следующим содержимым:
|
|
Далее включаем автозапуск сервиса при старте системы (--now
запустит сервис сразу):
|
|
Проверка работы
Проверить что сервис “жив” можно командой dig
(порт 5353
был указан в конфигурационном
файле /etc/cloudflared/proxy-dns
, адрес по умолчанию 127.0.0.1
):
|
|
Финал
В итоге у нас получается DoH прокси для работы в локальной сети (на локальном компьютере). Теперь на него можно " натравить" Pi-hole и радоваться жизни.