DNS Filter Manager: Гибкое управление сетевой фильтрацией для OpenWrt и AdGuard Home
Если у вас дома или в офисе развернута сложная сеть, вы наверняка сталкивались с задачей: как настроить разные правила фильтрации трафика для разных устройств? Например, включить строгий родительский контроль для детских гаджетов, оставить без ограничений рабочие ноутбуки и направить IoT-устройства через отдельный шлюз.
Именно для решения этой задачи был разработан DNS Filter Manager — мощный веб-инструмент для гибкого управления политиками сетевой фильтрации на основе групп устройств. Он тесно интегрируется с роутерами на OpenWrt и DNS-фильтрами (например, AdGuard Home), позволяя динамически назначать разные правила прямо на лету.
Как это работает?
Основная идея проекта — дать удобный интерфейс для управления тем, какой DNS-сервер и какие настройки получает конкретная группа устройств в вашей сети.
- Интеграция с OpenWrt: Приложение подключается к вашему роутеру по SSH и считывает список активных DHCP-клиентов.
- Группы и Теги: Вы объединяете устройства в логические группы (например, «Дети», «Работа», «Умный дом») и создаете для них теги.
- Теги как Политики: Тег — это набор правил DHCP. Вы можете использовать его, чтобы назначить группе определенный DNS-сервер. Например, в AdGuard Home можно создать разные профили с уникальными правилами блокировки, а затем просто раздавать их нужным группам через теги в DNS Filter Manager.
- Гибкость 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@example.com -k 2048
(Не забудьте заменить dfm.example.com и email@example.com на свои данные)
Шаг 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: