feat: reverse SSH tunnel for routers without public IP

UI: «⇄ Тоннель» button next to «Тест» — opens modal with autossh
install command for the router and an auto-applied localhost RCI URL.
Backend: GET /api/routers/{id}/tunnel-cmd allocates a free port
(starts at TUNNEL_PORT_START) and returns the shell command;
DELETE /api/routers/{id}/tunnel clears the assignment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Андрей Бобырев
2026-04-27 20:57:05 +03:00
parent 80c7859f2d
commit d48b7b2023
5 changed files with 182 additions and 3 deletions

View File

@@ -7,3 +7,11 @@ ADMIN_PASSWORD=change-me
# Дефолт для Keenetic API, если у роутера не заданы поля логин/пароль и нет user:pass@ в URL
KEENETIC_LOGIN=admin
KEENETIC_PASSWORD=
# Reverse SSH tunnel — для роутеров без белого IP
# Если эти поля заполнены, в UI появляется кнопка «⇄ Тоннель» рядом с «Тест»
VPS_SSH_HOST=
VPS_SSH_PORT=22
VPS_SSH_USER=root
VPS_SSH_PASS=
TUNNEL_PORT_START=20100