
У данного поста имеется продолжение, позволяющее автоматизировать и значительно упростить весь процесс, описанный в этой записи. Располагается оно по этой ссылке.
Прочитав пост тов. 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
(IP
→ DHCP Server
→ Networks
→ %default configuretion%
→ DNS Servers
) указать первым наш маршрутизатор, и опционально выполнить перезагрузку.
После ребута и тестового прогона на Mikrotik hAP lite
спустя пару часов имеем Free Memory 6.0 MiB
, CPU Load 0..2%
(показатели “до” замерить забыл, а сейчас уже лень).
Как автоматически выполнять аналогичную по смыслу операцию без использования дополнительной машины (только средствами самого микротика) по расписанию - ещё не придумал.