feat: интерактивное меню — просто запусти rproxy
This commit is contained in:
parent
f336aec6d5
commit
02a0536b11
117
README.md
117
README.md
|
|
@ -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-доступ
|
||||||
|
|
||||||
## 📝 Лицензия
|
## 📝 Лицензия
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue