mikrotik-wiki.ru
Главная
Загрузка...

Блокировка рекламы через DNS без контейнеров

RouterOS 7.xIP11 мин330 мар. 2026 г.
TelegramVK

Блокировка рекламы через DNS на MikroTik без контейнеров

Блокировка рекламы на уровне DNS — один из самых эффективных способов очистить интернет-трафик для всей локальной сети. Вместо установки расширений в каждый браузер или настройки Pi-hole/AdGuard в Docker-контейнере можно использовать встроенные средства RouterOS 7. MikroTik позволяет добавлять статические DNS-записи, использовать регулярные выражения (с RouterOS 7) и автоматизировать импорт публичных блок-листов через скрипты. В этой статье разберём три метода блокировки рекламы средствами самого роутера, сравним их с контейнерными решениями и рассмотрим типичные ошибки.

Описание

Принцип работы DNS-блокировки

Когда устройство в сети запрашивает доменное имя (например, ads.doubleclick.net), DNS-сервер MikroTik проверяет свои статические записи. Если для запрошенного домена существует запись с адресом 0.0.0.0 или 127.0.0.1, устройство получает этот «нулевой» адрес вместо реального IP рекламного сервера. Браузер пытается подключиться к 0.0.0.0, соединение мгновенно отклоняется, и рекламный баннер просто не загружается.

Преимущества DNS-блокировки на MikroTik:

  • Защита всей сети — блокировка работает для всех устройств: компьютеры, телефоны, Smart TV, IoT
  • Без дополнительного ПО — не нужен Pi-hole, AdGuard, контейнеры или отдельный сервер
  • Минимальное потребление ресурсов — DNS-кеш RouterOS работает быстро
  • Блокировка до соединения — трафик не тратится на загрузку рекламы

Ограничения:

  • Не блокирует рекламу, встроенную в контент того же домена (YouTube Ads)
  • Устройства с настроенным DoH/DoT обходят локальный DNS
  • Нет красивой статистики и dashboard, как в Pi-hole/AdGuard
  • Нет выборочной разблокировки для отдельных устройств (без дополнительных настроек)

Сколько записей выдерживает MikroTik

Количество статических DNS-записей, которые может обработать MikroTik, зависит от объёма оперативной памяти:

МодельRAMРекомендуемый лимит записей
hAP lite / hAP mini32 MB5 000 – 10 000
hAP ac²128 MB30 000 – 50 000
hAP ax², hAP ax³256 MB50 000 – 100 000
RB5009, CCR20041 GB+100 000 – 200 000

Каждая запись занимает примерно 200–300 байт. Список StevenBlack hosts содержит около 80 000 доменов, что вполне укладывается в возможности устройств с 256 MB RAM и выше.

Настройка

Предварительные требования

Убедитесь, что MikroTik работает как DNS-сервер для вашей сети. Проверьте текущую конфигурацию:

[admin@MikroTik] >
/ip/dns/print

Если allow-remote-requests не включён, активируйте его и укажите upstream DNS-серверы:

[admin@MikroTik] >
/ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8

Убедитесь, что DHCP-сервер раздаёт адрес MikroTik как DNS:

[admin@MikroTik] >
/ip/dhcp-server/network/print

В поле dns-server должен стоять IP вашего MikroTik (обычно 192.168.88.1). Если нет:

[admin@MikroTik] >
/ip/dhcp-server/network/set [find] dns-server=192.168.88.1

Метод 1: Ручное добавление DNS Static записей

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

Добавление одной записи:

[admin@MikroTik] >
/ip/dns/static/add name=ads.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=pagead2.googlesyndication.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=ad.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=googleads.g.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=www.googleadservices.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=analytics.google.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=tracking.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=mc.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=an.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=awaps.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"

Этот метод хорош для точечной блокировки, но не масштабируется для тысяч доменов. Для массовой блокировки используйте Метод 2.

Метод 2: Автоматический импорт блок-листа через скрипт

Наиболее практичный метод — автоматическая загрузка и импорт публичного блок-листа. Мы будем использовать список StevenBlack hosts (один из самых популярных и актуальных).

Шаг 1: Создание скрипта загрузки и парсинга

Создайте скрипт, который скачивает hosts-файл, парсит его и добавляет записи в DNS Static:

