в Mikrotik

У данного поста имеется продолжение, позволяющее автоматизировать и значительно упростить весь процесс, описанный в этой записи. Располагается оно по этой ссылке.

Прочитав пост тов. 4aba о том, как с помощью dnsmasq на прошитом роутере можно вполне успешно резать рекламные баннеры на всех устройствах, которые подключены к нашей точке доступа возник резонный вопрос — а можно ли реализовать аналогичное на маршрутизаторе Mikrotik hAP lite? Железка довольно таки достойная (650MHz @ RAM 32 Mb), но у нас нет полноценного linux-шелла на ней. Оказывается — можно, и результате было реализовано довольно простое, но эффективное решение.

Пришлось пойти немного другим путем, а именно — прописать статичные DNS маршруты, которые при запросе «рекламного домена» переадресовывали наш запрос на 127.0.0.1.

Списки «рекламных доменов» мы возьмем из открытых источников, таких как http://pgl.yoyo.org/adservers/ и https://adaway.org/hosts.txt (с легкостью можно изменить на любые другие), приведем их в подобающий вид и оформим в виде скрипта для нашего Mikrotik-а, чтоб с помощью одной команды все их ему и «скормить».

Получаем списки

Для выполнения этой задачи мы будем использовать linux-шелл. Скачиваем списки, и аккуратно складываем их под именами ./hosts_list.1, ./hosts_list.2 и т.д.:

$ src=('http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext' 'https://adaway.org/hosts.txt'); i=0; for file in ${src[*]}; do i=$((i+1)); wget --no-check-certificate -O "./hosts_list.$i" "$file"; done;

Приводим их в корректный для импорта формат

Грепаем всё что начинается на 127.0.0.1 , удаляем комментарии, оставляем только имена доменов, убираем дубликаты, убираем пустые строки, и оформляем каждый домен в виде команды для импорта:

$ in="./hosts_list.*" && out="./adblock_dns.rsc" && host='127.0.0.1'; echo "/ip dns static" > $out && grep '127.0.0.1 ' $in | grep -v '^#' | cut -d' ' -f 2 | sort -u | grep . | sed "s/^/add address=$host name=/" >> $out && rm -f $in; wc -l $out;

В итоге мы должны увидеть что то в духе 2803 ./adblock_dns.rsc, для достоверности проверим содержимое:

$ head ./adblock_dns.rsc
/ip dns static
add address=127.0.0.1 name=101com.com
add address=127.0.0.1 name=101order.com
add address=127.0.0.1 name=123found.com
add address=127.0.0.1 name=123pagerank.com
add address=127.0.0.1 name=180hits.de
add address=127.0.0.1 name=180searchassistant.com
add address=127.0.0.1 name=1x1rank.com
add address=127.0.0.1 name=207.net
add address=127.0.0.1 name=247media.com

Внедряем маршруты

Полученный файл adblock_dns.rsc заливаем по ftp на железку, и в её терминале выполняем:

# грохаем все имеющиеся записи в таблице статических DNS маршрутов
[[email protected]] > /ip dns static remove [/ip dns static find]
# Импортируем загруженный файл
[[email protected]] > /import adblock_dns.rsc
# Убираем за собой
[[email protected]] > /file remove adblock_dns.rsc

Итого у нас 2802 статических маршрута на loopback в таблице (эмпирически доказано что при импортировании ~5500 записей — железка встает почти колом).

Остается лишь в настройках DHCP (IPDHCP ServerNetworks%default configuretion%DNS Servers) указать первым наш маршрутизатор, и опционально выполнить перезагрузку.

После ребута и тестового прогона на Mikrotik hAP lite спустя пару часов имеем Free Memory 6.0 MiB, CPU Load 0..2% (показатели «до» замерить забыл, а сейчас уже лень).

Как автоматически выполнять аналогичную по смыслу операцию без использования дополнительной машины (только средствами самого микротика) по расписанию — ещё не придумал.

  1. Добрый день! По поводу «не использовать другую машину» вижу два способа —
    1) Использовать что-то наподобие SkyDNS
    2) Использовать функционал MetaRouter на котором и обрабатывать получение списка адресов :)

    • Категорически приветствую!

      1. Есть ещё и тот же бесплатный rejector.ru (правда, в его соответствии реалиям уже сильно сомневаюсь)
      2. Для такой задачки юзать MetaRouter? Не треснет, не? :)
      • Для «домашнего» пользования вполне и скайднс подходит.

        Да чего ему треснуть то? ))) У меня вообще в нём трансмишен поднят был :)

        • Какая борда для этого использовалась? Расскажи чуть-чуть поподробнее в целом о том как и на чем развернул, будь любезен :)

          • RB2011UAS-2HnD-IN на хабре был пост по поводу как самому собрать образ. Сливалось на усб-хард подключенный к микротику.

        • Первый, к сожалению, на уровне прозрачного прокси (это решение только для http трафика), а со вторым видимо зря не стал разбираться :)

Комментирование наглухо закрыто