Если у вас дома или в офисе развернута сложная сеть, вы наверняка сталкивались с задачей: как настроить разные правила фильтрации трафика для разных устройств? Например, включить строгий родительский контроль для детских гаджетов, оставить без ограничений рабочие ноутбуки и направить IoT-устройства через отдельный шлюз.

Именно для решения этой задачи был разработан DNS Filter Manager — мощный веб-инструмент для гибкого управления политиками сетевой фильтрации на основе групп устройств. Он тесно интегрируется с роутерами на OpenWrt и DNS-фильтрами (например, AdGuard Home), позволяя динамически назначать разные правила прямо на лету.


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

Основная идея проекта — дать удобный интерфейс для управления тем, какой DNS-сервер и какие настройки получает конкретная группа устройств в вашей сети.

  1. Интеграция с OpenWrt: Приложение подключается к вашему роутеру по SSH и считывает список активных DHCP-клиентов.
  2. Группы и Теги: Вы объединяете устройства в логические группы (например, «Дети», «Работа», «Умный дом») и создаете для них теги.
  3. Теги как Политики: Тег — это набор правил DHCP. Вы можете использовать его, чтобы назначить группе определенный DNS-сервер. Например, в AdGuard Home можно создать разные профили с уникальными правилами блокировки, а затем просто раздавать их нужным группам через теги в DNS Filter Manager.
  4. Гибкость DHCP: Теги умеют задавать не только DNS, но и другие DHCP-опции, а также управлять временем жизни аренды (TTL/Leasetime). Это позволяет реализовывать сложные сценарии маршрутизации и ускорять применение новых политик.

По сути, DNS Filter Manager выступает в роли центрального пульта управления вашей локальной сетью.

Основные возможности

  • Удобное управление: Создавайте группы, назначайте теги и управляйте политиками в пару кликов.
  • Двусторонняя синхронизация с OpenWrt: Автоматическое обнаружение новых устройств и импорт существующих тегов с роутера, чтобы избежать рассинхронизации.
  • Глубокая интеграция с AdGuard Home: Назначайте разные DNS-настройки отдельным группам, создавайте и редактируйте собственные списки блокировки доменов, которые мгновенно улетают в AdGuard.
  • Планировщик: Включайте и отключайте фильтрацию по расписанию (например, блокировка YouTube или игровых серверов после 22:00) или управляйте ей вручную.
  • Продвинутые политики: Настраивайте действие при отключении фильтрации (полное снятие ограничений или возврат к базовому тегу) и индивидуальный срок аренды DHCP для каждой группы для мгновенного применения правил.

Установка и запуск (Docker)

Для быстрого и безопасного развертывания инструмента мы рекомендуем использовать Docker. Ниже приведена краткая инструкция по запуску.

Шаг 1: Получение SSL-сертификата (рекомендуется)

Для безопасного доступа по HTTPS воспользуемся acme.sh, чтобы выпустить сертификат от Let's Encrypt. Убедитесь, что ваш домен (в примере dfm.example.com) направлен на IP-адрес сервера, а порт 80 открыт.

docker run --rm -it \
-v /data/acme:/acme.sh \
-p 81:80 \
neilpang/acme.sh \
--issue --standalone -d dfm.example.com --email [email protected] -k 2048

(Не забудьте заменить dfm.example.com и [email protected] на свои данные)

Шаг 2: Подготовка директорий

Создайте нужные папки и выдайте им права (UID/GID 1000):

mkdir -p /data/dns-filter-manager/{conf,lists}
chown -R 1000:1000 /data/dns-filter-manager
chown -R 1000:1000 /data/acme/dfm.example.com

Шаг 3: Запуск контейнера

Запускаем основной контейнер приложения:

docker run -d \
--name dns-filter-manager \
--restart=unless-stopped \
-e PORT=443 \
-e USE_HTTPS=1 \
-e HTTPS_CERT_FILE=/acme/fullchain.cer \
-e HTTPS_KEY_FILE=/acme/dfm.example.com.key \
-e ENCRYPTION_KEY=your-very-secret-key \
-e SESSION_SECRET_KEY=your-very-secret-key \
-v /data/acme/dfm.example.com:/acme:ro \
-v /data/dns-filter-manager/conf:/app/conf \
-v /data/dns-filter-manager/lists:/app/lists \
-p 443:443 \
zerolabnet/dns-filter-manager:latest
Важно: Обязательно замените your-very-secret-key на собственные надежные ключи для ENCRYPTION_KEY и SESSION_SECRET_KEY. Это необходимо для шифрования чувствительных данных (паролей SSH, токенов AdGuard) и безопасности сессий.

После запуска приложение будет доступно по адресу https://dfm.example.com. Пароль для первого входа сгенерируется автоматически — его можно найти в логах запущенного контейнера.

Конфигурация через переменные окружения

Вы можете тонко настроить приложение, передавая нужные переменные при запуске контейнера:

Переменная Описание По умолчанию
PORT Порт внутри контейнера 8080
USE_HTTPS Включает режим HTTPS (установите 1 для активации) 0
HTTPS_CERT_FILE Путь к сертификату SSL -
HTTPS_KEY_FILE Путь к приватному ключу -
ENCRYPTION_KEY Ключ для шифрования паролей SSH/AdGuard (генерируется)
SESSION_SECRET_KEY Ключ для подписи cookie (генерируется)

Исходный код опубликован на GitHub:

GitHub - zerolabnet/dns-filter-manager: DNS Filter Manager — это мощный веб-инструмент для гибкого управления политиками сетевой фильтрации. Он разработан для тесной интеграции с роутерами на OpenWrt и DNS-фильтрами, такими как AdGuard Home.
DNS Filter Manager — это мощный веб-инструмент для гибкого управления политиками сетевой фильтрации. Он разработан для тесной интеграции с роутерами на OpenWrt и DNS-фильтрами, такими как AdGuard H…