Настройка DNS over HTTPS (DoH) на OpenWrt

Настройка DNS over HTTPS (DoH) на OpenWrt

Приветствую!

В этой короткой инструкции расскажу, как на роутере под управлением OpenWrt настроить разрешение имен (DNS) по зашифрованному протоколу HTTPS, он же DNS over HTTPS (DoH).

Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.

Использование данной технологии позволяет повысить уровень конфиденциальности, а также защититься от «подмены» ответов снижая риск атак типа DNS spoofing.

Предисловие

DNS over HTTPS (DoH) — как понятно из названия, это технология, при которой DNS-запросы (для получения IP-адреса по доменному имени) передаются через зашифрованный HTTPS-протокол вместо обычного незашифрованного DNS.

В прошивке OpenWrt работа DoH реализуется с помощью специального сервиса-прокси — https-dns-proxy. Принцип работы прост: DNS запросы от клиентов как обычно принимает локальный DNS сервер роутера — dnsmasq, после чего они перенаправляются в https-dns-proxy, который шифрует их и уже далее передает на внешний сервер с поддержкой DoH, например Google.

Ниже представлена упрощенная визуальная схема работы DoH в OpenWrt:

При настройке DoH на роутере все подключённые устройства автоматически начинают использовать его, за исключением случаев, когда на самих устройствах явно указаны собственные настройки DNS.

Перед началом любой работы с OpenWrt необходимо сделать резервную копию текущей конфигурации роутера и знать, как из нее восстановиться: (инструкция под спойлером):

Бэкап конфигурации роутера

Как и множество других операций, бэкап в OpenWrt можно сделать двумя способами: с помощью консоли (SSH)🖥️ и веб интерфейса (LUCI)🌐.

Очевидно, что хранить бэкапы нужно не на самом роутере. Ниже представлена команда бэкапа конфига OpenWrt с помощью консоли:

☝️Подключение к консоли роутера по SSH выполняется под учетной записью root и паролем, с которым вы подключаетесь к Web GUI.

ssh root@openwrt.lan 'sysupgrade --create-backup -' | cat > ./backup.tar.gz

💡Данная команда с помощью sysupgrade создает архив tar и передает его содержимое через механизм перенапрвления потоков локальной команде cat, которая в свою очередь сохраняет полученный вывод в файл с именем ./backup.tar.gz в текущей директории на вашем компьютере.

Восстановление из бэкапа рекомендуется выполнять с последующим перезапуском роутера.

В случае такой необходимости выполните команды:

cat ./backup.tar.gz | ssh root@openwrt.lan 'sysupgrade --restore-backup -'

ssh root@openwrt.lan reboot

💡Тут аналогичным образом команда cat передает содержимое архива backup.tar.gz на ввод удаленной команде sysupgrade, которая выполняет восстановление конфигурации.

Также удобно делать и восстанавливать бэкап через графический интерфейс роутера. Раздел: System — Backup / FLash firmware — [Generate archive | Upload archive]

Хорошо, с бэкапом и восстановлением разобрались. Приступаем к внесению изменений в конфигурацию.

Настройка DoH в консоли

Подключаемся к роутеру по SSH:

ssh root@openwrt.lan

Устанавливаем прокси:

opkg update

opkg install https-dns-proxy

После установки сервис готов и уже работает. Проверяем:

netstat -uln

pgrep -af https-dns-proxy

Вывод должен быть примерно такой:

udp        0      0 127.0.0.1:53            0.0.0.0:*
udp        0      0 127.0.0.1:5053          0.0.0.0:*

6542 /usr/sbin/https-dns-proxy -r https://dns.google/dns-query -a 127.0.0.1 -p 5053 -b 8.8.8.8,8.8.4.4 -4 -u nobody -g nogroup

💡Конфиг прокси хранится по пути /etc/config/https-dns-proxy.

Из коробки https-dns-proxy уже настроен на использование DNS серверов Cloudflare и Google.

Ниже покажу, как изменить дефолтные настройки на свои, возможно у вас есть свой локальный DNS сервер с поддержкой DoH. Но сперва вам необходимо определиться с DNS провайдерами. В своём примере я буду использовать адрес гугла.

Список публичных можете посмотреть на википедии: DoH provider.

Очищаем текущую конфигурацию сервиса https-dns-proxy:

while uci -q delete https-dns-proxy.@https-dns-proxy[0]; do :; done

И заново наполняем своими значениями:

uci set https-dns-proxy.dns="https-dns-proxy"
uci set https-dns-proxy.dns.bootstrap_dns="8.8.8.8,8.8.4.4"
uci set https-dns-proxy.dns.resolver_url="https://dns.google/dns-query"
uci set https-dns-proxy.dns.listen_addr="127.0.0.1"
uci set https-dns-proxy.dns.listen_port="5053"
uci set https-dns-proxy.dns.user="nobody"
uci set https-dns-proxy.dns.group="nogroup"

Сохраняем изменения и перезапускаем прокси:

uci commit https-dns-proxy

service https-dns-proxy restart

Готово. Можете переходить к пункту проверки работы DoH.

Настройка DoH в веб интерфейсе

Установить и настроить DoH в OpenWrt можно и с помощью веб GUI.

Переходим по адресу роутера в браузере, чаще всего это 192.168.1.1.

Далее идём в раздел System — Software и устанавливаем пакет luci-app-https-dns-proxy:

Сервис имеет рабочие настройки из коробки. При необходимости их изменения переходим в раздел Services — HTTPS DNS Proxy и настраиваем его в соответствии со своими предпочтениями:

После чего не забудьте сохранить и применить изменения.

Проверки работы DNS over HTTPS

На роутере устанавливаем утилиту tcpdump:

opkg install tcpdump

Запускаем с ее помощью прослушивание трафика, например, для хоста 8.8.8.8 и HTTPS порта 443:

tcpdump -i any host 8.8.8.8 and port 443

Параллельно в терминале клиента, подключенного к роутеру, например Linux, резолвим любой домен:

nslookup r4ven.me

В выводе tcpdump на роутере вы должны увидеть подобное:

15:47:32.414726 eth0  Out IP 12.34.56.78.58458 > dns.google.443: Flags [P.], seq 452:562, ack 1107, win 1002, options [nop,nop,TS val 2274319017 ecr 2648832844], length 110
15:47:32.456023 wan   In  IP dns.google.443 > 12.34.56.78.58458: Flags [P.], seq 1312:1350, ack 562, win 1050, options [nop,nop,TS val 2648832889 ecr 2274319017], length 38

Ну и т.к. передача данных шифруется с помощью HTTPS сами DNS запросы/ответы в выводе вы не увидите, в отличие от обычного DNS.

В используемых источниках в конце статьи есть ссылки на онлайн ресурсы для публичной проверки работы вашего DNS.

Нет, это не реклама, это Райан Гослинг😅

Не забывайте про нашу телегу📱и чат💬
Всех благ✌️

That should be it. If not, check the logs 🙂

Используемые материалы

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии