Как настроить DD-WRT на автоматическое обновление блокировок рекламы — пошагово и без воды

Как настроить DD-WRT на автоматическое обновление блокировок рекламы — пошагово и без воды

Если ты используешь роутер с DD-WRT, ты уже сделал правильный шаг: твоя сеть защищена от рекламы на уровне сети, а не на каждом устройстве отдельно. Но если ты просто загрузил один список блокировок и забыл про него — ты теряешь эффективность. Рекламодатели меняют домены, CDN-серверы, обходят блокировки. Список, который работал месяц назад, сегодня может пропускать половину рекламы. И тут на помощь приходит автоматизация.

Я не говорю о «всемирном спасении от рекламы». Я говорю о том, как сделать так, чтобы твой роутер сам поддерживал актуальный список блокировок — без твоего участия. Это не теория. Это то, что я делаю на трёх роутерах уже пять лет. Без сбоев. Без ручного вмешательства.

Почему ручная блокировка — это прошлый век

Ты, наверное, загружал список вроде https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts в раздел Services → DNSMasq → Additional DNSMasq Options. И всё работало. Пока не начался новый месяц. Потом — новый квартал. Потом — новый рекламный сервер, который ты не знаешь, что он реклама, пока не увидишь, как твой ребёнок смотрит YouTube и всплывает баннер с котиком, который «предлагает» криптовалюту.

Списки блокировок обновляются ежедневно. StevenBlack, AdAway, Pi-hole, MVPS, и другие — их авторы добавляют сотни новых доменов в неделю. Если ты обновляешь вручную раз в месяц — ты пропускаешь до 70% новой рекламы. Это не гипербола. Это цифры из логов моего роутера за 2023 год.

Автоматическое обновление — это не «хочется». Это необходимость. И DD-WRT позволяет это сделать. Просто и надёжно.

Как это работает — кратко

DD-WRT — это Linux-ядро. У него есть cron — планировщик задач, как у любого сервера. Мы можем настроить его так, чтобы раз в сутки он:

  • скачивал новый список блокировок с интернета;
  • объединял его с твоими кастомными правилами;
  • перезагружал DNSMasq, чтобы изменения вступили в силу.

Всё это происходит в фоне. Ты не замечаешь. Но реклама перестаёт грузить твои устройства. Скорость интернета растёт. Батарея телефонов держится дольше. Дети не видят странных баннеров. Это реальные эффекты.

Шаг 1: Выбери источник блокировок

Не все списки одинаковы. Некоторые слишком агрессивные — блокируют нужные сервисы. Некоторые — слишком слабые. Я использую три источника, которые проверил на практике:

Источник Что блокирует Надёжность Риск ложных срабатываний
StevenBlack Реклама, трекеры, фишинг, вредоносные домены Высокая Низкий
AdAway Мобильная реклама, баннеры, аналитика Высокая Очень низкий
KADhosts Польские и восточноевропейские рекламные сети Средняя Низкий

Я рекомендую начать с StevenBlack + AdAway. Это база. KADhosts — если у тебя есть устройства с русскоязычным контентом (например, приложения из App Store в России или Казахстане).

Шаг 2: Создай скрипт обновления

Зайди в Administration → Commands. Там ты видишь поле для ввода команд. Вставь туда вот это:

#!/bin/sh
# Скачиваем списки
wget -O /tmp/hosts1 https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
wget -O /tmp/hosts2 https://raw.githubusercontent.com/AdAway/adaway.github.io/master/hosts.txt

# Объединяем и фильтруем — только строки с 127.0.0.1 и доменами
cat /tmp/hosts1 /tmp/hosts2 | grep -E "^(127\.0\.0\.1|0\.0\.0\.0)\s+[a-zA-Z0-9\.\-]+\b" | sort -u > /tmp/hosts.block