[admin@MikroTik] >
/system/script/add name=dns-adblock-update source={
    # Настройки
    :local listUrl "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
    :local fileName "hosts.txt"
    :local dnsComment "adblock-auto"
    :local maxEntries 80000

    :log info "AdBlock: начинаю обновление DNS-блокировки"

    # Скачиваем файл
    :do {
        /tool/fetch url=$listUrl dst-path=$fileName mode=https
    } on-error={
        :log error "AdBlock: ошибка загрузки блок-листа"
        :error "Download failed"
    }

    # Удаляем старые записи
    :log info "AdBlock: удаляю старые записи"
    :local oldEntries [/ip/dns/static/find where comment=$dnsComment]
    :if ([:len $oldEntries] > 0) do={
        /ip/dns/static/remove $oldEntries
    }

    # Читаем и парсим файл
    :local fileContent [/file/get $fileName contents]
    :local lineStart 0
    :local lineEnd 0
    :local fileLen [:len $fileContent]
    :local count 0

    :log info "AdBlock: парсинг файла, размер=$fileLen"

    :while ($lineEnd < $fileLen && $count < $maxEntries) do={
        # Ищем конец строки
        :set lineEnd [:find $fileContent "\n" $lineStart]
        :if ([:typeof $lineEnd] = "nil") do={
            :set lineEnd $fileLen
        }

        :local line [:pick $fileContent $lineStart $lineEnd]

        # Пропускаем комментарии и пустые строки
        :if ([:len $line] > 10) do={
            :if ([:pick $line 0 7] = "0.0.0.0") do={
                # Извлекаем доменное имя
                :local domain [:pick $line 8 [:len $line]]
                # Убираем возможные пробелы и \r
                :set domain [:pick $domain 0 [:find $domain "\r"]]

                :if ($domain != "0.0.0.0" && $domain != "localhost") do={
                    :do {
                        /ip/dns/static/add name=$domain address=0.0.0.0 \
                            ttl=1d comment=$dnsComment
                        :set count ($count + 1)
                    } on-error={}
                }
            }
        }
        :set lineStart ($lineEnd + 1)
    }

    # Очищаем DNS-кеш
    /ip/dns/cache/flush

    # Удаляем загруженный файл
    /file/remove $fileName

    :log info "AdBlock: обновление завершено, добавлено $count записей"
}

Шаг 2: Запуск скрипта вручную для проверки

[admin@MikroTik] >
/system/script/run dns-adblock-update

Следите за логами во время выполнения:

[admin@MikroTik] >
/log/print where topics~"script"

Выполнение скрипта может занять от 5 до 30 минут в зависимости от модели MikroTik и количества записей в списке.

Шаг 3: Настройка автоматического обновления по расписанию

Создайте задание в планировщике для ежедневного обновления (например, в 4:00 утра):

[admin@MikroTik] >
/system/scheduler/add name=dns-adblock-daily \
    start-time=04:00:00 \
    interval=1d \
    on-event="/system/script/run dns-adblock-update" \
    comment="Ежедневное обновление DNS-блокировки рекламы"

Проверьте, что задание создано:

[admin@MikroTik] >
/system/scheduler/print where name=dns-adblock-daily

Метод 3: DNS Regexp (RouterOS 7)

RouterOS 7 поддерживает регулярные выражения в DNS Static. Это позволяет блокировать целые группы доменов одним правилом, что экономит память и упрощает управление.

Блокировка по regexp:

[admin@MikroTik] >
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.doubleclick\\.net" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.googlesyndication\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.googleadservices\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*adservice.*\\.google\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.facebook\\.com\\/tr" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.yandex\\..*\\/metrika" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*tracking\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*telemetry\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.adnxs\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.adsrvr\\.org" comment="adblock-regexp"

Обратите внимание: вместо address=0.0.0.0 используется type=NXDOMAIN. Это заставляет DNS отвечать «домен не существует», что является более корректным поведением.

Важно: regexp-записи создают дополнительную нагрузку на CPU, потому что каждый DNS-запрос проверяется против всех regexp-правил. Рекомендуется использовать не более 50–100 regexp-записей. Для массовой блокировки лучше подходит Метод 2 с точными записями.

Комбинированный подход: используйте Метод 2 для основного списка (точные записи) и Метод 3 для широких паттернов (tracking, telemetry, ad-серверы).

Настройка белого списка (Whitelist)

