Вот появилась такая необходимость - нужен 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 и радоваться жизни.