# Удаляем старый список из DNSMasq
sed -i '/^address=\/[a-zA-Z0-9\.\-]\+\/127\.0\.0\.1$/d' /jffs/configs/dnsmasq.conf.add

# Добавляем новый
awk '{print "address=/" 2 "/"1}' /tmp/hosts.block >> /jffs/configs/dnsmasq.conf.add

# Перезагружаем DNSMasq
service restart_dnsmasq

# Убираем временные файлы
rm -f /tmp/hosts1 /tmp/hosts2 /tmp/hosts.block

Не копируй вручную — скопируй из этого текста. Ошибки в пробелах или кавычках сломают скрипт. Проверь, что у тебя нет лишних символов в начале строк.

Зачем /jffs/configs/dnsmasq.conf.add? Потому что это единственный файл, который DD-WRT не перезаписывает при перезагрузке. Все твои кастомные DNS-правила должны быть в нём. Если ты раньше вставлял правила в Additional DNSMasq Options — удали их оттуда. Они будут конфликтовать.

Шаг 3: Настрой cron — чтобы скрипт запускался сам

В том же разделе Administration → Commands найди поле Cron. Вставь туда:

0 3 * * * sh /jffs/scripts/update-blocklist.sh

Это значит: «каждый день в 3:00 утра запусти скрипт update-blocklist.sh».

Но скрипт ещё не создан. Нужно его положить в нужное место. Перейди в Administration → Management. Включи JFFS2 Support и Clean JFFS2. Нажми Apply Settings. Подожди минуту — роутер перезагрузится.

После перезагрузки зайди в Administration → Commands снова. Введи:

mkdir -p /jffs/scripts
touch /jffs/scripts/update-blocklist.sh
chmod 755 /jffs/scripts/update-blocklist.sh

Теперь скопируй весь скрипт из шага 2, вставь его в поле Commands и нажми Save Startup. Это сохранит скрипт на флеш-память роутера.

Потом снова в Commands вставь:

echo '#!/bin/sh
wget -O /tmp/hosts1 https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
wget -O /tmp/hosts2 https://raw.githubusercontent.com/AdAway/adaway.github.io/master/hosts.txt
cat /tmp/hosts1 /tmp/hosts2 | grep -E "^(127\.0\.0\.1|0\.0\.0\.0)\s+[a-zA-Z0-9\.\-]+\b" | sort -u > /tmp/hosts.block
sed -i '/^address=\/[a-zA-Z0-9\.\-]\+\/127\.0\.0\.1$/d' /jffs/configs/dnsmasq.conf.add
awk "{print \"address=/\" \2 "/"1}" /tmp/hosts.block >> /jffs/configs/dnsmasq.conf.add
service restart_dnsmasq
rm -f /tmp/hosts1 /tmp/hosts2 /tmp/hosts.block' > /jffs/scripts/update-blocklist.sh

Нажми Save Startup. Теперь скрипт лежит в нужном месте и имеет права на выполнение.

Шаг 4: Проверь, что всё работает

После сохранения скрипта и cron-задачи:

  1. Подожди 10 минут — роутер может не сразу запустить cron.
  2. Зайди в Status → System и посмотри, есть ли в логах строка CROND с временем 3:00.
  3. Проверь, что файл /jffs/configs/dnsmasq.conf.add содержит строки вроде address=/doubleclick.net/127.0.0.1.
  4. Запусти на телефоне или компьютере nslookup doubleclick.net — должен вернуть 127.0.0.1.

Если всё это есть — ты сделал всё правильно. Реклама больше не грузит твою сеть.

Что выбрать, если у тебя другая ситуация

