Compare commits
No commits in common. "17a0dc33b203c8aefbae1dc942e8f881563084e8" and "e35bcc0aedc7342337d4199c971a99f0564abdcc" have entirely different histories.
17a0dc33b2
...
e35bcc0aed
149
README.md
149
README.md
|
|
@ -1,65 +1,144 @@
|
||||||
# 🔄 rProxy v1.5.2
|
# 🔄 rProxy
|
||||||
|
|
||||||
**Менеджер обратного прокси для роутеров Keenetic**
|
**Менеджер обратного прокси для роутеров Keenetic**
|
||||||
|
|
||||||
Публикация локальных сервисов (NAS, умный дом, камеры) в интернет через VPS с Nginx всего за пару кликов.
|
Публикация локальных сервисов в интернет через 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). Пакеты `autossh`, `openssl-util` и другие установятся автоматически.
|
> Требуется [Entware](https://help.keenetic.com/hc/ru/articles/360021214160)
|
||||||
|
|
||||||
```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)
|
```
|
||||||
В настройках VPS можно задать `DEFAULT_AUTH_USER` и `DEFAULT_AUTH_PASS`.
|
╔══════════════════════════════════════════════╗
|
||||||
Если они заданы, при добавлении нового сервиса с защитой паролем скрипт предложит использовать их одним нажатием Enter. Это удобно для публикации нескольких сервисов под одной учеткой.
|
║ rProxy v1.0.0 ║
|
||||||
|
╚══════════════════════════════════════════════╝
|
||||||
|
|
||||||
### Добавление сервиса (Пункт 2)
|
VPS: 5.104.75.50 Сервисов: 2 Онлайн: 1
|
||||||
1. Выберите имя и локальный адрес (например, `192.168.1.1:80`).
|
──────────────────────────────────────────────────
|
||||||
2. Укажите домен (для HTTPS) или внешний порт.
|
|
||||||
3. Выберите VPS для размещения.
|
|
||||||
4. Включите защиту паролем (Basic Auth) при необходимости.
|
|
||||||
|
|
||||||
## 🏗 Структура файлов
|
1) 📋 Список сервисов и статус
|
||||||
```text
|
2) ➕ Добавить сервис
|
||||||
/opt/etc/rproxy/
|
3) ❌ Удалить сервис
|
||||||
├── rproxy.conf # Глобальные настройки (email, дефолтная авторизация)
|
──────────────────────────────────────────────────
|
||||||
├── vps/ # Профили VPS серверов
|
4) ▶️ Запустить туннель
|
||||||
├── services/ # Конфиги опубликованных сервисов
|
5) ⏹️ Остановить туннель
|
||||||
└── id_ed25519 # SSH ключ для доступа к VPS
|
6) 🔄 Перезапустить туннель
|
||||||
|
──────────────────────────────────────────────────
|
||||||
|
7) ⚙️ Настройки VPS
|
||||||
|
0) 🚪 Выход
|
||||||
|
|
||||||
|
▸ Выберите действие:
|
||||||
```
|
```
|
||||||
|
|
||||||
## ⚠️ Решение проблем
|
### 3. Первый запуск
|
||||||
|
|
||||||
**В: Скрипт постоянно просит установить sshpass?**
|
При первом запуске скрипт предложит настроить подключение к VPS:
|
||||||
О: Это исправлено в версии 1.5.2. Скрипт теперь проверяет пакет через `opkg` и корректно настраивает `PATH`.
|
- **IP-адрес VPS**
|
||||||
|
- **SSH порт** (по умолчанию 22)
|
||||||
|
- **Пользователь** (по умолчанию root)
|
||||||
|
- **Авторизация** — SSH-ключ или пароль
|
||||||
|
|
||||||
**В: Не работает HTTPS?**
|
### 4. Добавление сервиса
|
||||||
О: Убедитесь, что ваш домен уже направлен на IP вашего VPS (A-запись). Для работы Certbot домен должен быть доступен извне.
|
|
||||||
|
|
||||||
**В: Как добавить автозапуск?**
|
Выберите пункт **2** в меню. Скрипт пошагово спросит:
|
||||||
О: Инсталлятор автоматически создает `/opt/etc/init.d/S98rproxy`, который поднимает все активные туннели при старте системы.
|
- Название сервиса
|
||||||
|
- Адрес локального сервиса (IP:порт)
|
||||||
|
- Привязка к домену или внешнему порту
|
||||||
|
|
||||||
|
**Если указан домен** — nginx будет слушать порт 80 с этим доменом.
|
||||||
|
**Если без домена** — nginx будет слушать указанный внешний порт.
|
||||||
|
|
||||||
|
## 🏗 Архитектура
|
||||||
|
|
||||||
|
### На роутере (Keenetic + Entware)
|
||||||
|
- **autossh** — устанавливает устойчивые обратные SSH-туннели до VPS
|
||||||
|
- Каждый сервис = отдельный туннель
|
||||||
|
- Конфигурация: `/opt/etc/rproxy/`
|
||||||
|
- PID-файлы: `/opt/var/run/rproxy/`
|
||||||
|
|
||||||
|
### На VPS
|
||||||
|
- **nginx** — принимает входящие запросы и проксирует в SSH-туннели
|
||||||
|
- Конфиги сервисов: `/etc/nginx/sites-enabled/rproxy_*.conf`
|
||||||
|
|
||||||
|
### Файлы
|
||||||
|
|
||||||
|
```
|
||||||
|
/opt/etc/rproxy/
|
||||||
|
├── rproxy.conf # Параметры подключения к VPS
|
||||||
|
├── id_rsa # SSH-ключ (если выбран)
|
||||||
|
└── services/
|
||||||
|
├── nas.conf # Конфиг сервиса
|
||||||
|
├── camera.conf
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔒 Безопасность
|
||||||
|
|
||||||
|
- SSH-ключ и конфиг хранятся с правами 600
|
||||||
|
- Все соединения зашифрованы через SSH
|
||||||
|
|
||||||
|
> **Рекомендация:** используйте авторизацию по SSH-ключу.
|
||||||
|
|
||||||
|
## 🔧 Решение проблем
|
||||||
|
|
||||||
|
### Туннель не подключается
|
||||||
|
```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
|
||||||
|
|
|
||||||
12
rproxy
12
rproxy
|
|
@ -3,8 +3,7 @@
|
||||||
# Публикация локальных сервисов через 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.2"
|
VERSION="1.5.0"
|
||||||
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"
|
||||||
|
|
@ -35,7 +34,9 @@ clear_screen() { printf "\033[2J\033[H"; }
|
||||||
|
|
||||||
draw_box() {
|
draw_box() {
|
||||||
local title="$1"
|
local title="$1"
|
||||||
header "$title"
|
printf "${CYAN}╔══════════════════════════════════════════════╗${NC}\n"
|
||||||
|
printf "${CYAN}║${NC} ${BOLD}%-44s${NC}${CYAN}║${NC}\n" "$title"
|
||||||
|
printf "${CYAN}╚══════════════════════════════════════════════╝${NC}\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_separator() {
|
draw_separator() {
|
||||||
|
|
@ -143,11 +144,8 @@ 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
|
||||||
|
|
@ -162,8 +160,6 @@ 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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue