0

Mikrotik: блокируем рекламу с помощью StopAD

07.02.2024

Живет эта полезная штука здесь: https://stopad.kplus.pro/

Основная идея проста: загружать список неприемлемых ресурсов Интернета (реклама, телеметрия и прочее говно) на Mikrotik в список статических адресов DNS. Эдакий упрощенный вариант (без красивых графиков) клевой штуки PiHole: https://pi-hole.net/

Списки для блокировки:

https://firebog.net/

Убер-список на 1.4млн:

https://raw.githubusercontent.com/CamelCase11/UnifiedHosts/master/hosts.all

Внимание

Добавление большого числа блокируемых хостов может серьезно притормозить Mikrotik!

Скрипт для маршрутизатора – для генерации следует заполнить поля на сайте https://stopad.kplus.pro/ и получаете «все в одном».

## StopAD - Script for blocking advertisements, based on your defined hosts files
## For changing any parameters, please, use this link: https://stopad.kplus.pro/
##
## @github    <https://github.com/tarampampam/mikrotik-hosts-parser>
## @version   2.0.2
##
## Setup this Policy for script: [X] Read [X] Write [X] Policy [X] Test

:local hostScriptUrl "https://stopad.kplus.pro/script/source?format=routeros&version=2.0.2&sources_urls=https%3A%2F%2Fcdn.rawgit.com%2Ftarampampam%2Fstatic%2Fmaster%2Fhosts%2Fblock_shit.txt,http%3A%2F%2Fwww.crazyws.fr%2FWindowsSpyBlocker%2Fhosts%2Fwin7%2Fspy.txt,http%3A%2F%2Fpgl.yoyo.org%2Fadservers%2Fserverlist.php%3Fhostformat%3Dhosts%26showintro%3D0%26mimetype%3Dplaintext&excluded_hosts=localhost";
:local scriptName "stop_ad.script";
:local backupFileName "before_stopad";
:local logPrefix "[StopAD]";

do {
  /tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=("./".$scriptName);
  :if ([:len [/file find name=$scriptName]] > 0) do={
    /system backup save name=$backupFileName;
    :delay 1s;
    :if ([:len [/file find name=($backupFileName.".backup")]] > 0) do={
      /ip dns static remove [/ip dns static find comment=ADBlock];
      /import file-name=$scriptName;
      /file remove $scriptName;
      :log info "$logPrefix AD block script imported, backup file (\"$backupFileName.backup\") created";
    } else={
      :log warning "$logPrefix Backup file not created, importing AD block script stopped";
    }
  } else={
    :log warning "$logPrefix AD block script not downloaded, script stopped";
  }
} on-error={
  :log warning "$logPrefix AD block script download FAILED";
};

Как мне всё это дело прикрутить к моему MikroTik-у?

Более чем просто — необходимо добавить (System → Scripts → Add New) указанный выше скрипт, а так же добавить задание в планировщик (System → Scheduler → Add New) для его периодического запуска.

Если если вы задали имя скрипта AutoADBlock, то в планировщике в поле On Event укажите: /system script run AutoADBlock.

Права доступа: [X] Read [X] Write [X] Policy [X] Test.

Выдача кэшируется?

В данный момент каждый запрашиваемый (внешний) ресурс кэшируется на 7200 секунд. Всё остальное — обрабатывается в реалтайме.

Какие ещё есть ограничения?

Ограничения хоть и носят больше формальный характер, но всё таки они есть:

  • Максимальное количество внешних источников — 8 (URL должен быть не более 256 символов);
  • Максимальное количество исключений — 32;
  • Максимальный размер файла на источнике — 2048 Кб. (а так же поле content_type должно соответствовать text/plain);

Применимо только к маршрутизаторам MikroTik (RouterOS)?

На данный момент — да. Но если потребуется дополнительный функционал — пишите здесь.

У меня в таблице DNS есть нужные мне ресурсы. Как быть с ними?

Так как перед импортированием скрипта потребуется уничтожить все имеющиеся маршруты. Вы можете задать служебные (ваши) маршруты предварительно и они будут включены в итоговый скрипт. Таким образом ваши маршруты будут сохранены.

Откуда источники хостов?

Мы используем открытые и обновляемые источники, указанные выше. Более того, вы можете указать свои источники (записи в которых имеют формат «%ip_address% %host_name%») доступные «извне» по протоколам: http, https, ftp.

Запускаю указанный выше скрипт и ничего не происходит. Что делать?

Попробуйте выполнить в консоли /system script print from=%имя_скрипта% и проанализировать вывод. Работоспособность скрипта была протестирована на RouterOS v6.30.2.

Я указал свой источник, но он не обрабатывается. Почему?

Указанный вами адрес должен отвечать кодом 2xx (или 3xx — но не больше двух редиректов). Если при соблюдении этих условий он всё равно не обрабатывается, пожалуйста, напиши об этом вот тут: https://github.com/tarampampam/mikrotik-hosts-parser/issues/new

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380