Files
domen_hydra/README.md
2026-05-30 18:26:34 +03:00

582 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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: [@PCAdministration](https://t.me/PCAdministration)
![Превью веб-интерфейса](docs/preview.png)
---
## Что это и зачем
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: [@PCAdministration](https://t.me/PCAdministration) — вопросы, идеи, обратная связь