Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

Добрый день. 

Возникла задача управления трафиком в политиках, через WEB интерфейс и без использования DNS.
И так за пару дней с помощью ИИ и чей то матери родилось следующее решение.

В архиве сам вэб интерфейс и php скрипты для бэкэнда и cron.

Из доп пакетов потребуется, nginx, php в моем случае (php8-fpm + php8-cli), SQLite3 и cron.

Для функционирования потребуется:

  1. Настраиваем связку nginx + php.
  2. В config.php прописываем: пароль от учетки, путь к файлам, в моем случае ('/opt/share/www/'), если путь другой то в php скриптах в первой строчке кода, надо тоже поменять.
  3. Создаем базу через create_db.php
  4. Если есть желание запихиваем sync_policies.php и update_route.php в крон. Если политики часто не создаете то sync_policies.php можно не прописывать в cron, а синхронизировать через WEB интерфейс.

Пользуемся. Может чо забыл не учел, кто будет повторять пишите помогу.

Принцип работы:

  1. Скрипт дергает из кинетика список политик 'http://127.0.0.1:79/rci/show/ip/policy';
  2. Для каждой политики есть своя маркировка трафика к примеру 0xffffaaa;
  3. Создается БД с политиками и доменами+информация о маршрутах;
  4. Для каждой политики в БД можно добавить запись: Домен + интерфейс + маршрут;
  5. Скрипт получает список IP для каждого домена и собирает для каждой политики свою дополнительную таблицу маршрутизации (стартовый номер отсчета можно изменить в config.php, но выше 1000 создать не дает);
  6. После чего добавляет данные таблицы к нужному маркеру.
  7. Через WEB интерфейс или по крону можно обновлять IP для доменов и перестраивать таблицы маршрутизации.

Что это все дает:

  1. Возможность маршрутизировать трафик по доменам, при этом кинетику не обязательно быть DNS сервером, перехватывать запросы и все вот это;
  2. Интеграция с политиками доступа от кинетика. Можно гибко управлять кому куда в самом кинетике. К примеру в моем варианте (скриншот 2), мне требовалось жестко прописать домен детского мира мимо КВН. Но только для одной политики.
  3. Работает с использованием штатном функционале кинетика (за исключением описанных выше пакетов), скрипт только рулит маршрутами.

P.S.

Делал для себя, если что не так не сердчайте, глюки обеспечены))

Screenshot_16.png

Screenshot_15.png

Screenshot_14.png

KDR.zip

Изменено пользователем Vinni37
Изменил описание
  • 3 месяца спустя...
Опубликовано (изменено)

UPD. Накопилось достаточно изменений. 

Что поменялось:

Безопасность, много чего пофикшено

Стабильность

  1. Вынес всю логику в lib.php, чтобы веб-интерфейс и крон-скрипты не расходились между собой (up дублировался код, где-то уже начало отличаться);
  2. Добавил busyTimeout на SQLite - крон и веб могли одновременно писать в базу и получать "database is locked";
  3. PHP warning/notice больше не ломает JSON-ответ на фронте (было такое - падало с "Unexpected token '<'" если DNS резолв где-то споткнулся);
  4. Убрал filter_var() - на минимальных сборках PHP для Entware этого расширения может не быть, падало с "undefined function".

Функционал

  1. Теперь можно добавлять не только домен, а ещё голый IP или CIDR (10.0.0.0/24) - если это IP/подсеть, DNS не резолвится, оно сразу идёт в таблицу маршрутизации как есть;
  2. Кнопки переделал: Sync policies / Check & apply (резолв + применение одним кликом, то же что крон делает) / Apply routes (на всякий случай, без резолва, просто переприменить то что есть в базе);
  3. Уведомления по-человечески - тосты с реальными цифрами (сколько политик добавилось/обновилось, сколько маршрутов применилось), вместо системных alert/confirm.

Морда
Перерисовал полностью - тёмная тема, статусы доменов через LED-индикаторы (как на самом кинетике), стало гораздо контрастнее. Заодно починил вёрстку под телефон - раньше на мобиле всё в кашу превращалось, теперь нормальные карточки, и в ландшафтной ориентации таблица не обрезается за край экрана.

В архиве теперь ещё и README с шагами установки и отдельно config.example.php - переименуйте в config.php и впишите свой пароль, реальный конфиг с паролем я из архива убрал, чтоб случайно не расшарить.

Как и в прошлый раз - тестил только на своей связке, глюки не исключены, если что не заводится - пишите, разберёмся.

screenshot_gateway_redacted.png

keenetic-dns-router.zip

Изменено пользователем Vinni37
  • 2 недели спустя...
Опубликовано

Третья версия.

Что поменялось:

Новая вкладка Routing tables

Раньше панель знала только про "свои" таблицы. Теперь отдельная вкладка показывает все таблицы маршрутизации на роутере — main/default/local, чужие политики Keenetic, и в моём случае ещё и BGP-таблица от bird (гео-маршрутизация). Для каждой — сколько маршрутов прямо сейчас, и кнопка "посмотреть содержимое" с постраничной подгрузкой и серверным поиском (фильтр реально спрашивает роутер заново, а не фильтрует уже подгруженное).

