HydraRoute Manager

Веб-панель для управления HydraRoute Neo на роутерах Keenetic. Редактируешь списки доменов и IP в браузере — одной кнопкой всё разъезжается по роутерам. Плюс встроенный WireGuard-генератор и мастер обратного туннеля для роутеров без белого IP.

Поддержать проект: Boosty · Ozon СБП · Telegram: @Iot_andrey

Превью веб-интерфейса


Что это и зачем

HydraRoute Neo — плагин для Keenetic, который маршрутизирует трафик по доменам и IP. YouTube и Netflix — через VPN, всё остальное — напрямую. Конфиг хранится в двух файлах на роутере: domain.conf и ip.list.

Редактировать их напрямую неудобно, а если роутеров несколько — приходится делать всё вручную на каждом.

Этот проект решает проблему:

┌──────────────────────────────┐
│  Браузер → http://VPS:8000   │  ← ты работаешь здесь
└──────────────┬───────────────┘
               │
┌──────────────▼───────────────┐
│  HydraRoute Manager на VPS   │  ← этот сервис
└──────────┬──────────┬────────┘
           │ SSH      │ SSH
    ┌──────▼──┐  ┌────▼──────┐
    │Роутер 1 │  │ Роутер 2  │
    └─────────┘  └───────────┘

Что умеет:

  • Редактировать группы доменов и IP через браузер
  • Включать/выключать группы одним переключателем
  • Отправлять конфиг сразу на все роутеры одной кнопкой
  • Снимать конфиг с роутера и подставлять в редактор
  • Генерировать WireGuard VPN: сервер на VPS + клиенты на роутерах
  • Для роутеров без белого IP — мастер настройки обратного SSH-туннеля с автовосстановлением

Требования:

  • Роутер Keenetic с установленным HydraRoute Neo и Entware
  • VPS с белым IP (сюда устанавливается панель)
  • Белый IP на роутере или настроенный обратный тоннель (раздел 3)

1. Быстрая установка

Все команды выполняются на VPS.

Шаг 1 — установка

cd /opt
git clone https://github.com/andrey271192/domen_hydra.git /opt/domen-hydra
cd /opt/domen-hydra
sudo bash server/install.sh

Установщик создаст Python-окружение и зарегистрирует systemd-сервис hydra-manager.

Если видишь Unable to read current working directory — сначала выполни cd /opt, потом повтори.

Шаг 2 — настройка паролей

nano /opt/domen-hydra/server/.env

Минимум что нужно поменять:

ADMIN_PASSWORD=твой-пароль-для-панели

SSH_USER=root
SSH_PASS=keenetic

Если планируешь туннель (для роутеров без белого IP):

VPS_SSH_HOST=IP_или_домен_VPS

Шаг 3 — запуск

sudo systemctl restart hydra-manager

Шаг 4 — открой панель

http://IP_ТВОЕГО_VPS:8000

Обновление

cd /opt/domen-hydra && git pull && sudo systemctl restart hydra-manager

Удаление

curl -fsSL https://raw.githubusercontent.com/andrey271192/domen_hydra/main/server/uninstall.sh | sudo bash

2. Домены и IP

Вкладка «Конфигурация»

Карточки с группами. У каждой группы:

  • Имя — например youtube или ru-geoip
  • ПолитикаHydraRoute (через VPN), RU (локально) и т.д.
  • Список — домены или IP/CIDR, по одному на строку

Нажми «✏️» → редактируй → «💾 Сохранить».

Форматы файлов

domain.conf:

##youtube
youtube.com,youtu.be,googlevideo.com/HydraRoute

##avito
avito.ru,ozon.ru/RU

ip.list:

##geoip:ru
/RU
geoip:ru

Отправка на роутеры

  • «📡 Обновить все роутеры» — отправляет конфиг на все роутеры и делает neo restart
  • «📡 На роутер» на карточке роутера — только на один конкретный

Импорт с роутера

Вкладка «Роутеры» → «⬇ С роутера» — файлы подтянутся автоматически.

Или вручную на роутере:

cat /opt/etc/HydraRoute/domain.conf
cat /opt/etc/HydraRoute/ip.list

Автообновление на роутере

export SERVER_URL="http://IP_ТВОЕГО_VPS:8000" \
  && curl -fsSL https://raw.githubusercontent.com/andrey271192/domen_hydra/main/install_router.sh | sh

3. Обратный туннель — для роутеров без белого IP

Если провайдер выдаёт серый IP, VPS не может сам достучаться до роутера. Роутер сам открывает зашифрованное SSH-соединение на VPS, и весь обмен идёт через него.

Роутер (серый IP)  ──SSH──▶  VPS :20100
                                 │
VPS → hydra-manager ────────────▶│──▶ SSH роутера (порт 22)

Что понадобится

  • Entware на роутере (раздел 3.1)
  • VPS_SSH_HOST в .env на VPS

3.1 Установка Entware на роутер

С KeeneticOS 4.2+ — через браузер: открой 192.168.1.1/a и следуй инструкциям.

Или через SSH (логин root, пароль keenetic, порт 22):

# MT7628/MT7621 (mipsel):
opkg disk storage:/ https://bin.entware.net/mipselsf-k3.4/installer/mipsel-installer.tar.gz

# MT7622/MT7981/MT7988 (aarch64):
opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz

Дождись окончания (~2 мин), проверь: opkg update должен отработать без ошибок.

3.2 Настройка

На VPS:

nano /opt/domen-hydra/server/.env
# Добавь:
VPS_SSH_HOST=IP_или_домен_VPS
VPS_SSH_PORT=22
VPS_SSH_USER=root

sudo systemctl restart hydra-manager

В панели: Вкладка «Роутеры» → кнопка «⇄ Тоннель» напротив нужного роутера → скопируй команду → выполни на роутере (не на VPS!).

Как отличить терминал роутера от VPS:

  • Роутер: ~ # или (none) ~ #
  • VPS: root@имя-сервера:~#

Скрипт автоматически:

  1. Установит autossh через opkg
  2. Запишет SSH-ключ
  3. Создаст скрипт туннеля и настроит автозапуск
  4. Добавит watchdog в cron (перезапуск раз в минуту если упал)
  5. Запустит туннель

В конце увидишь:

=== OK ===
Тоннель: localhost:22 (роутер) -> VPS:20100

После этого нажми «⟳ Проверить связь» в панели.

3.3 Диагностика туннеля

На роутере:

# Смотреть лог:
cat /tmp/hydra_tun.log

# Перезапустить вручную:
/opt/etc/init.d/S99hydra_tun restart

# Проверить что autossh жив:
ps | grep autossh

На VPS:

# Проверить что туннель слушает:
ss -tlnp | grep 20100

# Если порт занят старым соединением — освободить:
fuser -k 20100/tcp

4. WireGuard VPN

Вкладка «🔒 WireGuard VPN» — генерирует WireGuard-сервер на VPS и клиентские конфиги для роутеров.

Как работает

Роутер ──── WireGuard ────▶ VPS (wg0, порт 51820)
             шифрованный
             туннель

В отличие от туннеля (только управление), WireGuard шифрует весь трафик и может использоваться как VPN для маршрутизации через него.

Шаг 1 — инициализация сервера

Нажми «⚙ Инициализировать сервер» — установится WireGuard на VPS, сгенерируются ключи, поднимется wg0.

Шаг 2 — добавь роутер

Нажми «+ В VPN» напротив нужного роутера — сгенерируются ключи и IP для этого роутера.

Шаг 3 — установи на роутер

Вариант А (автоматически): Нажми «📡 Установить на роутер» — скрипт зайдёт по SSH и попытается настроить WireGuard через Keenetic RCI. Если получится, интерфейс появится в Keenetic UI.

Вариант Б (вручную через файл):

  1. Нажми «📄 Конфиг»«⬇ Скачать .conf»
  2. В Keenetic: Интернет → Другие подключения → WireGuard → Загрузить из файла
  3. Укажи адрес VPS и порт 51820 в настройках пира

После добавления в Keenetic — настрой политику маршрутизации: Интернет → Приоритеты подключений.

Удаление с роутера

Кнопка «🗑 Снести с роутера» — удаляет все файлы через SSH. Нативные WireGuard-интерфейсы в Keenetic UI нужно удалить вручную: Интернет → Другие подключения → WireGuard → Удалить подключение.


5. Логины и пароли

Здесь два разных набора учётных данных — не перепутай.

Пароль веб-панели (ADMIN_PASSWORD)

Пароль для входа на http://VPS:8000. Задаётся в server/.env. Никак не связан с роутерами.

SSH-пароль роутера (SSH_PASS)

Пароль для SSH на роутер (root / keenetic по умолчанию).

  • Общий для всех — задаётся в server/.env: SSH_PASS=keenetic
  • Индивидуальный — поле «SSH пароль» при добавлении роутера (перекрывает глобальный)

