Исправлена циклическая установка sshpass и очищен README, версия 1.5.2

This commit is contained in:
Petro1990 2026-03-13 22:26:47 +03:00
parent 7b09d55814
commit 17a0dc33b2
2 changed files with 42 additions and 126 deletions

158
README.md
View File

@ -1,155 +1,65 @@
# 🔄 rProxy # 🔄 rProxy v1.5.2
**Менеджер обратного прокси для роутеров Keenetic** **Менеджер обратного прокси для роутеров Keenetic**
Публикация локальных сервисов в интернет через VPS с nginx в качестве обратного прокси. Публикация локальных сервисов (NAS, умный дом, камеры) в интернет через VPS с Nginx всего за пару кликов.
``` ```
[LAN сервис] ← [Keenetic] ══SSH туннель══▶ [VPS:nginx] → Интернет [LAN сервис] ← [Keenetic] ══SSH туннель══▶ [VPS:nginx] → Интернет
``` ```
## ⚡ Быстрый старт ## ⚡ Особенности
- **Авто-авиатор**: Скрипт сам настраивает VPS, ставит Nginx и Certbot.
- **Бесшовная авторизация**: Использует `ndmq` для доступа к роутеру (пароль роутера не нужен!).
- **Умный Basic Auth**: Защита сервисов паролем с сохранением настроек по умолчанию.
- **SSL "из коробки"**: Автоматическое получение и продление HTTPS сертификатов (Let's Encrypt).
- **Стелс-режим**: Проксирование Cookies и правильных заголовков для работы сложных веб-интерфейсов.
- **Автозапуск**: Интеграция с системой инициализации роутера.
### 1. Установка (на роутере Keenetic) ## 🚀 Установка
> Требуется [Entware](https://help.keenetic.com/hc/ru/articles/360021214160) > Требуется [Entware](https://help.keenetic.com/hc/ru/articles/360021214160). Пакеты `autossh`, `openssl-util` и другие установятся автоматически.
```bash ```bash
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. Запуск ### Запуск
```bash ```bash
rproxy rproxy
``` ```
Откроется интерактивное меню: ## 📋 Использование
``` ### Настройки авторизации (Пункт 9)
rProxy v1.5.1 В настройках VPS можно задать `DEFAULT_AUTH_USER` и `DEFAULT_AUTH_PASS`.
Если они заданы, при добавлении нового сервиса с защитой паролем скрипт предложит использовать их одним нажатием Enter. Это удобно для публикации нескольких сервисов под одной учеткой.
Серверов VPS: 1 Сервисов: 2 Онлайн: 1 ### Добавление сервиса (Пункт 2)
────────────────────────────────────────────────── 1. Выберите имя и локальный адрес (например, `192.168.1.1:80`).
2. Укажите домен (для HTTPS) или внешний порт.
3. Выберите VPS для размещения.
4. Включите защиту паролем (Basic Auth) при необходимости.
1) 📋 Список сервисов и статус ## 🏗 Структура файлов
2) Добавить сервис ```text
3) 📝 Редактировать сервис
4) ❌ Удалить сервис
──────────────────────────────────────────────────
5) ▶️ Запустить туннель
6) ⏹️ Остановить туннель
7) 🔄 Перезапустить туннель
──────────────────────────────────────────────────
9) ⚙️ Настройки VPS
10) 🆙 Обновить rProxy
0) 🚪 Выход
▸ Выберите действие:
```
### 3. Первый запуск
При первом запуске скрипт предложит настроить подключение к VPS:
- **IP-адрес VPS** (или домен)
- **SSH порт** (по умолчанию 22)
- **Пользователь** (по умолчанию root)
- **Авторизация** — SSH-ключ или пароль
### 4. Добавление сервиса
Выберите пункт **2** в меню. Скрипт пошагово спросит:
- Название сервиса
- Адрес локального сервиса (IP:порт)
- Привязка к домену или внешнему порту
**Если указан домен** — nginx будет слушать порт 80 с этим доменом.
**Если без домена** — nginx будет слушать указанный внешний порт.
## 🏗 Архитектура
### На роутере (Keenetic + Entware)
- **autossh** — устанавливает устойчивые обратные SSH-туннели до VPS.
- Конфигурация: `/opt/etc/rproxy/`.
- **Автозависимости**: Скрипт сам ставит `openssl-util`, `sshpass` и `curl` при первом запуске.
### На VPS
- **nginx** — принимает входящие запросы и проксирует в SSH-туннели.
- Автоматическая настройка окружения (установка nginx, certbot, оптимизация SSH).
### Файлы
```
/opt/etc/rproxy/ /opt/etc/rproxy/
├── rproxy.conf # Параметры подключения к VPS ├── rproxy.conf # Глобальные настройки (email, дефолтная авторизация)
├── id_rsa # SSH-ключ (если выбран) ├── vps/ # Профили VPS серверов
└── services/ ├── services/ # Конфиги опубликованных сервисов
├── nas.conf # Конфиг сервиса └── id_ed25519 # SSH ключ для доступа к VPS
├── camera.conf
└── ...
``` ```
## 🔒 Безопасность ## ⚠️ Решение проблем
- SSH-ключ и конфиг хранятся с правами 600. **В: Скрипт постоянно просит установить sshpass?**
- **Basic Auth**: Возможность защитить любой сервис паролем. Хеши паролей защищены от повреждения оболочкой. О: Это исправлено в версии 1.5.2. Скрипт теперь проверяет пакет через `opkg` и корректно настраивает `PATH`.
- **SSH-ключи**: Рекомендуемый способ авторизации.
## 🔧 Возможности (v1.5.1) **В: Не работает HTTPS?**
О: Убедитесь, что ваш домен уже направлен на IP вашего VPS (A-запись). Для работы Certbot домен должен быть доступен извне.
- **Авто-авиатор**: Автоматическая установка всех необходимых пакетов Entware. **В: Как добавить автозапуск?**
- **Умная авторизация**: Хранение «пароля по умолчанию» для быстрой публикации защищенных сервисов. О: Инсталлятор автоматически создает `/opt/etc/init.d/S98rproxy`, который поднимает все активные туннели при старте системы.
- **RCI/ndmq**: Локальное управление Keenetic без ввода пароля роутера.
- **SSL (HTTPS)**: Автоматическое получение сертификатов через Certbot.
- **Поддержка доменов**: Полная поддержка буквенных адресов VPS.
- **Стелс-режим**: Правильная трансляция Host-заголовков и Cookies для корректной работы веб-интерфейсов.
## 📝 Лицензия ## 📝 Лицензия
MIT
## 🔧 Решение проблем
### Туннель не подключается
```bash
rproxy # → пункт 1 — проверить статус
rproxy # → пункт 6 — перезапустить
```
### Сервис не доступен по домену
- Убедитесь, что DNS-запись домена указывает на IP VPS
- Проверьте nginx на VPS: `ssh root@VPS 'nginx -t'`
### Возможности
- Полноценное интерактивное меню (TUI)
- Поддержка SSH-ключей и паролей (автоматическая настройка)
- Автоматическая конфигурация Nginx на VPS
- **Поддержка HTTPS (SSL) через Certbot**
- Управление состоянием сервисов (Start/Stop/Reload)
- Автозапуск туннелей при загрузке роутера
### Автозапуск
Туннели автоматически запускаются при старте роутера через init-скрипт `S98rproxy`.
## 📦 Требования
### Роутер
- Keenetic с [Entware](https://help.keenetic.com/hc/ru/articles/360021214160)
- Пакеты: `openssh-client`, `autossh`, `curl`, `sshpass` (ставятся автоматически)
### VPS
- Linux (Debian/Ubuntu/CentOS)
- nginx (устанавливается автоматически)
- SSH-доступ
## ❓ FAQ (Часто задаваемые вопросы)
### Что такое `sshpass` и нужен ли он?
`sshpass` — это утилита, которая позволяет передавать пароль SSH в автоматическом режиме.
- **Нужен ли он?** Только если вы хотите заходить на VPS по паролю.
- **Если его нет?** Ничего страшного. Скрипт просто потребует использовать SSH-ключ для подключения. Это **намного безопаснее** и является рекомендуемым способом.
- **Почему он может не ставиться?** В некоторых версиях Entware для старых архитектур (например, старые Keenetic на MIPS) этого пакета просто нет в официальном репозитории. В этом случае используйте только авторизацию по ключу.
## 📝 Лицензия
MIT MIT

8
rproxy
View File

@ -3,7 +3,8 @@
# Публикация локальных сервисов через SSH-туннели + nginx на VPS # Публикация локальных сервисов через SSH-туннели + nginx на VPS
# http://5.104.75.50:3000/Petro1990/rProxy # http://5.104.75.50:3000/Petro1990/rProxy
VERSION="1.5.1" VERSION="1.5.2"
export PATH="/opt/bin:/opt/sbin:$PATH"
CONF_DIR="/opt/etc/rproxy" CONF_DIR="/opt/etc/rproxy"
CONF_FILE="$CONF_DIR/rproxy.conf" CONF_FILE="$CONF_DIR/rproxy.conf"
SERVICES_DIR="$CONF_DIR/services" SERVICES_DIR="$CONF_DIR/services"
@ -142,8 +143,11 @@ ensure_local_deps() {
# Проверка sshpass # Проверка sshpass
if ! command -v sshpass >/dev/null 2>&1; then if ! command -v sshpass >/dev/null 2>&1; then
# Дополнительная проверка через opkg на случай если бинарник не в PATH
if ! opkg list-installed sshpass | grep -q sshpass; then
missing="$missing sshpass" missing="$missing sshpass"
fi fi
fi
# Проверка curl (нужен для обновлений) # Проверка curl (нужен для обновлений)
if ! command -v curl >/dev/null 2>&1; then if ! command -v curl >/dev/null 2>&1; then
@ -158,6 +162,8 @@ ensure_local_deps() {
msg "Установка $pkg..." msg "Установка $pkg..."
opkg install "$pkg" >/dev/null 2>&1 opkg install "$pkg" >/dev/null 2>&1
done done
# Даем время системе обновить кеш путей
hash -r 2>/dev/null
msg "Все зависимости установлены." msg "Все зависимости установлены."
fi fi
} }