Некоторые домены из блок-листов могут быть нужны для корректной работы сервисов. Создайте исключения через DNS Static с правильным разрешением:

[admin@MikroTik] >
# Белый список — разрешаем через upstream DNS
/ip/dns/static/add name=s.youtube.com type=FWD forward-to=1.1.1.1 comment="whitelist"
/ip/dns/static/add name=www.googletagmanager.com type=FWD forward-to=1.1.1.1 comment="whitelist"
/ip/dns/static/add name=cdn.ampproject.org type=FWD forward-to=1.1.1.1 comment="whitelist"

Записи типа FWD (forward) имеют более высокий приоритет, чем записи с address=0.0.0.0, поэтому домен из whitelist будет корректно разрешаться через указанный DNS-сервер.

Для управления whitelist удобно помечать записи комментарием whitelist и управлять ими отдельно:

[admin@MikroTik] >
# Посмотреть все исключения
/ip/dns/static/print where comment="whitelist"

# Добавить домен в whitelist
/ip/dns/static/add name=example.com type=FWD forward-to=1.1.1.1 comment="whitelist"

# Удалить домен из whitelist
/ip/dns/static/remove [find where name="example.com" comment="whitelist"]

Сравнительная таблица: DNS Static vs Pi-hole vs AdGuard Home

ПараметрDNS Static (MikroTik)Pi-hole (контейнер)AdGuard Home (контейнер)
УстановкаВстроеннаяDocker/контейнерDocker/контейнер
Web-интерфейс статистикиНетДаДа
Количество блок-листов1 (через скрипт)МножествоМножество
Regexp-фильтрыДа (ROS 7)ДаДа
DNS-over-HTTPS/TLSКлиент DoHДаДа
Нагрузка на CPUМинимальнаяСредняяСредняя
Потребление RAM20–50 MB100–200 MB100–200 MB
Whitelist по устройствамНет (без доп. настроек)Да (по group)Да (по клиентам)
Автообновление списковЧерез schedulerВстроенноеВстроенное
Скорость ответа DNSОчень быстраяБыстраяБыстрая
Подходит для слабых устройствДаНетНет

Вывод: DNS Static на MikroTik — отличный вариант для домашних и малых офисных сетей, где не нужна визуальная статистика. Для сетей с требованиями к аналитике и гибкому управлению лучше использовать Pi-hole или AdGuard Home в контейнере.

Проверка

Проверка количества добавленных записей

[admin@MikroTik] >
# Общее количество статических DNS-записей
/ip/dns/static/print count-only

# Количество записей автоблокировки
/ip/dns/static/print count-only where comment="adblock-auto"

# Количество regexp-записей
/ip/dns/static/print count-only where comment="adblock-regexp"

Проверка через nslookup

С компьютера в локальной сети выполните DNS-запрос через MikroTik:

code
nslookup ads.doubleclick.net 192.168.88.1

Ожидаемый ответ — 0.0.0.0 или NXDOMAIN. Если возвращается реальный IP рекламного сервера — блокировка не работает.

Проверка из терминала RouterOS:

routeros
:put [:resolve "ads.doubleclick.net" server=127.0.0.1]

Проверка DNS-кеша

Посмотрите, какие домены кешируются и как отвечает DNS:

[admin@MikroTik] >
/ip/dns/cache/print where name~"doubleclick"

Очистка кеша после изменений:

[admin@MikroTik] >
/ip/dns/cache/flush

Проверка логов

[admin@MikroTik] >
/log/print where message~"AdBlock"

Мониторинг потребления ресурсов

Следите за использованием RAM после импорта блок-листа:

[admin@MikroTik] >
/system/resource/print

Обратите внимание на поля free-memory и total-memory. Если свободная память упала ниже 20% от общей, уменьшите maxEntries в скрипте.

Блокировка обхода DNS через DoH/DoT

Продвинутые браузеры (Chrome, Firefox) и некоторые приложения используют DNS-over-HTTPS (DoH) для обхода локального DNS. Это полностью нейтрализует нашу DNS-блокировку. Решение — заблокировать известные DoH-серверы на firewall:

