feat: интерактивное меню — просто запусти rproxy

This commit is contained in:
Petro1990 2026-03-13 14:27:35 +03:00
parent f336aec6d5
commit 02a0536b11
2 changed files with 578 additions and 461 deletions

117
README.md
View File

@ -2,7 +2,7 @@
**Менеджер обратного прокси для роутеров Keenetic** **Менеджер обратного прокси для роутеров Keenetic**
Публикация локальных сервисов в интернет через VPS с nginx в качестве reverse proxy. Публикация локальных сервисов в интернет через VPS с nginx в качестве обратного прокси.
``` ```
[LAN сервис] ← [Keenetic] ══SSH туннель══▶ [VPS:nginx] → Интернет [LAN сервис] ← [Keenetic] ══SSH туннель══▶ [VPS:nginx] → Интернет
@ -18,64 +18,58 @@
curl -sSL http://5.104.75.50:3000/Petro1990/rProxy/raw/branch/main/install.sh | sh curl -sSL http://5.104.75.50:3000/Petro1990/rProxy/raw/branch/main/install.sh | sh
``` ```
### 2. Настройка VPS ### 2. Запуск
```bash ```bash
rproxy setup rproxy
``` ```
Скрипт запросит: Откроется интерактивное меню:
- **IP-адрес VPS** — адрес вашего сервера
- **SSH порт** — порт SSH (по умолчанию 22)
- **SSH пользователь** — логин (по умолчанию root)
- **Метод авторизации** — SSH-ключ или пароль
При выборе SSH-ключа скрипт автоматически сгенерирует ключ и скопирует его на VPS. Также будет автоматически установлен и настроен nginx. ```
╔══════════════════════════════════════════════╗
║ rProxy v1.0.0 ║
╚══════════════════════════════════════════════╝
### 3. Публикация сервиса VPS: 5.104.75.50 Сервисов: 2 Онлайн: 1
──────────────────────────────────────────────────
**С доменом** (порт 80): 1) 📋 Список сервисов и статус
```bash 2) Добавить сервис
rproxy add nas 192.168.1.100:5000 --domain nas.example.com 3) ❌ Удалить сервис
──────────────────────────────────────────────────
4) ▶️ Запустить туннель
5) ⏹️ Остановить туннель
6) 🔄 Перезапустить туннель
──────────────────────────────────────────────────
7) ⚙️ Настройки VPS
0) 🚪 Выход
▸ Выберите действие:
``` ```
**Без домена** (произвольный порт): ### 3. Первый запуск
```bash
rproxy add camera 192.168.1.50:8080 --port 9090
```
**С автоподбором порта:** При первом запуске скрипт предложит настроить подключение к VPS:
```bash - **IP-адрес VPS**
rproxy add homeassistant 192.168.1.10:8123 - **SSH порт** (по умолчанию 22)
``` - **Пользователь** (по умолчанию root)
- **Авторизация** — SSH-ключ или пароль
## 📋 Команды ### 4. Добавление сервиса
| Команда | Описание | Выберите пункт **2** в меню. Скрипт пошагово спросит:
|---------|----------| - Название сервиса
| `rproxy setup` | Настроить подключение к VPS | - Адрес локального сервиса (IP:порт)
| `rproxy add <имя> <хост:порт> [опции]` | Добавить сервис | - Привязка к домену или внешнему порту
| `rproxy remove <имя>` | Удалить сервис |
| `rproxy start [имя]` | Запустить туннель(и) |
| `rproxy stop [имя]` | Остановить туннель(и) |
| `rproxy restart [имя]` | Перезапустить туннель(и) |
| `rproxy status` | Статус всех сервисов |
| `rproxy list` | Краткий список |
| `rproxy enable <имя>` | Включить автозапуск |
| `rproxy disable <имя>` | Выключить автозапуск |
| `rproxy logs <имя>` | Логи nginx на VPS |
### Опции для `add` **Если указан домен** — nginx будет слушать порт 80 с этим доменом.
**Если без домена** — nginx будет слушать указанный внешний порт.
| Опция | Описание |
|-------|----------|
| `--domain`, `-d` | Привязать к домену (nginx слушает порт 80) |
| `--port`, `-p` | Указать внешний порт (без домена) |
## 🏗 Архитектура ## 🏗 Архитектура
### На роутере (Keenetic + Entware) ### На роутере (Keenetic + Entware)
- **autossh** — устанавливает устойчивые reverse SSH-туннели до VPS - **autossh** — устанавливает устойчивые обратные SSH-туннели до VPS
- Каждый сервис = отдельный туннель - Каждый сервис = отдельный туннель
- Конфигурация: `/opt/etc/rproxy/` - Конфигурация: `/opt/etc/rproxy/`
- PID-файлы: `/opt/var/run/rproxy/` - PID-файлы: `/opt/var/run/rproxy/`
@ -84,62 +78,49 @@ rproxy add homeassistant 192.168.1.10:8123
- **nginx** — принимает входящие запросы и проксирует в SSH-туннели - **nginx** — принимает входящие запросы и проксирует в SSH-туннели
- Конфиги сервисов: `/etc/nginx/sites-enabled/rproxy_*.conf` - Конфиги сервисов: `/etc/nginx/sites-enabled/rproxy_*.conf`
### Файлы конфигурации ### Файлы
``` ```
/opt/etc/rproxy/ /opt/etc/rproxy/
├── rproxy.conf # Параметры подключения к VPS ├── rproxy.conf # Параметры подключения к VPS
├── id_rsa # SSH-ключ (если выбран)
└── services/ └── services/
├── nas.conf # Конфиг сервиса "nas" ├── nas.conf # Конфиг сервиса
├── camera.conf # Конфиг сервиса "camera" ├── camera.conf
└── ... └── ...
``` ```
## 🔒 Безопасность ## 🔒 Безопасность
- SSH-ключ хранится в `/opt/etc/rproxy/id_rsa` (права 600) - SSH-ключ и конфиг хранятся с правами 600
- Пароль VPS хранится в `/opt/etc/rproxy/rproxy.conf` (права 600)
- Все соединения зашифрованы через SSH - Все соединения зашифрованы через SSH
> **Рекомендация:** используйте авторизацию по SSH-ключу для лучшей безопасности. > **Рекомендация:** используйте авторизацию по SSH-ключу.
## 🔧 Решение проблем ## 🔧 Решение проблем
### Туннель не подключается ### Туннель не подключается
```bash ```bash
# Проверьте статус rproxy # → пункт 1 — проверить статус
rproxy status rproxy # → пункт 6 — перезапустить
# Перезапустите туннель
rproxy restart <имя>
# Проверьте SSH-подключение вручную
ssh -i /opt/etc/rproxy/id_rsa -p 22 root@<VPS_IP>
``` ```
### Сервис не доступен по домену ### Сервис не доступен по домену
- Убедитесь, что DNS-запись домена указывает на IP VPS - Убедитесь, что DNS-запись домена указывает на IP VPS
- Проверьте логи: `rproxy logs <имя>`
- Проверьте nginx на VPS: `ssh root@VPS 'nginx -t'` - Проверьте nginx на VPS: `ssh root@VPS 'nginx -t'`
### Автозапуск не работает ### Автозапуск
```bash Туннели автоматически запускаются при старте роутера через init-скрипт `S98rproxy`.
# Проверьте init-скрипт
ls -la /opt/etc/init.d/S98rproxy
# Проверьте, что сервис enabled
rproxy list
```
## 📦 Требования ## 📦 Требования
### Роутер ### Роутер
- Keenetic с установленным [Entware](https://help.keenetic.com/hc/ru/articles/360021214160) - Keenetic с [Entware](https://help.keenetic.com/hc/ru/articles/360021214160)
- Пакеты: `openssh-client`, `autossh`, `curl`, `sshpass` - Пакеты: `openssh-client`, `autossh`, `curl`, `sshpass` (ставятся автоматически)
### VPS ### VPS
- Linux (Debian/Ubuntu/CentOS) - Linux (Debian/Ubuntu/CentOS)
- nginx (устанавливается автоматически при `setup`) - nginx (устанавливается автоматически)
- SSH-доступ - SSH-доступ
## 📝 Лицензия ## 📝 Лицензия

922
rproxy

File diff suppressed because it is too large Load Diff