Дано: есть Mikrotik в качестве роутера, есть хост или ВМ с Pi-Hole на борту.
Задача: Пересылать все DNS-запросы с Mikrotik на Pi-Hole (если он работает), иначе использовать Mikrotik в качестве DNS-сервера (эдакая отказоустойчивость).
Решение #1: с интервалом в 1 минуту проверяем доступность IP-адреса сервера с Pi-Hole, если он доступен - пересылаем на него все DNS-запросы. Если нет - отключаем правило и DNS-сервером работает Mikrotik.
Решение #2: https://github.com/arkashiks/dns_healthcheck - скрипт как раз для определения работы DNS, с простой логикой: пытается раз'именовать имя и если не получается переключает на резервный DNS
Добавляем на Mikrotik правила в IP → Firewall → NAT
/ip firewall nat add chain=dstnat action=dst-nat to-addresses=192.168.8.1 protocol=tcp in-interface=bridge-local dst-port=53 log=no log-prefix="" comment="forward DNS queries to Pi-Hole" add chain=dstnat action=dst-nat to-addresses=192.168.8.1 protocol=udp in-interface=bridge-local dst-port=53 log=no log-prefix="" comment="forward DNS queries to Pi-Hole"
Необходимо обратить внимание на комментарий - именно по нему будет определяться правило
Добавляем скрипт переключения в System → Scripts
Имя скрипта: PiHole-Activator
Права скрипта: read
Код скрипта:
:local checkpihole [/ping 192.168.8.1 count=5] :if (checkpihole > 0) do={ /ip firewall nat enable [find comment="forward DNS queries to Pi-Hole" && disabled=yes]; } else={ /ip firewall nat disable [find comment="forward DNS queries to Pi-Hole"]; }
Настраиваем запуск скрипта в System → Schedule
Наименование: PiHole-Activator
Права: read, write
Интервал запуска: 1 минута
Код:
/system script run PiHole-Activator