Pi-hole и Mikrotik

Курс «Настройка оборудования MikroTik»

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Узнать подробности

Дано: есть 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