# keenetic_ssh-web Веб‑панель, которая **выполняет команды прямо на роутере Keenetic** (Entware) и показывает вывод. Подходит для обновления пакетов, перезапусков сервисов, диагностики, и т. п. - **Порт панели:** `2001` - **Где работает:** на самом роутере (Entware) - **Вход:** логин/пароль **от веб‑админки Keenetic** (NDM `/auth`) (есть запасной «мастер‑пароль» `WEB_PASSWORD`, если нужно) - **Опционально:** модуль `tunnel/` — **WireGuard‑туннель VPS ↔ роутер**, чтобы открыть доступ к панели и SSH, даже если у роутера **серый IP** (без проброса портов). ![Интерфейс](docs/ui.png) --- ## Самое главное (чтобы было безопасно) - Эта панель запускает **любые команды** в Linux на роутере. Это мощно, но опасно. - **Не открывайте порт 2001 в интернет для всех.** Минимум — включите `ALLOWED_IPS` или используйте туннель (вариант 2). --- ## Быстрый старт (минимум команд) ### Вариант 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 команды “с нуля” (самый простой путь) **Команда 1 — на VPS (Ubuntu):** поставить туннель и сразу добавить роутер (peer). ```sh curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash -s -- add my-router ``` Она выведет **готовый блок** (несколько строк `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` Reverse‑proxy нужен только если вы хотите **красивый адрес** `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** в интернет «как есть». - Используйте минимум: **туннель + reverse‑proxy** или **`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 ``` --- ## Туннель как отдельный сервис (по желанию) Туннель — это **дополнительный сервис для всей вашей экосистемы** (keenetic‑unified, domen_hydra и т. д.). Он просто делает так, что VPS «видит» роутер по адресу `10.99.0.X`. Полная документация (для тех, кому нужно больше деталей): `tunnel/README.md`. --- ## Поддержка проекта - **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).