Поле IP — адрес для SSH (LAN-адрес, белый IP или DDNS), не веб-ссылка KeenDNS. Если случайно вставил https://... — сервис автоматически извлечёт хост.

SSH-ключи для туннеля

Ничего делать не нужно — ключи генерируются на VPS автоматически. Если ты удалил ключ вручную — просто нажми «⇄ Тоннель» снова, ключ перезапишется в authorized_keys.


6. Частые ошибки и решения

Туннель: ssh exited with error status 255; restarting ssh

Причина: autossh не может подключиться к VPS. Обычно это происходит сразу после переустановки туннеля — старый autossh запущен со старыми параметрами.

Решение:

# На роутере — убить старый процесс и перезапустить:
killall autossh
sleep 1
/opt/etc/init.d/S99hydra_tun start

Если S99hydra_tun не найден — нажми «⇄ Тоннель» и запусти команду заново.


Туннель: Connection timed out или Connection refused при проверке связи

Причина: Порт 20100 на VPS занят старым зависшим SSH-соединением, или туннель ещё не установился.

Решение на VPS:

# Проверить что слушает:
ss -tlnp | grep 20100

# Освободить порт:
fuser -k 20100/tcp

После этого нажми «Тест» в панели — autossh переподключится автоматически.

Начиная с последней версии, при нажатии «⇄ Тоннель» сервер сам освобождает занятый порт.


Туннель: curl: (22) The requested URL returned error: 403

Причина: Токен установки туннеля истёк (действует 10 минут) или был скопирован с переносом строки внутри.

Решение: Нажми «⇄ Тоннель» снова → скопируй новую команду → выполни целиком одной строкой. Не разбивай на части и не переменные.


WireGuard: Auth response: пустой, RCI не работает

Причина: Keenetic слушает на LAN IP роутера (например 192.168.88.1), а не на localhost. Скрипт автоматически перебирает все локальные адреса.

Если автодеплой не сработал — используй ручной способ:

  1. «📄 Конфиг» → «⬇ Скачать .conf»
  2. Keenetic: Интернет → Другие подключения → WireGuard → Загрузить из файла

WireGuard: интерфейс создался как nwg50 но не виден в Keenetic UI

Причина: Fallback-метод создаёт интерфейс через ip link, который не регистрируется в Keenetic конфиге.

Решение: Импортируй конфиг через UI (см. выше). Интерфейс появится нативно и будет виден в «Приоритеты подключений».


Unit hydra-manager.service not found

Причина: server/install.sh не дошёл до конца.

Решение:

cd /opt && sudo bash /opt/domen-hydra/server/install.sh

нет IP и нет тоннеля при обновлении роутеров

Причина: Роутер добавлен без IP и без настроенного туннеля.

Решение: Укажи IP роутера или настрой туннель (кнопка «⇄» напротив роутера).


neo restart завершается с ошибкой

Причина: HydraRoute Neo не установлен.

Проверка:

opkg list-installed | grep hydraroute

Панель не открывается (http://VPS:8000)

sudo ufw allow 8000/tcp

7. Полезное

SSH на роутер:

Адрес: 192.168.1.1   Логин: root   Пароль: keenetic   Порт: 22

Управление сервисом на VPS:

sudo systemctl status hydra-manager
sudo systemctl restart hydra-manager
sudo journalctl -u hydra-manager -n 50

Очистить роутер от всего что ставил сервер:

killall autossh 2>/dev/null; \
/opt/etc/init.d/S50hydravpn stop 2>/dev/null; \
rm -f /opt/etc/init.d/S99hydra_tun /opt/etc/init.d/S50hydravpn \
      /opt/bin/hydra_tun /opt/etc/hydra_tk \
      /opt/etc/wireguard/wg0.conf /opt/etc/wireguard/wg0.key; \
( crontab -l 2>/dev/null | grep -v 'S99hydra_tun' ) | crontab -; \
for i in $(seq 50 70); do ip link show nwg$i >/dev/null 2>&1 && ip link delete nwg$i; done; \
echo "=== Готово ==="

Прямые ссылки для роутера (cron-обновление):

http://VPS:8000/hydra/domain.conf
http://VPS:8000/hydra/ip.list
http://VPS:8000/hydra/version

Проверить активные туннели:

ss -tlnp | grep 2010

Связанные проекты

Description
No description provided
Readme 2 MiB
Languages
HTML 53.1%
Python 43.6%
Shell 3.3%