Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    DNS Failover

    DNS Failover

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    DNS Failover, RouterOS
     
    hsn
    Guest
    #1
    0
    26.01.2019 15:52:00
    Привет! Я использую Pihole как свой DNS-сервер и настроил RouterOS на использование DNS от Pihole — всё работает отлично. Но я хочу настроить RouterOS так, чтобы в случае, если Pihole перестанет работать, он автоматически переключался на резервный DNS (от провайдера или любой публичный типа Google). Мне не нужна балансировка нагрузки, просто резерв на случай, если Pihole упадёт, ведь он запущен внутри виртуальной машины. Иногда бывают проблемы с электричеством, иногда Windows обновляется, и рабочая станция дольше перезагружается.

    С уважением, Хассан
     
     
     
    gmx
    Guest
    #2
    0
    19.04.2019 00:42:00
    Привет, удалось ли у тебя с этим разобраться?
     
     
     
    Sob
    Guest
    #3
    0
    19.04.2019 00:57:00
    В целом, DNS-резолверы не рассчитаны на такую схему работы. Можно использовать несколько для резервирования, но при этом предполагается, что все они одинаковы, и клиент может использовать любой из них. Но это не подходит для случая, когда нужен особый резолвер, который знает то, чего не знают другие, и хочется пользоваться другими только если этот особый отказал. Не совсем надёжное, но, возможно, достаточно рабочее решение — использовать Netwatch, чтобы мониторить IP-адрес Pihole. Если он перестаёт работать — переключать системные резолверы на публичные. Если он возобновляет работу — возвращать на Pihole.
     
     
     
    whitbread
    Guest
    #4
    0
    19.04.2019 17:01:00
    Тебе нужен хороший скрипт, чтобы сделать то, что ты хочешь.
     
     
     
    mu17
    Guest
    #5
    0
    19.04.2019 22:27:00
    Я изучил функцию Netwatch https://wiki.mikrotik.com/wiki/Manual:Tools/Netwatch, и похоже, она отлично справляется с задачей! Netwatch следит за хостом с помощью пингов и запускает скрипт, если хост в сети или офлайн.

    /tool netwatch add comment="pi-hole failover" down-script="/ip dhcp-server network set 0 dns-server=""" host=192.168.88.15 up-script="/ip dhcp-server network set 0 dns-server=192.168.88.15"

    Мой pi-hole — 192.168.88.15

    если хост доступен:  
    /ip dhcp-server network set 0 dns-server=192.168.88.15  

    если недоступен, очищаем или ставим 1.1.1.1 либо 192.168.88.1:  
    /ip dhcp-server network set 0 dns-server=""

    Вот мои настройки сети DHCP.
     
     
     
    gotsprings
    Guest
    #6
    0
    20.04.2019 11:24:00
    Настройте Mikrotik так, чтобы он использовал DNS, отличный от piehole… Например, 8.8.8.8 или 1.1.1.1. Затем в вашем DHCP-сервере установите значение DNS в разделе сети на piehole или Mikrotik. Если piehole не сработает… Клиент будет спрашивать у Mikrotik.
     
     
     
    mt99
    Guest
    #7
    0
    21.04.2019 23:54:00
    Это абсолютно верно, для клиента все DNS-серверы равны, поэтому установка «вторичного» DNS-сервера работает не так, как можно было бы подумать. Я использую Pihole, который работает на Mac Mini 2010 года, и хотя я поставил новый жёсткий диск, меня беспокоила надежность. Поэтому я применяю скрипты с netwatch, чтобы настроить роутер в качестве запасного DNS, и это довольно хорошо работает. Сейчас меня нет в городе, но могу посмотреть скрипт, когда вернусь домой.
     
     
     
    mt99
    Guest
    #8
    0
    27.04.2019 00:05:00
    Все, что начинается с my_*, нужно настроить под вашу среду. Я использую роутер в качестве DNS-сервера, чтобы сохранить контроль и централизованно перенаправлять через правило NAT. Чтобы это работало максимально эффективно, я также рекомендую прописать роутер как вторичный DNS-сервер на всех клиентах. Это работает достаточно быстро, и я получаю все уведомления по почте.

    ПРИМЕЧАНИЕ: я понял, что если устройство не падает, Netwatch всегда будет запускать скрипт «Up» при любом изменении (потому что устройство всё ещё «в сети»). Мне не хочется, чтобы это происходило, если pihole не падал, поэтому я добавил проверку, что роутер действительно работает как DNS-сервер, прежде чем что-то делать.

    ПРИМЕЧАНИЕ 2: оказалось, что нельзя скриптовать изменение правил файрвола, если сначала не перебрать все правила с помощью print, или не узнать их внутренние ID и использовать их (подробнее здесь: http://forum.mikrotik.com/t/ask-modify-firewall-order-or-add-firewall-with-script/15392/6). Я обошёл это просто сделав print, но позже, когда будет время, сделаю по-честному.

    Скрипт Netwatch при падении pihole:

    # скрипт для включения backupDNS, если pihole не отвечает на пинг  
    # этот скрипт ничего не делает, если core switch тоже не в сети  

    # задаём переменные  
    :local myhost ([/system identity get name])
    :local recv my_alerts@email.com  
    :local target my_pihole;

    # запрашиваем интерфейс core switch  
    :local inetinterface "ether1"  
    :if ([/interface get [find name="$inetinterface"] running]=true) do={

    :log info "BackupDNS: Pihole упал, включаю резервный DNS"  
    # замените на ваши адреса резолверов  
    /ip dns set servers=your_resolver_IP1,your_resolver_IP2  
    :delay 2  
    :log info "BackupDNS: резолверы сменены"

    # включаем DNS-сервер  
    /ip dns set allow-remote-requests=yes  
    :delay 2  
    :log info "BackupDNS: сервер запущен"

    # предполагается, что у вас есть одно NAT-правило перенаправления и это первое в списке, меняем to-address на IP роутера  
    /ip firewall nat print; /ip firewall nat set to-addresses=your_router_IP numbers=1  
    :delay 1  
    :log info "BackupDNS: правило NAT перенаправлено"

    # уведомление по почте  
    /tool e-mail send to=$recv subject="$myhost started BackupDNS" body="В $mydate в $mytime $myhost включил BackupDNS, потому что $target не отвечает."

    } else={ :log info "BackupDNS: интерфейс core switch $inetinterface не работает, скрипт остановлен" }

    Скрипт Netwatch при восстановлении pihole:

    # скрипт для отключения резервного DNS, когда pihole снова доступен  
     
    # задаём переменные  
    :local myhost ([/system identity get name])
    :local recv my_alerts@email.com  
    :local target my_pihole;

    :if ([/ip dns get allow-remote-requests]=true) do={

    # уведомление по почте  
    /tool e-mail send to=$recv subject="$myhost stopping BackupDNS" body="В $mydate в $mytime $myhost выключает BackupDNS, так как $target снова доступен."  
    :delay 10  
    :log info "BackupDNS: Pihole в сети, выключаем резервный DNS"

    # меняем резолвер обратно на my_pihole  
    /ip dns set servers=my_pihole_IP  
    :delay 1  
    :log info "BackupDNS: pihole снова установлен как резолвер"

    # меняем NAT-правило обратно на pihole (первое в списке)  
    /ip firewall print; /ip firewall nat set to-addresses=my_pihole_IP numbers=1  
    :delay 1  
    :log info "BackupDNS: правило NAT возвращено обратно на pihole"

    # отключаем DNS-сервер и чистим кэш  
    /ip dns set allow-remote-requests=no  
    :delay 1  
    /ip dns cache flush  
    :log info "BackupDNS: DNS-сервер выключен, кэш очищен"

    } else={ :log info "BackupDNS: Pihole в сети, но роутер не выступал как DNS-сервер, скрипт остановлен" }
     
     
     
    Halfeez92
    Guest
    #9
    0
    06.05.2019 02:24:00
    Это самый простой способ, но, возможно, ты мог бы добавить еще одну строку для отключения правил NAT файрвола, которые делают dst-nat порт 53 udp/tcp на сервер pihole? Потому что некоторые из нас могут ограничивать пользователей в использовании внешних DNS-серверов, поэтому мы перенаправляем все DNS-запросы на pihole, независимо от того, какой IP они пытаются поставить.
     
     
     
    meimcounting
    Guest
    #10
    0
    28.10.2019 09:25:00
    Я так и не смог заставить netwatch срабатывать корректно из-за всех этих ограничений с разрешениями. Для моего домашнего применения проще запускать маленький скрипт раз в минуту через планировщик — работает отлично. У меня в DHCP Server > Networks > DNS Servers стоит адрес шлюза моего роутера MikroTik, чтобы клиентам не пришлось ничего подстраивать. Вот мой скрипт, может, пригодится. Можно настроить адреса fallbackDNS, ip Pi-Hole и resolve url под свои нужды.

    # задаём переменные  
    :local fallbackDNS 1.1.1.1,1.0.0.1  
    :local pihole 192.XXX.XX.XXX;  
    :local currentDNS  
    :set $currentDNS [/ip dns get servers];

    :do {  
     :put [resolve google.com server=$pihole];
     if ($currentDNS != pihole) do={  
       :log info "DNS Failover: переключение на Pi-Hole";  
       ip dns set servers $pihole  
     } else={}  
    } on-error={  
     :set $currentDNS [/ip dns get servers];
     if ($currentDNS != $fallbackDNS) do={  
       :log info "DNS Failover: переключение на FallbackDNS";  
       ip dns set servers $fallbackDNS;  
     } else={:log info "DNS Failover: Pi-Hole недоступен"}  
    }  

    # пытаемся достучаться до google через Pi-Hole  
    # если получилось и у нас сейчас другой DNS — переключаемся на Pi-Hole  
    # если получилось и мы уже на Pi-Hole — ничего не делаем  
    # если не получилось достучаться до google и мы не на FallbackDNS — переключаемся на fallback  
    # если не получилось достучаться через Pi-Hole и мы уже на fallback — логируем, что Pi-Hole недоступен
     
     
     
    zilexa
    Guest
    #11
    0
    12.04.2020 11:59:00
    Это должно работать? Потому что все остальные в этой теме пользуются скриптом... но твое решение было бы умнее, ведь не нужно пинговать свой pihole каждую минуту.
     
     
     
    mcb777
    Guest
    #12
    0
    27.05.2020 23:54:00
    Проблема с netwatch в том, что он просто пингует сервер. Сервер может быть в сети, а Pi-hole — нет. Я написал следующий скрипт и запускаю его каждую минуту. Если Pi-hole не отвечает, запрос не проходит, и выполняется код в блоке on-error. Как только Pi-hole снова работает, он устанавливается как DNS-сервер.

    :local servers [/ip dns get servers];
    :do {
       /tool fetch url="http://192.168.1.26:8082/admin/api.php?status";
       if ($servers != "192.168.1.26") do={
           /ip dns set servers=192.168.1.26;
       }
    } on-error {
       if ($servers != "208.67.220.123;208.67.222.123") do={
           /ip dns set servers=208.67.220.123,208.67.222.123;
           :log error "Pi-hole не работает, переключаюсь на OpenDNS";
       }
    }
     
     
     
    mcb777
    Guest
    #13
    0
    27.05.2020 23:55:00
    Я попробовал это, но не получилось.
     
     
     
    gotsprings
    Guest
    #14
    0
    28.05.2020 09:49:00
    Можешь сказать, где возникает проблема? Это из-за того, что песочник появляется наверху? Или что-то другое?
     
     
     
    eworm
    Guest
    #15
    0
    28.05.2020 09:59:00
    Это не сработает. Клиент будет одновременно использовать piehole и Mikrotik.
     
     
     
    mcb777
    Guest
    #16
    0
    28.05.2020 15:47:00
    Когда я останавливаю Pi-hole (DHCP сервер и DNS), переключения на DNS-серверы, указанные в /ip dns, не происходит, и ничего не разрешается.
     
     
     
    gotsprings
    Guest
    #17
    0
    29.05.2020 12:39:00
    Ваш роутер настроен на разрешение DNS-запросов?
     
     
     
    BartoszP
    Guest
    #18
    0
    29.05.2020 13:38:00
    Пожалуйста, используйте «Post replay» вместо того, чтобы цитировать все предыдущие сообщения целиком. Мы и так умеем следить за темой, нет необходимости постоянно всё цитировать.
     
     
     
    ferdytao
    Guest
    #19
    0
    15.06.2020 09:43:00
    На самом деле я использую это решение вместе со скриптом, чтобы переключаться на публичный DNS, если PiHole не работает. Интересно, можно ли настроить клиентов так, чтобы они напрямую обращались к PiHole, минуя MikroTik, чтобы ускорить запросы. Если я указываю адрес PiHole клиентам через DHCP, приходится ждать обновления аренды, чтобы адреса изменились — есть другие варианты? Может, лучше всего сделать редирект через NAT?
     
     
     
    gotsprings
    Guest
    #20
    0
    15.06.2020 13:44:00
    Хорошо... вот идея. Значит, на практике, если ваш PiHole стоит на 192.168.1.3, настройте ваш DHCP-сервер так, чтобы клиентам выдавались DNS-серверы 8.8.8.8 и 8.8.4.4. Создайте в фаерволе адресный список под названием Google:

    /ip firewall address-list  
    add address=8.8.8.8 comment="GoogleDNS" list=Google  
    add address=8.8.4.4 comment="GoogleDNS" list=Google  

    Затем настройте NAT, который будет перехватывать любые DNS-запросы, отправленные на эти два DNS-сервера, и направлять их на ваш PiHole. Комментарий для правила — “REDIRECTDNS”:

    /ip firewall nat  
    add action=dst-nat chain=dstnat comment="REDIRECTDNS" dst-address-list=Google dst-port=53 protocol=udp to-addresses=192.168.1.3  
    add action=dst-nat chain=dstnat comment="REDIRECTDNS" dst-address-list=Google dst-port=53 protocol=tcp to-addresses=192.168.1.3  

    И наконец, настройте netwatch для проверки статуса PiHole. Если PiHole не отвечает — ОТКЛЮЧАЙТЕ REDIRECTDNS. Если в порядке — ВКЛЮЧАЙТЕ REDIRECTDNS.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры