Подробный гайд с пояснениями как заблокировать доступ к сайтам OpenWRT. Блокировка работает через IP sets в OpenWRT 23.05.0 Инструкция позволяет блокировать доступ к сайтам по доменным именам на уровне маршрутизатора. В отличие от простого прописывания хостов в /etc/hosts, данный метод работает даже при использовании внешних DNS-серверов и блокирует весь трафик.
Создаём набор IP-адресов в IP set
IP set это временное хранилище IP адресов, куда будет попадать ваш заблокированный домен после его разрешения DNS.
-
Зайдите в веб-интерфейс роутера Luci
-
Перейдите в Network → Firewall → вкладка IP sets
-
Нажмите кнопку Add внизу страницы
-
Заполните поля
Name: blocksite (можно любое латиницей, но запомните) Family: IPv4 (или IPv4+IPv6, если нужно блокировать и шестую версию) Packet Field Match: dest_ip → Destination IP (блокируем трафик по IP назначения)
-
Нажмите Save.
IP set хранится в памяти роутера OpenWRT и работает очень быстро, так как это не перебор правил, а хеш-таблица. Это снижает нагрузку на процессор маршрутизатора.
Создаём правило файрвола Traffic Rule
Теперь заставим файрвол применять блокировку к нашему IP set.
-
Оставаясь в разделе Firewall, перейдите на вкладку Traffic Rules.
-
Нажмите Add внизу.
-
В открывшейся форме заполните
Name: block_sites_by_ipset название Protocol: Any блокируем и TCP, и UDP Source zone: lan откуда идёт запрос локальная сеть Destination zone: wan куда идёт запрос интернет Action: reject отправляет обратно сообщение об ошибке; можно drop тихо отбрасывает пакеты, но может вызвать таймауты
-
Перейдите на соседнюю вкладку Advanced Settings.
Найдите поле Use ipset Выберите из списка blocksite тот, что создали на шаге 1
-
Нажмите Save
rejectлучше для приложений, ведь браузер сразу поймёт, что страница недоступна.dropполезен, если вы не хотите показывать факт существования блокировки например, при борьбе с назойливыми трекерами из отдела маркетинга.
Настраиваем DNS-привязку в DHCP and DNS
Продолжаем узнавать как заблокировать доступ к сайтам OpenWRT. Чтобы доменные имена превращались в IP-адреса и попадали в наш IP set, нужно подключить DNS-сервер роутера dnsmasq.
-
Перейдите в Network → DHCP and DNS
-
Откройте вкладку IP Sets внутри этого раздела
-
Нажмите Add
-
Заполните
IP set: blocksite имя вашего набора Domain: здесь укажите домен, который хотите заблокировать Можно один домен например youtube.com Можно с маской: *.facebook.com заблокирует все поддомены Можно несколько, добавляя новые записи кнопкой Add
-
Нажмите Save & Apply
При таком подходе блокировка работает только если клиенты используют роутер как DNS-сервер. Если на компьютере прописан ручной DNS например 1.1.1.1, то обход возможен. Чтобы это предотвратить, добавьте правило в файрвол: перенаправлять весь DNS-трафик (порт 53) с LAN на сам роутер (DNAT).
Применяем изменения и проверяем
Обязательно перезагрузите роутер
через System → Reboot или просто перезапустите службы:
Проверка
-
Откройте заблокированный сайт в браузере, где должно появиться сообщение об ошибке соединения.
-
Проверьте через командную строку роутера SSH
bash ipset list blocksite
Вы увидите список IP-адресов, на которые преобразовались заблокированные домены.
Вот робот и рассказал вам как заблокировать доступ к сайтам OpenWRT. Но помните, что этот метод не блокирует сайты, которые используют технологию ECH Encrypted Client Hello или обходят DNS через DoH/DoT на стороне клиента. Для тотальной блокировки нужно также перехватывать и перенаправлять DoH-запросы, но это уже другая тема.