Настройка DNS over HTTPS (DoH) на OpenWrt
Приветствую!

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

Использование данной технологии позволяет повысить уровень конфиденциальности, а также защититься от «подмены» ответов снижая риск атак типа 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.

BASH
ssh root@openwrt.lan 'sysupgrade --create-backup -' | cat > ./backup.tar.gz
Нажмите, чтобы развернуть и увидеть больше

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

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

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

BASH
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:

BASH
ssh root@openwrt.lan
Нажмите, чтобы развернуть и увидеть больше

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

BASH
opkg update

opkg install https-dns-proxy
Нажмите, чтобы развернуть и увидеть больше

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

BASH
netstat -uln

pgrep -af https-dns-proxy
Нажмите, чтобы развернуть и увидеть больше

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

BASH
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:

BASH
while uci -q delete https-dns-proxy.@https-dns-proxy[0]; do :; done
Нажмите, чтобы развернуть и увидеть больше

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

BASH
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"
Нажмите, чтобы развернуть и увидеть больше

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

BASH
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:

BASH
opkg install tcpdump
Нажмите, чтобы развернуть и увидеть больше

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

BASH
tcpdump -i any host 8.8.8.8 and port 443
Нажмите, чтобы развернуть и увидеть больше

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

BASH
nslookup r4ven.me
Нажмите, чтобы развернуть и увидеть больше

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

BASH
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.

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

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

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/networking/nastroika-dns-over-https-doh-na-openwrt/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша