From 17a0dc33b203c8aefbae1dc942e8f881563084e8 Mon Sep 17 00:00:00 2001 From: Petro1990 Date: Fri, 13 Mar 2026 22:26:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D1=8F=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20sshpass=20=D0=B8=20=D0=BE=D1=87=D0=B8?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=20README,=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D1=8F=201.5.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 158 ++++++++++++------------------------------------------ rproxy | 10 +++- 2 files changed, 42 insertions(+), 126 deletions(-) diff --git a/README.md b/README.md index faf554f..82cdd3c 100644 --- a/README.md +++ b/README.md @@ -1,155 +1,65 @@ -# 🔄 rProxy +# 🔄 rProxy v1.5.2 **Менеджер обратного прокси для роутеров Keenetic** -Публикация локальных сервисов в интернет через VPS с nginx в качестве обратного прокси. +Публикация локальных сервисов (NAS, умный дом, камеры) в интернет через 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 curl -sSL http://5.104.75.50:3000/Petro1990/rProxy/raw/branch/main/install.sh | sh ``` -### 2. Запуск - +### Запуск ```bash rproxy ``` -Откроется интерактивное меню: +## 📋 Использование -``` -rProxy v1.5.1 +### Настройки авторизации (Пункт 9) +В настройках 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) ➕ Добавить сервис - 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). - -### Файлы - -``` +## 🏗 Структура файлов +```text /opt/etc/rproxy/ -├── rproxy.conf # Параметры подключения к VPS -├── id_rsa # SSH-ключ (если выбран) -└── services/ - ├── nas.conf # Конфиг сервиса - ├── camera.conf - └── ... +├── rproxy.conf # Глобальные настройки (email, дефолтная авторизация) +├── vps/ # Профили VPS серверов +├── services/ # Конфиги опубликованных сервисов +└── id_ed25519 # SSH ключ для доступа к VPS ``` -## 🔒 Безопасность +## ⚠️ Решение проблем -- SSH-ключ и конфиг хранятся с правами 600. -- **Basic Auth**: Возможность защитить любой сервис паролем. Хеши паролей защищены от повреждения оболочкой. -- **SSH-ключи**: Рекомендуемый способ авторизации. +**В: Скрипт постоянно просит установить sshpass?** +О: Это исправлено в версии 1.5.2. Скрипт теперь проверяет пакет через `opkg` и корректно настраивает `PATH`. -## 🔧 Возможности (v1.5.1) +**В: Не работает HTTPS?** +О: Убедитесь, что ваш домен уже направлен на IP вашего VPS (A-запись). Для работы Certbot домен должен быть доступен извне. -- **Авто-авиатор**: Автоматическая установка всех необходимых пакетов Entware. -- **Умная авторизация**: Хранение «пароля по умолчанию» для быстрой публикации защищенных сервисов. -- **RCI/ndmq**: Локальное управление Keenetic без ввода пароля роутера. -- **SSL (HTTPS)**: Автоматическое получение сертификатов через Certbot. -- **Поддержка доменов**: Полная поддержка буквенных адресов VPS. -- **Стелс-режим**: Правильная трансляция Host-заголовков и Cookies для корректной работы веб-интерфейсов. +**В: Как добавить автозапуск?** +О: Инсталлятор автоматически создает `/opt/etc/init.d/S98rproxy`, который поднимает все активные туннели при старте системы. ## 📝 Лицензия - -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 diff --git a/rproxy b/rproxy index a8b7c23..2ffdc0d 100644 --- a/rproxy +++ b/rproxy @@ -3,7 +3,8 @@ # Публикация локальных сервисов через SSH-туннели + nginx на VPS # 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_FILE="$CONF_DIR/rproxy.conf" SERVICES_DIR="$CONF_DIR/services" @@ -142,7 +143,10 @@ ensure_local_deps() { # Проверка sshpass if ! command -v sshpass >/dev/null 2>&1; then - missing="$missing sshpass" + # Дополнительная проверка через opkg на случай если бинарник не в PATH + if ! opkg list-installed sshpass | grep -q sshpass; then + missing="$missing sshpass" + fi fi # Проверка curl (нужен для обновлений) @@ -158,6 +162,8 @@ ensure_local_deps() { msg "Установка $pkg..." opkg install "$pkg" >/dev/null 2>&1 done + # Даем время системе обновить кеш путей + hash -r 2>/dev/null msg "Все зависимости установлены." fi }