[admin@MikroTik] >
# Создаём address-list с DoH-серверами
/ip/firewall/address-list
add list=doh-servers address=dns.google comment="Google DoH"
add list=doh-servers address=dns.cloudflare.com comment="Cloudflare DoH"
add list=doh-servers address=1.1.1.1 comment="Cloudflare DoH"
add list=doh-servers address=1.0.0.1 comment="Cloudflare DoH"
add list=doh-servers address=8.8.8.8 comment="Google DoH"
add list=doh-servers address=8.8.4.4 comment="Google DoH"
add list=doh-servers address=9.9.9.9 comment="Quad9 DoH"
add list=doh-servers address=149.112.112.112 comment="Quad9 DoH"
add list=doh-servers address=208.67.222.222 comment="OpenDNS DoH"
add list=doh-servers address=208.67.220.220 comment="OpenDNS DoH"

Теперь блокируем HTTPS-трафик к этим серверам (порт 443):

[admin@MikroTik] >
/ip/firewall/filter/add chain=forward \
    dst-address-list=doh-servers \
    dst-port=443 protocol=tcp \
    src-address=192.168.88.0/24 \
    action=reject reject-with=tcp-reset \
    comment="Block DoH bypass" \
    place-before=0

Дополнительно перенаправляем все DNS-запросы (порт 53) на MikroTik, чтобы устройства не могли использовать альтернативные DNS-серверы:

[admin@MikroTik] >
/ip/firewall/nat/add chain=dstnat \
    protocol=udp dst-port=53 \
    src-address=192.168.88.0/24 \
    dst-address=!192.168.88.1 \
    action=redirect to-ports=53 \
    comment="Force DNS through MikroTik"

/ip/firewall/nat/add chain=dstnat \
    protocol=tcp dst-port=53 \
    src-address=192.168.88.0/24 \
    dst-address=!192.168.88.1 \
    action=redirect to-ports=53 \
    comment="Force DNS through MikroTik (TCP)"

Оптимизация производительности

При большом количестве DNS Static записей (50K+) стоит оптимизировать работу DNS:

[admin@MikroTik] >
# Увеличиваем размер DNS-кеша
/ip/dns/set cache-size=8192

# Устанавливаем разумный cache-max-ttl
/ip/dns/set cache-max-ttl=1d

Если роутер начинает тормозить после импорта полного списка, уменьшите количество записей. Можно использовать «облегчённую» версию списка StevenBlack (без порнографии и азартных игр), которая содержит около 40 000 доменов.

Типичные ошибки

1. DNS-блокировка не работает — устройства используют DoH

Современные браузеры (Firefox, Chrome) по умолчанию могут использовать DNS-over-HTTPS, полностью обходя локальный DNS MikroTik. Решение описано выше — блокировка DoH-серверов на firewall и принудительный redirect DNS. В Firefox также можно отключить DoH через about:confignetwork.trr.mode = 5.

2. Скрипт не работает — ошибка при загрузке файла

Частая причина — отсутствие корректных сертификатов для HTTPS. Проверьте:

[admin@MikroTik] >
/certificate/print

Если сертификатов нет, установите пакет корневых сертификатов:

[admin@MikroTik] >
/tool/fetch url="https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem" dst-path=DigiCert.pem
/certificate/import file-name=DigiCert.pem passphrase=""

Или используйте режим check-certificate=no в /tool/fetch (не рекомендуется для production).

3. Роутер зависает при импорте большого списка

Скрипт обрабатывает hosts-файл последовательно, и на слабых устройствах это может занять очень много времени. Решения:

  • Уменьшите maxEntries до 20 000–30 000
  • Запускайте скрипт ночью, когда нагрузка на сеть минимальна
  • Используйте предварительно подготовленный RSC-файл вместо парсинга на роутере

4. Заблокированы нужные сайты

Некоторые блок-листы могут содержать домены, нужные для работы сервисов (авторизация, CDN, API). Признаки: не работает авторизация в приложении, не загружаются страницы. Решение — добавьте домен в whitelist (описано выше) и проверьте через nslookup.

5. DNS-кеш возвращает старые записи после обновления списка

После обновления блок-листа обязательно очищайте DNS-кеш:

[admin@MikroTik] >
/ip/dns/cache/flush

Скрипт из Метода 2 делает это автоматически, но если вы добавляете записи вручную — не забывайте про flush.

6. Двойные записи при повторном запуске скрипта

Если скрипт не удаляет старые записи перед добавлением новых, в DNS Static накопятся дубликаты. Скрипт из Метода 2 использует комментарий adblock-auto для маркировки записей и удаляет их перед импортом. Если вы модифицируете скрипт, сохраните эту логику.