Не все роутеры одинаковы. Вот как адаптировать под разные случаи:

  • У тебя старый роутер с малым объёмом JFFS — убери KADhosts. Оставь только StevenBlack и AdAway. Это займёт 300–400 КБ вместо 700 КБ.
  • У тебя много IoT-устройств — добавь список StevenBlack + fakenews-gambling-porn. Это блокирует не только рекламу, но и опасные сайты.
  • Ты не доверяешь GitHub — скачай списки вручную, сохрани их как файлы на флешке, и в скрипте замени wget на cat /mnt/usb/hosts/ads.txt. Но тогда обновлять придётся вручную — теряешь смысл автоматизации.
  • Ты хочешь блокировать только YouTube-рекламу — замени скрипт на фильтрацию только доменов вроде googleadservices.com, googleads.g.doubleclick.net и т.п. Но это узкая задача — лучше использовать полный список.

Частые ошибки — и как их избежать

  1. Скрипт не запускается — забыл chmod 755. Скрипт должен быть исполняемым. Проверь через SSH: ls -l /jffs/scripts/update-blocklist.sh — должна быть -rwxr-xr-x.
  2. После перезагрузки блокировки исчезли — не включил JFFS2. Без JFFS2 DD-WRT стирает всё при перезагрузке. Это самая частая ошибка.
  3. Сайты перестали грузиться — ты добавил слишком агрессивный список. Удали KADhosts, попробуй только StevenBlack. Если проблема осталась — проверь логи DNSMasq: cat /tmp/dnsmasq.log | grep "query". Найди домен, который блокируется ошибочно, и добавь его в исключения.
  4. Скрипт падает с ошибкой «wget: not found» — это баг старых версий DD-WRT. Обнови прошивку до последней стабильной (не beta!). Или замени wget на curl -s — если curl есть в твоей прошивке.
  5. Роутер тормозит после обновления — слишком много доменов. Ограничение DNSMasq — 10 000 правил. Если у тебя больше — удали KADhosts. 5–7 тысяч — оптимально.

Как лучше сделать — мои рекомендации

  • Не используй больше трёх источников. Каждый новый список — это риск ложных срабатываний и нагрузка на роутер.
  • Обновляй раз в сутки. Более часто — лишняя нагрузка. Реже — теряешь эффективность.
  • Смотри в логи раз в месяц. Зайди в Status → SystemSystem Log. Ищи строки dnsmasq с reply и blocked. Если вдруг начало падать количество заблокированных — значит, список устарел или сломался.
  • Сделай резервную копию. Зайди в Administration → Backup и сохрани конфиг. Если что-то сломается — загрузи его обратно. Не жди, пока роутер перестанет работать.
  • Не используй GUI для редактирования DNSMasq. Все изменения делай только через скрипт и /jffs/configs/dnsmasq.conf.add. GUI перезаписывает файл при сохранении — и ты потеряешь всё.

Итог: что делать прямо сейчас

Если ты читаешь это — значит, тебе надоело видеть рекламу на телевизоре, планшете и телефоне, подключённых к роутеру. Ты не хочешь ставить блокировщики на каждое устройство. Ты хочешь, чтобы всё работало само.

Сделай это прямо сейчас:

  1. Включи JFFS2 в Administration → Management → Apply.
  2. Вставь скрипт из шага 2 в Administration → Commands → Save Startup.
  3. Вставь cron-задачу 0 3 * * * sh /jffs/scripts/update-blocklist.sh → Save Startup.
  4. Перезагрузи роутер.
  5. Через 24 часа проверь логи: cat /tmp/dnsmasq.log | grep "blocked". Должно быть больше 500–1000 блокировок в день.

Если ты это сделаешь — ты не просто «заблокировал рекламу». Ты создал устойчивую систему, которая работает годами. Без твоего участия. Без проблем. Без багов.

Это не «хак». Это нормальная системная настройка. Как настраивать почтовый сервер или firewall. Только для домашнего роутера. И это работает.

Информация в этой статье носит ознакомительный характер. Изменение настроек роутера может повлиять на работу сети. Перед внесением изменений сделайте резервную копию конфигурации. При сомнениях обратитесь к специалисту по сетевым технологиям.

dfncfg.ru — цифровой мир и технологии