Test Route

Симулирует ip route get для IP, CIDR или домена, опционально с меткой политики. Если у кого-то тоже BusyBox ip вместо полного iproute2 — тест с политикой работать не будет (route get ... mark он не понимает), панель сама это определяет и предупреждает.

Новая вкладка Tools

Dependencies (стоит ли SQLite3/php-cli/ip-full/cron одной строкой), проверка пароля su одной кнопкой (полезно, если меняли пароль root в Keenetic и забыли обновить конфиг), какой DNS реально используется при резолве , и полноценное управление crontab прямо из браузера — просмотр/редактирование/запуск cron, без SSH.

Мастер первичной настройки

При первом открытии панели сама кидает на мастер — проверяет su/зависимости, создаёт базу по кнопке, даёт задать пароль входа прямо в браузере (один раз, дальше эта возможность сама отключается — смена уже установленного пароля так и делается через SSH, чтобы никто чужой не перехватил панель).

Стабильность — по мелочи, но набралось много

Авторизация теперь на подписанной куке вместо PHP-сессий (у части сборок PHP для Entware модуля сессий вообще нет), починил кучу мест, где su-командам не хватало PATH, путь к crontab теперь определяется автоматически, а не зашит намертво.

Как обычно — тестировал на двух своих роутерах (второй специально сносил и разворачивал с нуля). Пишите, если что не заводится.

 

Спойлер

image.thumb.png.991cca1f7ed0f40c0798d3e705a91b14.png

image.thumb.png.c607e8e5bd301a7b1ca1071e2ccfff9d.png

 

keenetic-dns-router.zip

Опубликовано (изменено)

UPD 3. Четвёртый релиз - основной упор в этот раз на новую функциональность.

Новая вкладка Clients

Список зарегистрированных на роутере устройств прямо в панели - имя, IP, MAC, политика, статус online/offline, аптайм, трафик, тип подключения (WiFi/провод) и скорость. Онлайн-клиенты отдельным блоком сверху, офлайн - снизу, с числом в каждой группе.

Самое интересное - кнопка "View connections" на каждой строке. Показывает живой снимок текущих соединений конкретного клиента (через /proc/net/nf_conntrack - отдельная утилита conntrack для этого не нужна, обычный текстовый файл). Это не история за прошлые дни (Keenetic такое не логирует), а именно "куда клиент подключён прямо сейчас":

  • Подсветка "это одна из целей" - если адрес назначения совпадает с чем-то из ваших таргетов (точный IP, CIDR, или текущий резолвленный IP домена) - зелёная полоса и метка с именем;
  • Через какую политику и таблицу маршрутизации ушло соединение - и не предположение, а по факту: метка (mark) уже есть в самом conntrack, сверяется с базой, а сама таблица дополнительно подтверждается живым ip route get - потому что метка говорит только "чья политика", а не "точно какая таблица";
  • Шлюз и интерфейс - тоже живым запросом, но только на уникальные адреса и с потолком в 15 за один просмотр, чтобы не заспамить роутер, если у клиента много разных направлений;
  • Обратный DNS - хотя бы примерное имя вместо голого IP, где оно есть. Резолвится отдельно от списка соединений и кэшируется в браузере на весь сеанс - обычный Refresh и авто-обновление не переспрашивают уже известные адреса заново, чтобы не тормозить на ровном месте;
  • Фильтр по IP и по протоколу, дедупликация одинаковых направлений, авто-обновление с выбором интервала.

Как обычно - разворачивал с нуля на своих роутерах, чтобы прогнать весь процесс.

Архив во вложении.

Clients.png

keenetic-dns-router4.zip

Изменено пользователем Vinni37
Опубликовано

Просмотр соединений в привязке к маршрутам - круто, аж захотелось глянуть, но вот из-за этого:

Цитата

Из доп пакетов потребуется, nginx, php в моем случае (php8-fpm + php8-cli), SQLite3 и cron.

  1. Настраиваем связку nginx + php.
  2. В config.php прописываем: пароль от учетки, путь к файлам, в моем случае ('/opt/share/www/'), если путь другой то в php скриптах в первой строчке кода, надо тоже поменять.
  3. Создаем базу через create_db.php
  4. Если есть желание запихиваем sync_policies.php и update_route.php в крон. Если политики часто не создаете то sync_policies.php можно не прописывать в cron, а синхронизировать через WEB интерфейс.

рука не поднимается, уж извините. Я свои домашние свистелки для роутера в последнее время делаю на go и вам советую - всё в одном бинаре, легко тестировать сразу на компе, легко собрать для роутера. Один только //go:embed чего стоит.

Опубликовано
1 час назад, qmxocynjca сказал:

Просмотр соединений в привязке к маршрутам - круто, аж захотелось глянуть, но вот из-за этого:

рука не поднимается, уж извините. Я свои домашние свистелки для роутера в последнее время делаю на go и вам советую - всё в одном бинаре, легко тестировать сразу на компе, легко собрать для роутера. Один только //go:embed чего стоит.

Тут кому что лучше. Как говориться "На вкус и цвет все фломастеры разные"

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.