# 🔄 rProxy **Менеджер обратного прокси для роутеров Keenetic** Публикация локальных сервисов в интернет через VPS с nginx в качестве обратного прокси. ``` [LAN сервис] ← [Keenetic] ══SSH туннель══▶ [VPS:nginx] → Интернет ``` ## ⚡ Быстрый старт ### 1. Установка (на роутере Keenetic) > Требуется [Entware](https://help.keenetic.com/hc/ru/articles/360021214160) ```bash curl -sSL http://5.104.75.50:3000/Petro1990/rProxy/raw/branch/main/install.sh | sh ``` ### 2. Запуск ```bash rproxy ``` Откроется интерактивное меню: ``` rProxy v1.5.1 Серверов VPS: 1 Сервисов: 2 Онлайн: 1 ────────────────────────────────────────────────── 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). ### Файлы ``` /opt/etc/rproxy/ ├── rproxy.conf # Параметры подключения к VPS ├── id_rsa # SSH-ключ (если выбран) └── services/ ├── nas.conf # Конфиг сервиса ├── camera.conf └── ... ``` ## 🔒 Безопасность - SSH-ключ и конфиг хранятся с правами 600. - **Basic Auth**: Возможность защитить любой сервис паролем. Хеши паролей защищены от повреждения оболочкой. - **SSH-ключи**: Рекомендуемый способ авторизации. ## 🔧 Возможности (v1.5.1) - **Авто-авиатор**: Автоматическая установка всех необходимых пакетов Entware. - **Умная авторизация**: Хранение «пароля по умолчанию» для быстрой публикации защищенных сервисов. - **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