Files
keenetic_ssh-web/README.md
2026-05-17 06:59:42 +03:00

280 lines
12 KiB
Markdown
Raw 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.

# keenetic_ssh-web
Веб‑панель, которая **выполняет команды прямо на роутере Keenetic** (Entware) и показывает вывод. Подходит для обновления пакетов, перезапусков сервисов, диагностики, и т. п.
- **Порт панели:** `2001`
- **Где работает:** на самом роутере (Entware)
- **Вход:** логин/пароль **от веб‑админки Keenetic** (NDM `/auth`)
(есть запасной «мастер‑пароль» `WEB_PASSWORD`, если нужно)
- **Опционально:** модуль `tunnel/`**WireGuardтуннель VPS ↔ роутер**, чтобы открыть доступ к панели и SSH, даже если у роутера **серый IP** (без проброса портов).
![Интерфейс](docs/ui.png)
![Схема туннеля (через VPS)](docs/tunnel-diagram.svg)
---
## Самое главное (чтобы было безопасно)
- Эта панель запускает **любые команды** в Linux на роутере. Это мощно, но опасно.
- **Не открывайте порт 2001 в интернет для всех.** Минимум — включите `ALLOWED_IPS` или используйте туннель (вариант 2).
---
## Быстрый старт
1. **Entware** на роутере — блок «📦 Установка Entware» ниже.
2. **Панель** — вариант 1, если хватает доступа из домашней сети.
3. **Серый IP** и нужен доступ откуда угодно — вариант 2 с туннелем через VPS.
Рядом с [Keenetic Unified](https://github.com/andrey271192/keenetic-unified) этот проект **не мешает**: другой порт (`2001`), всё крутится на самом роутере.
### Ещё скриншоты
| | |
|---|---|
| Список файлов на роутере | ![Файлы](docs/files.png) |
| Проверка DNS-маршрутов | ![DNS routes](docs/dns-routes-test.png) |
### 📦 Установка Entware на Keenetic
━━━━━━━━━━━━━━━━━━━━━━
⚠️ Определи свою архитектуру
- Mipsel — роутеры на чипе MT7628/MT7621
- Aarch64 — роутеры на чипе MT7622/MT7981/MT7988 (ARM)
━━━━━━━━━━━━━━━━━━━━━━
💡 Совет
Начиная с KeeneticOS 4.2 Entware можно установить прямо через браузер — просто открой `192.168.1.1/a` и следуй инструкции.
━━━━━━━━━━━━━━━━━━━━━━
🚀 Установка онлайн — одной командой
🔵 Mipsel (MT7628/MT7621)
```sh
opkg disk storage:/ https://bin.entware.net/mipselsf-k3.4/installer/mipsel-installer.tar.gz
```
🟢 Aarch64 (MT7622/MT7981/MT7988)
```sh
opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz
```
⏳ Дождись окончания установки — это займёт пару минут. После этого Entware готов к работе.
🔌 Подключение по SSH
📋 Данные для входа
- Логин: `root`
- Пароль: `keenetic`
- Порт: `22` (если вы не меняли порт SSH вручную)
### Вариант 1. Панель нужна только дома (LAN)
На роутере (в Entware shell по SSH):
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-router.sh | sh
```
Откройте в браузере:
- `http://IP_РОУТЕРА:2001`
Вход — **как в веб‑админку Keenetic**.
---
### Вариант 2. Серый IP, нужен доступ из любой точки (через VPS)
#### 2 команды “с нуля” (самый простой путь)
![2 шага установки (VPS → роутер)](docs/steps.svg)
**Команда 1 — на VPS (Ubuntu):** поставить туннель и сразу добавить роутер.
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash -s -- add my-router
```
Где `my-router`**имя этого роутера на VPS** (можете назвать `home`, `dacha`, `office1`).
Если у конкретного роутера «прокси/админка» сидит на другом порту (например `777`), задайте порт **для этого роутера**:
```sh
sudo kssh-tun add my-router --dnat 777
```
Что делает `--dnat`: туннель на роутере автоматически прокидывает вход на `wg0:<порт>``LAN_IP:<порт>`.
Это нужно, потому что некоторые сервисы Keenetic слушают **только на LANIP**, и через `wg0` иначе будет `Connection refused`.
Команда на VPS выведет **готовый блок** (несколько строк `export ...` + `curl ... | sh`).
**Команда 2 — на роутере (Entware shell):** вставьте выданный блок **как есть**.
Он поднимет `wg0`, а затем установит панель на `2001`.
Проверка с VPS:
```sh
curl http://10.99.0.X:2001
ssh root@10.99.0.X
```
Можно **вообще без домена и без Caddy/Nginx**: просто открывайте панель по IP из туннеля:
- `http://10.99.0.X:2001`
Reverseproxy нужен только если вы хотите **красивый адрес** `https://router-домен` и HTTPS.
**Caddy (3 строки):**
```caddy
router.example.com {
reverse_proxy 10.99.0.X:2001
}
```
**Nginx (минимальный server block):**
```nginx
server {
server_name router.example.com;
location / { proxy_pass http://10.99.0.X:2001; }
}
```
Рекомендация: в `.env` панели выставить **`ALLOWED_IPS=10.99.0.1`**, чтобы к роутеру мог обращаться **только VPS**.
---
### Вариант 3. Белый IP — без туннеля
Ставьте как в варианте 1 (LAN), а доступ снаружи делайте как вам удобно: проброс порта/файрвол/домен.
Важно: **не открывайте 2001 в интернет без ограничений** (см. безопасность ниже).
---
## Как пользоваться панелью
### 1) Добавьте команду
- **Название** — как вам удобно (например: `opkg update`)
- **Команда** — обычная shellкоманда (например: `opkg update`)
- **Примечание** — необязательно
### 2) Запуск
- **Выполнить** — запускает одну команду и показывает результат
- **Выполнить все команды** — запускает все строки с галочкой **«ВКЛ»**
### 3) Расписание
- Поставьте интервал (в минутах) и нажмите **Сохранить**
- У нужных строк включите **«Распис.»**
По расписанию выполняются только строки: **ВКЛ + Распис.**
### 4) Просмотр вывода
Кнопка **«Вывод»** раскрывает полный лог последнего запуска (stdout + stderr).
---
## Примеры полезных команд (можно копировать)
- Обновить пакеты: `opkg update && opkg list-upgradable | head`
- Обновить всё: `opkg update && opkg upgrade`
- Проверить место: `df -h`
- Процессы: `top -b -n 1 | head -60`
- WireGuard: `wg show`
- Логи: `logread | tail -200`
---
## Безопасность (важно)
Это **не песочница**: команда выполняется с правами процесса (на Entware часто **root**).
- Не публикуйте порт **2001** в интернет «как есть».
- Используйте минимум: **туннель + reverseproxy** или **`ALLOWED_IPS`**.
---
## Удаление (одной командой)
### удаления (под ключ, без поломок)
Скрипты **удаляют только то, что сами ставили** и **не трогают**:
- HydraRoute Neo (`hrneo` / `hrweb`)
- другие Entwareпакеты и ваши сервисы
- ваши конфиги (кроме своих файлов)
- чужие правила firewall/iptables (удаляются только наши вставки, связанные с wg0)
Если хотите сохранить настройки панели (`.env`) и список команд (`data/store.json`) — скажите, добавлю отдельную “удалить, но оставить данные” команду в `setup-router.sh` (сейчас это есть для панели через `KEEP_DATA=1`, но не вынесено в быстрый блок).
---
Панель (на роутере):
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/uninstall.sh | sh
```
Панель (на роутере), **сохранить команды и настройки**:
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/uninstall.sh | env KEEP_DATA=1 sh
```
Туннель‑клиент (на роутере, если ставили):
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/tunnel/tunnel-uninstall.sh | sh
```
Туннель‑сервер (на VPS, если ставили):
```sh
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/tunnel/server-uninstall.sh | sudo sh
```
---
## Туннель как отдельный сервис (по желанию)
Туннель — это **дополнительный сервис для всей вашей экосистемы** (keeneticunified, domen_hydra и т. д.). Он просто делает так, что VPS «видит» роутер по адресу `10.99.0.X`.
Полная документация (для тех, кому нужно больше деталей): `tunnel/README.md`.
---
## Частые ошибки (и решения)
### `Connection refused` через туннель (RCI/админка/порт)
Некоторые сервисы Keenetic слушают **только LANIP**, и если вы ходите на `wg0`, будет `Connection refused`.
- **Решение**: включить автоDNAT на нужный порт:
```sh
sudo kssh-tun add my-router --dnat 81
```
или задать несколько портов: `--dnat 81,79`.
### Нельзя открывать панель в интернет
Порт `2001` — это выполнение команд. **Не публикуйте его “как есть”**.
- **Решение**: `ALLOWED_IPS` (например, только IP вашего VPS) или туннель + reverseproxy.
## Поддержка проекта
- **Boosty:** `https://boosty.to/andrey27/donate`
- **Ozon Bank (СБП):** `https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798`
- **Telegram:** `https://t.me/Iot_andrey`
Кнопка **Sponsor** на GitHub ведёт на варианты из `.github/FUNDING.yml`.
## Лицензия
MIT — см. [LICENSE](LICENSE).