7. Всё работает, но реклама всё равно видна

DNS-блокировка не работает против:

  • Рекламы, загружаемой с основного домена сайта (YouTube Ads, Twitch Ads)
  • Рекламы в мобильных приложениях, использующих жёстко прописанные IP
  • Нативной рекламы и спонсорского контента
  • Рекламы через WebSocket или другие протоколы

Для полноценной блокировки рекомендуется комбинировать DNS-блокировку на MikroTik с расширениями в браузере (uBlock Origin).

8. Ошибка «not enough memory» при добавлении записей

Роутер исчерпал оперативную память. Немедленно уменьшите список:

[admin@MikroTik] >
# Удалить все записи автоблокировки
/ip/dns/static/remove [find where comment="adblock-auto"]

# Очистить кеш
/ip/dns/cache/flush

После освобождения памяти пересоздайте скрипт с меньшим значением maxEntries.

Заключение

DNS-блокировка рекламы на MikroTik без контейнеров — рабочее и ресурсоэффективное решение для домашних и малых корпоративных сетей. Метод 2 (автоимпорт StevenBlack) покрывает большинство рекламных и трекерных доменов, а regexp-правила из Метода 3 дополняют защиту широкими паттернами. Не забывайте блокировать обход через DoH и регулярно обновлять блок-листы через планировщик. Для сетей, где нужна детальная статистика и управление по устройствам, рассмотрите Pi-hole или AdGuard Home в контейнере MikroTik — но это уже тема для отдельной статьи.

[admin@MikroTik] >
/ip/dns/print
/ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8
/ip/dhcp-server/network/print
/ip/dhcp-server/network/set [find] dns-server=192.168.88.1
/ip/dns/static/add name=ads.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=pagead2.googlesyndication.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=ad.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=googleads.g.doubleclick.net address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=www.googleadservices.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=analytics.google.com address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=tracking.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=mc.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=an.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/ip/dns/static/add name=awaps.yandex.ru address=0.0.0.0 ttl=1d comment="adblock"
/system/script/add name=dns-adblock-update source={
    # Настройки
    :local listUrl "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
    :local fileName "hosts.txt"
    :local dnsComment "adblock-auto"
    :local maxEntries 80000

    :log info "AdBlock: начинаю обновление DNS-блокировки"

    # Скачиваем файл
    :do {
        /tool/fetch url=$listUrl dst-path=$fileName mode=https
    } on-error={
        :log error "AdBlock: ошибка загрузки блок-листа"
        :error "Download failed"
    }

    # Удаляем старые записи
    :log info "AdBlock: удаляю старые записи"
    :local oldEntries [/ip/dns/static/find where comment=$dnsComment]
    :if ([:len $oldEntries] > 0) do={
        /ip/dns/static/remove $oldEntries
    }

    # Читаем и парсим файл
    :local fileContent [/file/get $fileName contents]
    :local lineStart 0
    :local lineEnd 0
    :local fileLen [:len $fileContent]
    :local count 0

    :log info "AdBlock: парсинг файла, размер=$fileLen"

    :while ($lineEnd < $fileLen && $count < $maxEntries) do={
        # Ищем конец строки
        :set lineEnd [:find $fileContent "\n" $lineStart]
        :if ([:typeof $lineEnd] = "nil") do={
            :set lineEnd $fileLen
        }

        :local line [:pick $fileContent $lineStart $lineEnd]

        # Пропускаем комментарии и пустые строки
        :if ([:len $line] > 10) do={
            :if ([:pick $line 0 7] = "0.0.0.0") do={
                # Извлекаем доменное имя
                :local domain [:pick $line 8 [:len $line]]
                # Убираем возможные пробелы и \r
                :set domain [:pick $domain 0 [:find $domain "\r"]]

                :if ($domain != "0.0.0.0" && $domain != "localhost") do={
                    :do {
                        /ip/dns/static/add name=$domain address=0.0.0.0 \
                            ttl=1d comment=$dnsComment
                        :set count ($count + 1)
                    } on-error={}
                }
            }
        }
        :set lineStart ($lineEnd + 1)
    }

    # Очищаем DNS-кеш
    /ip/dns/cache/flush

    # Удаляем загруженный файл
    /file/remove $fileName

    :log info "AdBlock: обновление завершено, добавлено $count записей"
}
/system/script/run dns-adblock-update
/log/print where topics~"script"
/system/scheduler/add name=dns-adblock-daily \
    start-time=04:00:00 \
    interval=1d \
    on-event="/system/script/run dns-adblock-update" \
    comment="Ежедневное обновление DNS-блокировки рекламы"
