diff --git a/README.md b/README.md index 37e8484..8cb6717 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # HydraRoute Manager -Веб-панель для централизованного управления конфигурацией **HydraRoute Neo** на роутерах Keenetic. Редактируешь списки доменов и IP в браузере — одной кнопкой отправляешь на все роутеры. +Веб-панель для управления **HydraRoute Neo** на роутерах Keenetic. Редактируешь списки доменов и IP в браузере — одной кнопкой всё разъезжается по роутерам. Плюс встроенный WireGuard-генератор и мастер обратного туннеля для роутеров без белого 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) @@ -8,13 +8,13 @@ --- -## 1. Что это за проект +## Что это и зачем -HydraRoute Neo — плагин для Keenetic, который маршрутизирует трафик по доменам и IP-адресам. Например: YouTube и Netflix — через VPN, всё остальное — напрямую. Конфигурация хранится в двух файлах на роутере: `domain.conf` и `ip.list`. +HydraRoute Neo — плагин для Keenetic, который маршрутизирует трафик по доменам и IP. YouTube и Netflix — через VPN, всё остальное — напрямую. Конфиг хранится в двух файлах на роутере: `domain.conf` и `ip.list`. -Проблема: редактировать эти файлы напрямую неудобно, а если роутеров несколько — приходится делать всё вручную на каждом. +Редактировать их напрямую неудобно, а если роутеров несколько — приходится делать всё вручную на каждом. -**Этот проект решает проблему:** устанавливаешь сервис на VPS, редактируешь домены и IP через браузер, нажимаешь «Обновить все роутеры» — файлы сами разъезжаются по всем роутерам через SSH. +**Этот проект решает проблему:** ``` ┌──────────────────────────────┐ @@ -26,30 +26,30 @@ HydraRoute Neo — плагин для Keenetic, который маршрути └──────────┬──────────┬────────┘ │ SSH │ SSH ┌──────▼──┐ ┌────▼──────┐ - │Роутер 1 │ │ Роутер 2 │ ← конфиги обновляются автоматически + │Роутер 1 │ │ Роутер 2 │ └─────────┘ └───────────┘ ``` **Что умеет:** -- Редактировать группы доменов и IP через браузер. -- Включать/выключать группы одним переключателем. -- Отправлять конфиг сразу на все роутеры одной кнопкой. -- Снимать конфиг с конкретного роутера и подставлять в редактор. -- Отправлять конфиг на один конкретный роутер. -- Проверять SSH-соединение с роутером. -- Для роутеров **без белого IP** — встроенный мастер настройки обратного туннеля. +- Редактировать группы доменов и IP через браузер +- Включать/выключать группы одним переключателем +- Отправлять конфиг сразу на все роутеры одной кнопкой +- Снимать конфиг с роутера и подставлять в редактор +- Генерировать WireGuard VPN: сервер на VPS + клиенты на роутерах +- Для роутеров **без белого IP** — мастер настройки обратного SSH-туннеля с автовосстановлением **Требования:** -- Роутер Keenetic с установленным HydraRoute Neo и Entware. -- Белый IP на WAN роутера **или** настроенный обратный тоннель (см. раздел 3). +- Роутер Keenetic с установленным HydraRoute Neo и Entware +- VPS с белым IP (сюда устанавливается панель) +- Белый IP на роутере **или** настроенный обратный тоннель (раздел 3) --- -## 2. Быстрая установка +## 1. Быстрая установка -Вставляй команды на **VPS** (сервере), где будет работать панель. +Все команды выполняются на **VPS**. -### Шаг 1 — клонируй и запусти установщик +### Шаг 1 — установка ```bash cd /opt @@ -62,7 +62,7 @@ sudo bash server/install.sh > Если видишь `Unable to read current working directory` — сначала выполни `cd /opt`, потом повтори. -### Шаг 2 — задай пароли +### Шаг 2 — настройка паролей ```bash nano /opt/domen-hydra/server/.env @@ -70,21 +70,20 @@ nano /opt/domen-hydra/server/.env Минимум что нужно поменять: -``` +```env ADMIN_PASSWORD=твой-пароль-для-панели -# SSH-пароль роутера (если у всех одинаковый) SSH_USER=root SSH_PASS=keenetic ``` -Если планируешь **туннель** (для роутеров без белого IP) — добавь сюда же: +Если планируешь **туннель** (для роутеров без белого IP): -``` -VPS_SSH_HOST=IP_или_домен_твоего_VPS +```env +VPS_SSH_HOST=IP_или_домен_VPS ``` -### Шаг 3 — перезапусти сервис +### Шаг 3 — запуск ```bash sudo systemctl restart hydra-manager @@ -96,8 +95,6 @@ sudo systemctl restart hydra-manager http://IP_ТВОЕГО_VPS:8000 ``` -Введи пароль из `ADMIN_PASSWORD`. - ### Обновление ```bash @@ -112,192 +109,20 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/domen_hydra/main/serve --- -## 3. Туннель — для роутеров без белого IP - -### Что такое «белый IP» и зачем он нужен - -По умолчанию сервис подключается к роутеру по SSH напрямую. Для этого нужен **публичный IP** роутера — чтобы VPS мог до него «дотянуться». - -Если провайдер выдаёт **серый IP** (роутер за NAT оператора — очень частая ситуация в России), VPS не может достучаться до роутера. Роутер сам должен инициировать соединение. - -### Как работает туннель - -Роутер сам открывает зашифрованное SSH-соединение на VPS и говорит: «слушай у себя порт 20100 — всё что придёт туда, перешли мне на порт 22 (SSH)». - -``` -Роутер (серый IP) ──SSH──▶ VPS :20100 - │ -VPS → hydra-manager ────────────▶│──▶ SSH роутера (порт 22) -``` - -В итоге сервис подключается к роутеру через `localhost:20100`, а не напрямую. Серый IP не мешает. Кнопки «Обновить все роутеры» и «На роутер» работают через тоннель автоматически. - -### Что понадобится - -- Публичный IP/домен VPS (уже есть). -- Роутер с установленным **Entware** (нужен для `autossh`). - -### Установка Entware на роутер - -> 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 (ARM) → aarch64: -opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz -``` - -Дождись окончания (~2 минуты), проверь: `opkg update` должен отработать без ошибок. - -### Шаг 1 — настрой .env на VPS - -```bash -nano /opt/domen-hydra/server/.env -``` - -Добавь или заполни: - -``` -VPS_SSH_HOST=IP_или_домен_VPS # публичный адрес, куда роутер будет коннектиться -VPS_SSH_PORT=22 # SSH-порт VPS (обычно 22) -VPS_SSH_USER=root # пользователь VPS -``` - -`VPS_SSH_PASS` не нужен — туннель работает через SSH-ключи, которые генерируются автоматически. - -Перезапусти: - -```bash -sudo systemctl restart hydra-manager -``` - -### Шаг 2 — добавь роутер в панель - -Открой `http://VPS:8000` → вкладка «Роутеры». - -**Вариант А** (роутер уже добавлен): нажми кнопку **«⇄»** напротив нужного роутера. - -**Вариант Б** (роутер ещё не добавлен): введи имя и SSH-пароль роутера, нажми **«⇄ Тоннель»** вместо «+ Добавить» — роутер добавится и сразу откроется окно туннеля. - -> Если кнопки «⇄ Тоннель» нет — проверь, что `VPS_SSH_HOST` в `.env` не пустой и сервис перезапущен. - -### Шаг 3 — скопируй и выполни команду на роутере - -В открывшемся окне появится одна команда вида: - -``` -curl -fsS 'http://VPS:8000/api/routers/andrey/tunnel-script?token=XXX' | sh -``` - -Нажми **«📋 Копировать»** (если не сработало — выдели текст и Cmd/Ctrl+C). - -Зайди по SSH на **роутер** (не на VPS!) и вставь команду: - -``` -ssh root@192.168.1.1 -``` - -> **Как отличить терминал роутера от VPS:** -> - Роутер: приглашение выглядит как `~ #` или `(none) ~ #` -> - VPS: выглядит как `root@имя-сервера:~#` - -Скрипт автоматически: -1. Установит `autossh` через opkg. -2. Запишет SSH-ключ в `/opt/etc/hydra_tk`. -3. Создаст скрипт тоннеля `/opt/bin/hydra_tun`. -4. Пропишет автозапуск через Entware init.d. -5. Запустит тоннель в фоне. - -В конце увидишь: - -``` -=== OK === -Тоннель: localhost:22 (роутер) -> VPS:20100 -``` - -### Шаг 4 — проверь связь - -В браузере нажми **«⟳ Проверить связь»** — если всё хорошо, статус изменится на «✅ Активен». - -После этого «Обновить все роутеры» и «📡 На роутер» будут работать через тоннель автоматически. - -### Ручной запуск и диагностика - -Если автоматический запуск не сработал (написало «ОШИБКА»): - -```sh -# На роутере — запусти вручную (увидишь вывод): -/opt/bin/hydra_tun - -# Проверить лог: -cat /tmp/hydra_tun.log - -# Перезапустить через init.d: -killall autossh 2>/dev/null; sleep 1; /opt/etc/init.d/S99hydra_tun start -``` - -Если `/opt/bin/hydra_tun` работает вручную — попробуй перезагрузить роутер: при старте Entware сам запустит туннель. - -### Проверка на VPS - -```bash -ss -tlnp | grep 20100 -# Должна быть строка с 127.0.0.1:20100 — значит туннель активен -``` - ---- - -## 4. Логины и пароли - -Здесь два разных набора учётных данных. Не перепутай. - -### Пароль веб-панели (`ADMIN_PASSWORD`) - -Пароль для входа на `http://VPS:8000`. Задаётся в `server/.env`. Никак не связан с роутерами. - -### SSH-пароль роутера (`SSH_PASS`) - -Это пароль для входа по SSH на роутер (`root` / `keenetic` по умолчанию). Нужен сервису, чтобы отправлять конфиги через SSH. - -- **Общий для всех** — задаётся в `server/.env`: `SSH_PASS=keenetic` -- **Индивидуальный** — поле «SSH пароль» при добавлении роутера в панели (перекрывает глобальный). - -> Поле **IP** — это адрес для SSH (LAN-адрес, белый IP или DDNS), **не** веб-ссылка KeenDNS. Если случайно вставил URL вроде `https://...` — сервис автоматически извлечёт из него хост. - -### SSH-ключи для туннеля - -Ничего делать не нужно — ключи генерируются на VPS автоматически при нажатии «⇄». Приватный ключ уходит на роутер через одноразовую ссылку (действует 10 минут). Пароль SSH для туннеля не используется. - ---- - -## 5. Как добавлять домены и IP +## 2. Домены и IP ### Вкладка «Конфигурация» -Здесь карточки с группами доменов и IP. Каждая группа имеет: -- **Имя** — например `youtube` или `ru-geoip`. -- **Политику** — `HydraRoute` (через VPN), `RU` (локально), `Google` и т.д. -- **Список записей** — домены или IP/CIDR, по одному на строку. +Карточки с группами. У каждой группы: +- **Имя** — например `youtube` или `ru-geoip` +- **Политика** — `HydraRoute` (через VPN), `RU` (локально) и т.д. +- **Список** — домены или IP/CIDR, по одному на строку -Нажми **«✏️»** на карточке → редактируй → **«💾 Сохранить»**. +Нажми **«✏️»** → редактируй → **«💾 Сохранить»**. -### Вкладка «Импорт файлов» - -На вкладке «Роутеры» нажми **«⬇ С роутера»** — файлы подтянутся автоматически и подставятся в поля импорта. Или вручную скопируй с роутера: - -```sh -cat /opt/etc/HydraRoute/domain.conf -cat /opt/etc/HydraRoute/ip.list -``` - -### Формат domain.conf +### Форматы файлов +**domain.conf:** ``` ##youtube youtube.com,youtu.be,googlevideo.com/HydraRoute @@ -306,8 +131,7 @@ youtube.com,youtu.be,googlevideo.com/HydraRoute avito.ru,ozon.ru/RU ``` -### Формат ip.list - +**ip.list:** ``` ##geoip:ru /RU @@ -316,26 +140,243 @@ geoip:ru ### Отправка на роутеры -- **«📡 Обновить все роутеры»** — отправляет конфиг на все роутеры и делает `neo restart`. -- **«📡 На роутер»** на карточке роутера — только на один конкретный. +- **«📡 Обновить все роутеры»** — отправляет конфиг на все роутеры и делает `neo restart` +- **«📡 На роутер»** на карточке роутера — только на один конкретный -### Установка cron-обновления на роутер +### Импорт с роутера + +Вкладка «Роутеры» → **«⬇ С роутера»** — файлы подтянутся автоматически. + +Или вручную на роутере: +```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 -sh /opt/bin/hydra_update.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 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` не дошёл до конца. @@ -345,24 +386,26 @@ sh /opt/bin/hydra_update.sh cd /opt && sudo bash /opt/domen-hydra/server/install.sh ``` +--- + ### `нет IP и нет тоннеля` при обновлении роутеров **Причина:** Роутер добавлен без IP и без настроенного туннеля. **Решение:** Укажи IP роутера или настрой туннель (кнопка «⇄» напротив роутера). -### Туннель пишет «autossh не запустился в фоне» - -```sh -# Проверь вручную на роутере: -/opt/bin/hydra_tun -# Если работает — перезагрузи роутер. Если нет — смотри лог: -cat /tmp/hydra_tun.log -``` +--- ### `neo restart` завершается с ошибкой -**Причина:** HydraRoute Neo не установлен. Проверь: `opkg list-installed | grep hydraroute`. +**Причина:** HydraRoute Neo не установлен. + +**Проверка:** +```sh +opkg list-installed | grep hydraroute +``` + +--- ### Панель не открывается (`http://VPS:8000`) @@ -370,15 +413,11 @@ cat /tmp/hydra_tun.log sudo ufw allow 8000/tcp ``` -### Кнопка «📋 Копировать» не срабатывает - -Встроен fallback — текст выделяется автоматически. Нажми Cmd+C (Mac) или Ctrl+C (Windows/Linux). - --- -## 7. Полезные советы +## 7. Полезное -**Как зайти на роутер по SSH:** +**SSH на роутер:** ``` Адрес: 192.168.1.1 Логин: root Пароль: keenetic Порт: 22 ``` @@ -390,18 +429,30 @@ sudo systemctl restart hydra-manager sudo journalctl -u hydra-manager -n 50 ``` -**Проверить активные туннели:** -```bash -ss -tlnp | grep 2010 +**Очистить роутер от всего что ставил сервер:** +```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 +``` + --- ## Связанные проекты