Янв 132015
 

Никто не любит рекламу в Интернете, в том числе и я. На ПК проблема элементарно решается путём установки правильного браузера (например, Firefox) и расширения Adblock или подобного, но на различных embedded-устройствах это не всегда возможно. Хотя у Firefox для Android и есть возможность поставить Adblock, его производительность не всегда комфортна.
Хорошим решением будет прописать в файл /etc/hosts на домашнем маршрутизаторе адрес 0.0.0.0 для различных рекламных и баннерных сетей и т.д. Тогда любое устройство, подключённое к домашней сети при попытке разрешить DNS-имя хоста с рекламой, будет получать адрес 0.0.0.0 и соединение не произойдёт. Вот эти замечательные товарищи создали гигантский список нежелательных хостов (на момент написания статьи более 13000 имён!). Мы его и возьмём, а заодно напишем скрипт для еженедельного обновления (чаще не имеет смысла).

Итак, начнём. У меня Asus RT-N66U с прошивкой от Merin. Инструкция в целом сгодится для любого маршрутизатора с вменяемым Линуксом на борту.

На страничке автора есть ссылки на сжатый и несжатый файлы. Мы будем брать сжатый, чтобы не разорять автора на трафик. Ну и так веселее, да.
Создадим скрипт update_hosts.sh, который будет скачивать, распаковывать, фильтровать и складывать файл в /jffs/configs/hosts.add (в моей прошивке сюда надо складывать конфиги) и не забудем дать ему права на выполнение:

#!/bin/sh
 
wget -O /tmp/hosts.zip http://winhelp2002.mvps.org/hosts.zip
unzip -p /tmp/hosts.zip | grep -E '^0.0.0.0' | awk '{print $1 " "  $2}' > /jffs/configs/hosts.add
rm /tmp/hosts.zip

Выходной файл нужно назвать именно hosts.add для того, чтобы он не заменил существующий /etc/hosts, а добавился к нему. Поясню, почему это безопасно. Даже если кто-то взломает сайт автора и добавит что-то своё, то строка, начинающаяся с чего-либо кроме 0.0.0.0, будет отброшена, поэтому самое худшее, что может грозить в таком случае - это недоступность какого-то сервиса, но не фишинг.

Теперь добавим этот скрипт в расписание (cru - аналог crontab):

cru a "Update hosts" "15 3 * * 6 /jffs/scripts/update_hosts.sh"

Чтобы настройки созранялись после перезапуска, надо в файл /jffs/scripts/services-start добавить расписание:

cru a "reboot weekly" "0 4 * * 6 reboot"
cru a "Update hosts" "15 3 * * 6 /jffs/scripts/update_hosts.sh"

  18 комментариев to “Adblock на роутере”

  1. Привет! Подскажи установку на роутер Asus RT-N66U с родной прошивкой

    • Привет! Насчёт родной - не знаю, я её снёс сразу после покупки. Но в целом всё должно быть примерно так же. Мерлин делает свою прошивку на основе оригинальной.
      Если получится на неё поставить Entware или Optware - считай, дело в шляпе :-)

  2. прошивкf от Merina, файлик качается, распаковывается создается /jffs/configs/hosts.add, НО, в /etc/hosts не добавляются записи! Что подправить можно? Разрешения везде проверил.

    • День добрый, Diskka!
      А в hosts и не должны эти записи попасть. Посмотри лог роутера (где-то в вебморде должен быть). Там будет строчка об успешном добавлении большого количества записей.
      В hosts они видны не будут, но всё будет работать.

  3. Добрый день, у меня роутер RT-AC66U, прошивка от Мерлина. Подскажите по подробнее как это все настроить, а то максимум на что меня хватило так это на перепрошивку роутера) Заранее спасибо.

    • Добрый день, Дмитрий!
      А что именно у вас не получается? Я вроде подробно описал.

  4. http://hosts-file.net/?s=Download
    Здесь вообще кладезь всяческих фильтров. Можно скриптик поправить при желании и любой набор построить.
    Вот только вопрос - как долго jffs2 перезаписи будет сопротивляться, прежде чем не падет? Есть идея - после перезагрузки роутера делать софт-линк для hosts.add на USB-drive и последующий перезапуск dnsproxy.

    • Добрый день!
      Идея отличная, но я считаю, что при перезаписи раз в неделю время жизни jffs2 будет исчисляться многими годами.
      За ссылку особое спасибо!

  5. с 1 попытки разместить файл update-hosts удалось, но после перезагрузки он пропал, на попытку еще раз, выдает ошибку о загрузке файла, read-only filesystem, помогите, я не силен в linux, роутер Asus-RTN10PV2, прошивка ориг. других нет, кроме опенврт, но там вифи не работает

    • Странно. Может, на вашей модели роутера нет раздела, доступного на запись или оригинальная прошивка не позволяет его создать?

      • Спасибо, может можно поместить файл в другую папку?

        • Поместите в любой каталог, доступный на запись. Если есть USB-порт, то можно и на флешку.

          • Usb порта нет, нашел прошивку Merlin и поставил её, сейчас далеко от роутера

  6. Роутер RT-N66U прошивка от мерлина 378.51, но в тулсах нет вкладки Run CMD (убрана в 374.41)
    Подскажите как выполнить скрипт?

  7. Даже если на роутере блокирую youtube.com, то приложение в телевизоре все равно работает и видео показывает и рекламу. На ПК как положено все заблокировано сайт даже не открывается

    • Телевизор во-первых может использовать другой DNS-сервер (можно проверить, перекрыв ему TCP и UDP порт 53), а во-вторых он может ходить на YouTube по IP-адресу напрямую, тут останется только блокировать с помощью iptables. Надо смотреть и экспериментировать.

      • Посмотрел на роутере исходящие с телевизора. Приложение youtube ходит исключительно на сайт google по различным IP на несколько разных портов.
        Т.е. использует API гугла. Попробую запретить ip поочередно, может прокатит

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)