/system/scheduler/print where name=dns-adblock-daily
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.doubleclick\\.net" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.googlesyndication\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.googleadservices\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*adservice.*\\.google\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.facebook\\.com\\/tr" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.yandex\\..*\\/metrika" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*tracking\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*telemetry\\..*" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.adnxs\\.com" comment="adblock-regexp"
/ip/dns/static/add type=NXDOMAIN regexp=".*\\.adsrvr\\.org" comment="adblock-regexp"
# Белый список — разрешаем через upstream DNS
/ip/dns/static/add name=s.youtube.com type=FWD forward-to=1.1.1.1 comment="whitelist"
/ip/dns/static/add name=www.googletagmanager.com type=FWD forward-to=1.1.1.1 comment="whitelist"
/ip/dns/static/add name=cdn.ampproject.org type=FWD forward-to=1.1.1.1 comment="whitelist"
# Посмотреть все исключения
/ip/dns/static/print where comment="whitelist"

# Добавить домен в whitelist
/ip/dns/static/add name=example.com type=FWD forward-to=1.1.1.1 comment="whitelist"

# Удалить домен из whitelist
/ip/dns/static/remove [find where name="example.com" comment="whitelist"]
# Общее количество статических DNS-записей
/ip/dns/static/print count-only

# Количество записей автоблокировки
/ip/dns/static/print count-only where comment="adblock-auto"

# Количество regexp-записей
/ip/dns/static/print count-only where comment="adblock-regexp"
nslookup ads.doubleclick.net 192.168.88.1
:put [:resolve "ads.doubleclick.net" server=127.0.0.1]
/ip/dns/cache/print where name~"doubleclick"
/ip/dns/cache/flush
/log/print where message~"AdBlock"
/system/resource/print
# Создаём address-list с DoH-серверами
/ip/firewall/address-list
add list=doh-servers address=dns.google comment="Google DoH"
add list=doh-servers address=dns.cloudflare.com comment="Cloudflare DoH"
add list=doh-servers address=1.1.1.1 comment="Cloudflare DoH"
add list=doh-servers address=1.0.0.1 comment="Cloudflare DoH"
add list=doh-servers address=8.8.8.8 comment="Google DoH"
add list=doh-servers address=8.8.4.4 comment="Google DoH"
add list=doh-servers address=9.9.9.9 comment="Quad9 DoH"
add list=doh-servers address=149.112.112.112 comment="Quad9 DoH"
add list=doh-servers address=208.67.222.222 comment="OpenDNS DoH"
add list=doh-servers address=208.67.220.220 comment="OpenDNS DoH"
/ip/firewall/filter/add chain=forward \
    dst-address-list=doh-servers \
    dst-port=443 protocol=tcp \
    src-address=192.168.88.0/24 \
    action=reject reject-with=tcp-reset \
    comment="Block DoH bypass" \
    place-before=0
/ip/firewall/nat/add chain=dstnat \
    protocol=udp dst-port=53 \
    src-address=192.168.88.0/24 \
    dst-address=!192.168.88.1 \
    action=redirect to-ports=53 \
    comment="Force DNS through MikroTik"

/ip/firewall/nat/add chain=dstnat \
    protocol=tcp dst-port=53 \
    src-address=192.168.88.0/24 \
    dst-address=!192.168.88.1 \
    action=redirect to-ports=53 \
    comment="Force DNS through MikroTik (TCP)"
# Увеличиваем размер DNS-кеша
/ip/dns/set cache-size=8192

# Устанавливаем разумный cache-max-ttl
/ip/dns/set cache-max-ttl=1d
/certificate/print
/tool/fetch url="https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem" dst-path=DigiCert.pem
/certificate/import file-name=DigiCert.pem passphrase=""
/ip/dns/cache/flush
# Удалить все записи автоблокировки
/ip/dns/static/remove [find where comment="adblock-auto"]

# Очистить кеш
/ip/dns/cache/flush
IP / Блокировка рекламы через DNS без контейнеров