mirror of
https://github.com/andrey271192/domen_hydra.git
synced 2026-09-20 14:42:00 +00:00
582 lines
22 KiB
Markdown
582 lines
22 KiB
Markdown
# HydraRoute Manager
|
||
|
||
Панель для **HydraRoute Neo**: домены и IP правишь в браузере на VPS, одной кнопкой — на все роутеры. Есть генератор WireGuard и мастер обратного туннеля, если у провайдера серый IP.
|
||
|
||
> Полный дашборд с мониторингом и Telegram — [keenetic-unified](https://github.com/andrey271192/keenetic-unified). Этот репозиторий — узкая задача «только Hydra и списки».
|
||
|
||
> **Поддержать проект:** [Boosty](https://boosty.to/andrey27/donate) · [Ozon СБП](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798) · Telegram: [@Iot_andrey](https://t.me/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**.
|
||
|
||
---
|
||
|
||
## 0. Подготовка перед установкой (VPS и роутер)
|
||
|
||
### 0.1 VPS (Ubuntu/Debian)
|
||
|
||
Панель работает как systemd‑сервис и по кнопке «📡 Обновить…» подключается по SSH к роутерам.
|
||
|
||
Минимальный чек‑лист:
|
||
|
||
- **Открыть порт панели** (если у тебя firewall):
|
||
|
||
```bash
|
||
sudo ufw allow 8000/tcp
|
||
```
|
||
|
||
- **Проверить что сервис будет слушать 8000** (занято/не занято):
|
||
|
||
```bash
|
||
ss -tlnp | grep :8000 || true
|
||
```
|
||
|
||
- **Для SSH‑операций нужен `sshpass`** (установщик ставит, но если ставишь руками):
|
||
|
||
```bash
|
||
sudo apt-get update
|
||
sudo apt-get install -y sshpass
|
||
```
|
||
|
||
Если планируешь **обратный туннель** — в `.env` обязательно задать:
|
||
- `VPS_SSH_HOST` (публичный IP/домен VPS, который доступен роутеру)
|
||
- `VPS_SSH_PORT` (обычно 22)
|
||
- `VPS_SSH_USER` (обычно root)
|
||
|
||
### 0.2 Роутер Keenetic (перед добавлением в панель)
|
||
|
||
Панель не “магическая” — она **заходит по SSH** на роутер и кладёт файлы в `/opt/etc/HydraRoute/…`.
|
||
|
||
Чек‑лист:
|
||
|
||
- **HydraRoute Neo установлен**.
|
||
- **Entware установлен** и работает:
|
||
|
||
```sh
|
||
opkg update
|
||
```
|
||
|
||
- **SSH включён**, логин обычно `root`, пароль задан (по умолчанию часто `keenetic`).
|
||
- Если у роутера **нестандартный SSH‑порт** — в панели во вкладке «Роутеры» укажи **`SSH порт (опц.)`**.
|
||
- Если у провайдера **серый IP** и VPS не может достучаться до роутера по WAN — используй раздел **«3. Обратный туннель»**.
|
||
|
||
### Шаг 1 — установка
|
||
|
||
```bash
|
||
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 — настройка паролей
|
||
|
||
```bash
|
||
nano /opt/domen-hydra/server/.env
|
||
```
|
||
|
||
Минимум что нужно поменять:
|
||
|
||
```env
|
||
ADMIN_PASSWORD=твой-пароль-для-панели
|
||
|
||
SSH_USER=root
|
||
SSH_PASS=keenetic
|
||
```
|
||
|
||
Если планируешь **туннель** (для роутеров без белого IP):
|
||
|
||
```env
|
||
VPS_SSH_HOST=IP_или_домен_VPS
|
||
```
|
||
|
||
### Шаг 3 — запуск
|
||
|
||
```bash
|
||
sudo systemctl restart hydra-manager
|
||
```
|
||
|
||
### Шаг 4 — открой панель
|
||
|
||
```
|
||
http://IP_ТВОЕГО_VPS:8000
|
||
```
|
||
|
||
### Обновление
|
||
|
||
```bash
|
||
cd /opt/domen-hydra && git pull && sudo systemctl restart hydra-manager
|
||
```
|
||
|
||
### Быстрая диагностика после обновления
|
||
|
||
```bash
|
||
sudo systemctl status hydra-manager --no-pager -l
|
||
sudo journalctl -u hydra-manager -n 80 --no-pager
|
||
```
|
||
|
||
### Удаление
|
||
|
||
```bash
|
||
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`
|
||
- **«📡 На роутер»** на карточке роутера — только на один конкретный
|
||
|
||
### Про SSH‑порт
|
||
|
||
По умолчанию SSH порт **22**. Если у тебя нестандартный порт — во вкладке **«Роутеры»** заполни **«SSH порт (опц.)»**.
|
||
|
||
### Импорт с роутера
|
||
|
||
Вкладка «Роутеры» → **«⬇ С роутера»** — файлы подтянутся автоматически.
|
||
|
||
Или вручную на роутере:
|
||
```sh
|
||
cat /opt/etc/HydraRoute/domain.conf
|
||
cat /opt/etc/HydraRoute/ip.list
|
||
```
|
||
|
||
### Автообновление на роутере
|
||
|
||
```bash
|
||
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):
|
||
|
||
```sh
|
||
# 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:**
|
||
```bash
|
||
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 Диагностика туннеля
|
||
|
||
**На роутере:**
|
||
```sh
|
||
# Смотреть лог:
|
||
cat /tmp/hydra_tun.log
|
||
|
||
# Перезапустить вручную:
|
||
/opt/etc/init.d/S99hydra_tun restart
|
||
|
||
# Проверить что autossh жив:
|
||
ps | grep autossh
|
||
```
|
||
|
||
**На VPS:**
|
||
```bash
|
||
# Проверить что туннель слушает:
|
||
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: `Connection refused` / `timeout` / «нет SSH»
|
||
|
||
**Причины (самые частые):**
|
||
- SSH на роутере не включён
|
||
- Неверный **IP/hostname** (в поле IP должен быть адрес **для SSH**, не веб‑ссылка)
|
||
- Нестандартный SSH‑порт — не указан **«SSH порт (опц.)»**
|
||
- Firewall на роутере/провайдере режет входящий SSH по WAN
|
||
- Серый IP → VPS физически не может достучаться (нужен **туннель**)
|
||
|
||
**Что делать:**
|
||
- Сначала нажми **«🔌 Тест»** у роутера в панели — он покажет понятный вывод.
|
||
- Если SSH не на 22 — заполни порт в карточке роутера и повтори.
|
||
- Если WAN недоступен — настраивай **«⇄ Тоннель»**.
|
||
|
||
---
|
||
|
||
### SSH: `Permission denied` / «неверный пароль»
|
||
|
||
**Причина:** неверный пароль/логин (или роутер не пускает root).
|
||
|
||
**Решение:**
|
||
- Уточни, что реально работает руками:
|
||
|
||
```bash
|
||
ssh root@ROUTER_HOST
|
||
```
|
||
|
||
- Обнови поля `user/password` у роутера в панели.
|
||
|
||
---
|
||
|
||
### Туннель: `ssh exited with error status 255; restarting ssh`
|
||
|
||
**Причина:** autossh не может подключиться к VPS. Обычно это происходит сразу после переустановки туннеля — старый autossh запущен со старыми параметрами.
|
||
|
||
**Решение:**
|
||
```sh
|
||
# На роутере — убить старый процесс и перезапустить:
|
||
killall autossh
|
||
sleep 1
|
||
/opt/etc/init.d/S99hydra_tun start
|
||
```
|
||
|
||
Если `S99hydra_tun` не найден — нажми «⇄ Тоннель» и запусти команду заново.
|
||
|
||
---
|
||
|
||
### Туннель: `Connection timed out` или `Connection refused` при проверке связи
|
||
|
||
**Причина:** Порт 20100 на VPS занят старым зависшим SSH-соединением, или туннель ещё не установился.
|
||
|
||
**Решение на VPS:**
|
||
```bash
|
||
# Проверить что слушает:
|
||
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` не дошёл до конца.
|
||
|
||
**Решение:**
|
||
```bash
|
||
cd /opt && sudo bash /opt/domen-hydra/server/install.sh
|
||
```
|
||
|
||
---
|
||
|
||
### `нет IP и нет тоннеля` при обновлении роутеров
|
||
|
||
**Причина:** Роутер добавлен без IP и без настроенного туннеля.
|
||
|
||
**Решение:** Укажи IP роутера или настрой туннель (кнопка «⇄» напротив роутера).
|
||
|
||
---
|
||
|
||
### `neo restart` завершается с ошибкой
|
||
|
||
**Причина:** HydraRoute Neo не установлен.
|
||
|
||
**Проверка:**
|
||
```sh
|
||
opkg list-installed | grep hydraroute
|
||
```
|
||
|
||
---
|
||
|
||
### Панель не открывается (`http://VPS:8000`)
|
||
|
||
```bash
|
||
sudo ufw allow 8000/tcp
|
||
```
|
||
|
||
---
|
||
|
||
### VPS: `sshpass not installed`
|
||
|
||
**Причина:** на VPS не установлен `sshpass`, а панель использует его для SSH.
|
||
|
||
**Решение:**
|
||
|
||
```bash
|
||
sudo apt-get update
|
||
sudo apt-get install -y sshpass
|
||
sudo systemctl restart hydra-manager
|
||
```
|
||
|
||
---
|
||
|
||
## 7. Полезное
|
||
|
||
**SSH на роутер:**
|
||
```
|
||
Адрес: 192.168.1.1 Логин: root Пароль: keenetic Порт: 22
|
||
```
|
||
|
||
**Управление сервисом на VPS:**
|
||
```bash
|
||
sudo systemctl status hydra-manager
|
||
sudo systemctl restart hydra-manager
|
||
sudo journalctl -u hydra-manager -n 50
|
||
```
|
||
|
||
**Очистить роутер от всего что ставил сервер:**
|
||
```sh
|
||
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
|
||
```
|
||
|
||
**Проверить активные туннели:**
|
||
```bash
|
||
ss -tlnp | grep 2010
|
||
```
|
||
|
||
---
|
||
|
||
## Связанные проекты
|
||
|
||
- [keenetic-dns-routes](https://github.com/andrey271192/keenetic-dns-routes) — встроенная DNS-маршрутизация без Neo
|
||
- [keenetic-unified](https://github.com/andrey271192/keenetic-unified) — Neo + дашборд + мониторинг
|
||
- [Keenetic SSH](https://github.com/andrey271192/Keenetic_SSH) — прямой SSH (нужен белый IP)
|
||
|
||
---
|
||
|
||
## Поддержать проект
|
||
|
||
Если проект оказался полезным — буду рад поддержке. Это помогает развивать и поддерживать его дальше.
|
||
|
||
- [Boosty](https://boosty.to/andrey27/donate)
|
||
- [Ozon СБП](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798)
|
||
- Telegram: [@Iot_andrey](https://t.me/Iot_andrey) — вопросы, идеи, обратная связь
|