Блокировка рекламы через DNS без контейнеров
Блокировка рекламы через 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 mini | 32 MB | 5 000 – 10 000 |
| hAP ac² | 128 MB | 30 000 – 50 000 |
| hAP ax², hAP ax³ | 256 MB | 50 000 – 100 000 |
| RB5009, CCR2004 | 1 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 | Минимальная | Средняя | Средняя |
| Потребление RAM | 20–50 MB | 100–200 MB | 100–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:
codenslookup 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:config → network.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 — но это уже тема для отдельной статьи.
/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