Вторичные DNS сервера в локальной сети

Изначально строил свой DNS следующим образом

  1. Mikrotik router: Является Рекурсивным DNS и использует несколько DNS серверов для апстрима, там же есть локальная зона для DDNS и там же есть свой аналог split dns
  2. Adguard на одноплатнике: он использует в качестве апстрим сервера роутер, у него загружаются списки блокировки рекламы и могут быть локальные настройки под конкретного клиента
  3. VRRP, который указвает на adguard если он работает и роутер в противном случае

Что это дало:

  1. DNS всегда работает, но если одноплатник отвалился, то просто перестает блокироваться реклама
  2. В микротике раньше не было встроенных списков рекламы, надо было грузить их скриптами, потом чистить, а это потребляло много ресурсов и мусорило статический список
  3. Более сложные правила блокировки, которых нет в микротике, например, переключатель режима блокировки контента для каждого клиента

С чем сейчас столкнулся:
После апгрейда сетевой лабы перенес adguard на N4000, а потом и на R7 5825U, но 2 ядра adguard все равно не теряют пакеты, adguard не вытягивает
Вот график загрузки DNS интерфейса, видно, что роутер обрабатывает от 40 до 100 DNS запросов в секунду

Adguard вроде и не грузит на 100%, но перестает отвечать на запросы, что приводит к тому, что хомлаба начинает рассыпаться (reverse proxy помечает бэкенды как неживые, часто ловлю 503 ошибку), деплой тоже не с первой попытки проходит

Сейчас рассматриваю вариант добавления списка блокировок в сам Mikrotik, чтобы закрыть полностью задачу

Думал над тем, чтобы поднять 2 инстанса adguard и синхронизировать их между собой при помощи специальной тулзы.

Но сейчас уже склоняюсь к тому, чтобы просто поднять BIND для кэширования или другие варианты.

А что сообщество может предложить для решения данной проблемы?

1 лайк

Локально стоит pihole в lxc.
На впс в Финляндии стоит pihole в контейнере микротика.
Конфиги одинаковые, меняются очень редко и синзронизируются вручную файлом teleporter.
Клиенты ходят на них напрямую как обычный нешифрованый udp внутри туннеля через обычную l3 маршрутизацию.
Дополнительно на всех микротиках весь трафик из локальной сети udp 53 принудительно перекидывается на “ближайшую” pihole. Если она недоступна - Netwatch меняет в правилах адреса на 2ю pihole (и потом сам возвращает обратно при поднятии)

Суммарно в списках 2.2м адресов, в работе не лагает, только при старте несколько секунд висит интерфейс.

А в числовом значении в секунду сколько запросов получается? На графике тысячи запросов, а это за какое время?

Я уже грешным делом подумывал поднять RouterOS в виртуалке

Там 1 столбец = 10 мин
Ни pihole, ни Dnsmasq не выдают свои значения в сек, но если пересчитать из этих графиков - получается 3-10 запросов в сек

Количество правил в списках 150 573

Вот статистика за 10 минут после запуска

При этом кучу запросов не удалось обработать

Не должно при такой загрузке лагать.
Могу предположить проблемы с апстрим днс или с файловой системой виртуалки (у меня задержка ответа поднималась до нескольких минут, когда один из ссд в raidz1 подыхал не полностью - из-за постоянных записей логов)
И опция Valiadate DNSSEC тоже ломала резолвинг (пока оно проверяло - у клиентов локально выходил таймаут запроса).

И кстати нашел запросы в секунду на pi-hole

Если я тушу Adguard, то клиенты ходят на апстрим напрямую и там проблем вообще нет, но там сейчас и нет списков блокировки, которые хочу добавить

Контейнеры оба на SSD, причем на n4000 проблемы начинались раньше, на ряженке только сейчас

Но вот думаю, а почему так много запросов?

DNS TTL нигде не занижается?
Со стороны инета не ломятся (классическая проблема на микротиках)?
Ломятся все одинаково или какой-то конкретный IP?

В моем случае такое количество запросов из-за списков хостов на микротике (400-500).
Если в эти списки попадает хост, который не резолвится в апстриме или заблочен в pihole - микротик получает nxdomain и сразу пытается резолвить заново

ИЗ 8 000 запросов больше 1000 от PVE на разыменование NFS сервера truenas, хотя TTL для этой записи 86400, что соответствует 1 дню

У меня идеи закончились.
Для эксперимента можно погасить этот инстанс с adguard и на его Ip поднять виртуалку с чистой установкой adguard/pihole.

Нечто похожее поведение у меня было с librespeed в докере.
Образ с docker registry лагал и зависал на скоростях 100-300м
Образ с ghcr.io не напрягаясь выдает 10/10г.

Ради прикола решил поставить китайский Mikrotik CHR и он завелся в 2 клика.
Не скажу, что удовлетворяет требованиям по мониторингу, но работает отлично

Микротик хорош как раз тем, что вообще все отдает через snmp.
А что не отдает - можно выполнить скрипт микротика через snmpget, там под каждый скрипт создаётся свой oid.
Только нельзя работать с переменными - саппорт сказал, что “для безопасности”.
И скрипт должен отдавать string или int значение.

У меня так собирается информация по wifi клиентам, потом отдается в виде json строки. HA по snmp получает json значение и заполняет сенсоры нужными значениями

1 лайк

Как у меня сделано

  1. на микротике скрипт с содержанием “/ip fi conn pri count-only”
  2. запрашивается snmpget 1.3.6.1.4.1.14988.1.1.18.1.1.2.9
  3. ответ приходит с int значением

Для каждого скрипта меняется 1.3.6.1.4.1.14988.1.1.XX, надо смотреть у себя через snmpwalk.

Но это уже несколько выходит за рамки данной темы.
Пока что если исходить из задачи дублирования DNS сервера, то mikrotik справляется на ура, настроил

  • ipv4 и ipv6
  • VRRP для обоих стеков
  • Списки блокировки
  • Кеширование записей на 10240 записей
1 лайк