Rebuild vpn proxy around gateway mode
This commit is contained in:
208
docs/DOCKER.md
208
docs/DOCKER.md
@@ -1,208 +0,0 @@
|
||||
# 🐳 Docker — Веб-интерфейс для управления VPN
|
||||
|
||||
> **Это продвинутый способ** установки с красивым веб-интерфейсом. Для большинства пользователей рекомендуется использовать [основной способ через PowerShell](../README.md).
|
||||
|
||||
---
|
||||
|
||||
## 📖 Что это даёт?
|
||||
|
||||
- 🌐 **Веб-интерфейс** — управление через браузер на http://localhost:3456
|
||||
- 📡 **Подписки** — автоматическое получение списка серверов
|
||||
- 🔄 **Переключение серверов** — в один клик
|
||||
- 💾 **Сохранение настроек** — URL и выбранный сервер сохраняются
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Требования
|
||||
|
||||
### Docker Desktop
|
||||
|
||||
1. Скачайте: https://www.docker.com/products/docker-desktop/
|
||||
2. Установите и запустите
|
||||
3. Убедитесь, что иконка 🐳 есть в трее (панель задач)
|
||||
|
||||
> 💡 На Windows может потребоваться WSL2. Docker Desktop предложит его установить автоматически.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Установка
|
||||
|
||||
### Шаг 1: Откройте терминал
|
||||
|
||||
Откройте PowerShell или Командную строку и перейдите в папку проекта:
|
||||
|
||||
```powershell
|
||||
cd путь\к\папке\vpn-proxy
|
||||
```
|
||||
|
||||
### Шаг 2: Соберите контейнер
|
||||
|
||||
```powershell
|
||||
docker compose build
|
||||
```
|
||||
|
||||
Это создаст образ со всеми необходимыми компонентами. Выполняется один раз.
|
||||
|
||||
### Шаг 3: Запустите
|
||||
|
||||
```powershell
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Флаг `-d` запускает контейнер в фоновом режиме.
|
||||
|
||||
### Шаг 4: Откройте веб-интерфейс
|
||||
|
||||
Перейдите в браузере: **http://localhost:3456**
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Использование веб-интерфейса
|
||||
|
||||
### Режим подписки
|
||||
|
||||
1. Вставьте URL подписки в поле "Подписка"
|
||||
2. Нажмите **"Загрузить серверы"**
|
||||
3. Выберите сервер из списка
|
||||
4. Нажмите **"Применить"**
|
||||
|
||||
### Режим VLESS
|
||||
|
||||
1. Перейдите на вкладку "VLESS Ключ"
|
||||
2. Вставьте VLESS-ссылку (`vless://...`)
|
||||
3. Нажмите **"Применить"**
|
||||
|
||||
> 💡 Настройки сохраняются в папке `data/` и восстанавливаются при перезапуске.
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Порты
|
||||
|
||||
| Порт | Назначение | URL |
|
||||
| ------ | --------------------------- | --------------------- |
|
||||
| `3456` | Веб-интерфейс | http://localhost:3456 |
|
||||
| `8080` | HTTP/SOCKS5 прокси | `127.0.0.1:8080` |
|
||||
| `9090` | API управления (внутренний) | — |
|
||||
|
||||
### 🔧 Изменение порта прокси
|
||||
|
||||
Если порт `8080` уже занят, можно запустить на другом порту (например, `8082`):
|
||||
|
||||
**Способ 1: Через переменную окружения (Mac/Linux)**
|
||||
|
||||
```bash
|
||||
PROXY_PORT=8082 docker compose up -d
|
||||
```
|
||||
|
||||
**Способ 2: Через переменную окружения (Windows PowerShell)**
|
||||
|
||||
```powershell
|
||||
$env:PROXY_PORT=8082; docker compose up -d
|
||||
```
|
||||
|
||||
**Способ 3: Через .env файл (универсальный)**
|
||||
|
||||
Создайте файл `.env` в корне проекта:
|
||||
|
||||
```
|
||||
PROXY_PORT=8082
|
||||
```
|
||||
|
||||
Затем запустите:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
> 💡 URL подключения изменится на `http://127.0.0.1:8082` и `socks5://127.0.0.1:8082`
|
||||
|
||||
---
|
||||
|
||||
## 📋 Управление контейнером
|
||||
|
||||
| Действие | Команда |
|
||||
| ----------------- | ---------------------------------- |
|
||||
| Посмотреть статус | `docker ps` |
|
||||
| Посмотреть логи | `docker logs --tail 50 sing-proxy` |
|
||||
| Остановить | `docker compose stop` |
|
||||
| Запустить снова | `docker compose start` |
|
||||
| Перезапустить | `docker compose restart` |
|
||||
| Полностью удалить | `docker compose down` |
|
||||
| Пересобрать | `docker compose up -d --build` |
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Обновление
|
||||
|
||||
Если вы обновили код из репозитория:
|
||||
|
||||
```powershell
|
||||
# Остановить текущий контейнер
|
||||
docker compose down
|
||||
|
||||
# Пересобрать с новыми изменениями
|
||||
docker compose build --no-cache
|
||||
|
||||
# Запустить заново
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
> 💡 Подписка и настройки сохраняются в папке `data/` и не потеряются.
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Настройка приложений
|
||||
|
||||
### Для VS Code
|
||||
|
||||
```json
|
||||
{
|
||||
"http.proxy": "http://127.0.0.1:8080",
|
||||
"http.proxyStrictSSL": true
|
||||
}
|
||||
```
|
||||
|
||||
### Для браузера
|
||||
|
||||
- **Адрес**: `127.0.0.1`
|
||||
- **Порт**: `8080`
|
||||
- **Тип**: HTTP или SOCKS5
|
||||
|
||||
---
|
||||
|
||||
## ❓ Проблемы и решения
|
||||
|
||||
### Страница localhost:3456 не открывается
|
||||
|
||||
**Причина:** Контейнер не запущен.
|
||||
|
||||
```powershell
|
||||
# Проверьте статус
|
||||
docker ps
|
||||
|
||||
# Если контейнера нет — запустите
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### "Connection refused"
|
||||
|
||||
**Причина:** VPN-ссылка не применена.
|
||||
|
||||
1. Откройте http://localhost:3456
|
||||
2. Примените VLESS-ссылку или загрузите подписку
|
||||
|
||||
### Медленное подключение
|
||||
|
||||
Попробуйте другой сервер в веб-интерфейсе — некоторые серверы могут быть перегружены.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Ограничения Docker на Windows
|
||||
|
||||
- **UDP для Discord:** Docker на Windows/macOS имеет проблемы с UDP ASSOCIATE для SOCKS5. Для Discord рекомендуется использовать [нативную установку](../README.md).
|
||||
|
||||
- **Для полной поддержки UDP** используйте [установку на Linux сервер](SERVER.md) с `network_mode: host`.
|
||||
|
||||
---
|
||||
|
||||
[← Вернуться к основной инструкции](../README.md)
|
||||
278
docs/SERVER.md
278
docs/SERVER.md
@@ -1,278 +0,0 @@
|
||||
# 🌍 Установка на Сервер (Linux VPS)
|
||||
|
||||
> Эта инструкция для установки прокси на удалённый сервер. После установки вы сможете подключаться к нему с любого устройства.
|
||||
|
||||
---
|
||||
|
||||
## 📖 Зачем это нужно?
|
||||
|
||||
- 🌐 **Один прокси для всех устройств** — компьютер, телефон, планшет
|
||||
- 🔒 **Работает 24/7** — не нужно держать компьютер включённым
|
||||
- 📡 **Полная поддержка UDP** — голосовые звонки и игры работают отлично
|
||||
- 🏠 **Доступ из любого места** — дома, на работе, в поездке
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Требования к серверу
|
||||
|
||||
- **ОС:** Ubuntu 20.04+, Debian 11+, или любой современный Linux
|
||||
- **Ресурсы:** Минимум 512 MB RAM, 1 CPU
|
||||
- **Порты:** 3456 (веб-интерфейс), 8080 (прокси)
|
||||
- **Доступ:** SSH подключение
|
||||
|
||||
> 💡 Подойдёт любой VPS за $3-5/месяц от DigitalOcean, Vultr, Hetzner и др.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Установка
|
||||
|
||||
### Шаг 1: Подключитесь к серверу
|
||||
|
||||
Откройте терминал (PowerShell на Windows, Terminal на Mac/Linux):
|
||||
|
||||
```bash
|
||||
ssh root@ваш_сервер_ip
|
||||
```
|
||||
|
||||
Введите пароль когда попросят.
|
||||
|
||||
> 💡 **Совет:** Если вы на Windows и нет ssh команды, используйте PuTTY или Windows Terminal.
|
||||
|
||||
---
|
||||
|
||||
### Шаг 2: Установите Docker
|
||||
|
||||
Если Docker ещё не установлен:
|
||||
|
||||
```bash
|
||||
# Автоматическая установка Docker
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
|
||||
# Проверка что Docker работает
|
||||
docker --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Шаг 3: Загрузите проект
|
||||
|
||||
**Вариант A: Через Git**
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-repo/vpn-proxy.git
|
||||
cd vpn-proxy
|
||||
```
|
||||
|
||||
**Вариант B: Загрузка файлов вручную**
|
||||
|
||||
Если git недоступен, скачайте ZIP архив и распакуйте на сервере.
|
||||
|
||||
---
|
||||
|
||||
### Шаг 4: Запустите контейнер
|
||||
|
||||
> ⚠️ **Важно:** Используйте `docker-compose.server.yml` — он настроен для серверов!
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.server.yml up -d
|
||||
```
|
||||
|
||||
Это запустит контейнер с `network_mode: host`, что решает проблемы с UDP.
|
||||
|
||||
---
|
||||
|
||||
### Шаг 5: Откройте порты в файрволе
|
||||
|
||||
**Для UFW (Ubuntu/Debian):**
|
||||
|
||||
```bash
|
||||
ufw allow 3456/tcp # Веб-интерфейс
|
||||
ufw allow 8080/tcp # Прокси TCP
|
||||
ufw allow 8080/udp # Прокси UDP (для голоса/игр)
|
||||
ufw reload
|
||||
```
|
||||
|
||||
**Для firewalld (CentOS/RHEL):**
|
||||
|
||||
```bash
|
||||
firewall-cmd --permanent --add-port=3456/tcp
|
||||
firewall-cmd --permanent --add-port=8080/tcp
|
||||
firewall-cmd --permanent --add-port=8080/udp
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
**Для iptables:**
|
||||
|
||||
```bash
|
||||
iptables -A INPUT -p tcp --dport 3456 -j ACCEPT
|
||||
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
|
||||
iptables -A INPUT -p udp --dport 8080 -j ACCEPT
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Шаг 6: Настройте VPN через веб-интерфейс
|
||||
|
||||
1. Откройте в браузере: `http://ваш_сервер_ip:3456`
|
||||
2. Вставьте VLESS-ссылку или URL подписки
|
||||
3. Нажмите "Применить"
|
||||
|
||||
---
|
||||
|
||||
## ✅ Проверка работы
|
||||
|
||||
На сервере:
|
||||
|
||||
```bash
|
||||
# Проверить что контейнер запущен
|
||||
docker ps
|
||||
|
||||
# Посмотреть логи
|
||||
docker logs --tail 20 sing-proxy
|
||||
```
|
||||
|
||||
С вашего компьютера:
|
||||
|
||||
```bash
|
||||
# Проверить прокси
|
||||
curl -x http://ваш_сервер_ip:8080 https://ipinfo.io/ip
|
||||
```
|
||||
|
||||
Должен показать IP VPN-сервера (не IP вашего VPS).
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ Подключение с Windows
|
||||
|
||||
### Настройка в manage.ps1
|
||||
|
||||
При настройке Discord (пункт [2]) вы можете указать адрес удалённого прокси:
|
||||
|
||||
```
|
||||
Введите адрес прокси (IP:порт): ваш_сервер_ip:8080
|
||||
```
|
||||
|
||||
### Настройка в браузере/приложениях
|
||||
|
||||
- **Адрес:** `ваш_сервер_ip`
|
||||
- **Порт:** `8080`
|
||||
- **Тип:** HTTP или SOCKS5
|
||||
|
||||
---
|
||||
|
||||
## 📋 Управление
|
||||
|
||||
| Действие | Команда |
|
||||
|----------|---------|
|
||||
| Посмотреть статус | `docker ps` |
|
||||
| Логи | `docker logs --tail 50 sing-proxy` |
|
||||
| Остановить | `docker compose -f docker-compose.server.yml stop` |
|
||||
| Запустить | `docker compose -f docker-compose.server.yml start` |
|
||||
| Перезапустить | `docker compose -f docker-compose.server.yml restart` |
|
||||
| Удалить | `docker compose -f docker-compose.server.yml down` |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Рекомендации по безопасности
|
||||
|
||||
### 1. Смените стандартные порты
|
||||
|
||||
Отредактируйте `docker-compose.server.yml`:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- PORT=54321 # Вместо 3456
|
||||
- PROXY_PORT=12345 # Вместо 8080
|
||||
```
|
||||
|
||||
### 2. Ограничьте доступ к веб-интерфейсу
|
||||
|
||||
Если веб-интерфейс нужен только для первоначальной настройки:
|
||||
|
||||
```bash
|
||||
# Закрыть веб-порт после настройки
|
||||
ufw delete allow 3456/tcp
|
||||
```
|
||||
|
||||
### 3. Используйте SSH туннель
|
||||
|
||||
Для безопасного доступа к веб-интерфейсу:
|
||||
|
||||
```bash
|
||||
ssh -L 3456:localhost:3456 root@ваш_сервер_ip
|
||||
```
|
||||
|
||||
Затем откройте http://localhost:3456 в браузере.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Обновление
|
||||
|
||||
```bash
|
||||
cd vpn-proxy
|
||||
|
||||
# Получить обновления
|
||||
git pull
|
||||
|
||||
# Пересобрать контейнер
|
||||
docker compose -f docker-compose.server.yml down
|
||||
docker compose -f docker-compose.server.yml build --no-cache
|
||||
docker compose -f docker-compose.server.yml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ Проблемы и решения
|
||||
|
||||
### Порт 3456 не открывается
|
||||
|
||||
**Причина:** Файрвол блокирует подключения.
|
||||
|
||||
**Решение:** Проверьте настройки файрвола, см. Шаг 5.
|
||||
|
||||
### "Permission denied" при запуске Docker
|
||||
|
||||
**Решение:**
|
||||
|
||||
```bash
|
||||
# Добавить пользователя в группу docker
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Перезайти
|
||||
exit
|
||||
ssh root@ваш_сервер_ip
|
||||
```
|
||||
|
||||
### Контейнер постоянно перезапускается
|
||||
|
||||
```bash
|
||||
# Посмотреть логи ошибок
|
||||
docker logs sing-proxy
|
||||
```
|
||||
|
||||
Обычно проблема в неверной VLESS-ссылке.
|
||||
|
||||
---
|
||||
|
||||
## 📐 Изменение портов
|
||||
|
||||
По умолчанию:
|
||||
- **3456** — веб-интерфейс
|
||||
- **8080** — прокси
|
||||
|
||||
Для изменения создайте файл `.env` в папке проекта:
|
||||
|
||||
```env
|
||||
PORT=54321
|
||||
PROXY_PORT=12345
|
||||
```
|
||||
|
||||
И перезапустите:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.server.yml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[← Вернуться к основной инструкции](../README.md)
|
||||
105
docs/roadmap.md
Normal file
105
docs/roadmap.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Roadmap: VPN Proxy rebuild
|
||||
|
||||
## Целевая модель
|
||||
|
||||
Проект должен стать multi-mode системой вокруг `sing-box`:
|
||||
|
||||
| Режим | Назначение | Runtime | Статус |
|
||||
| --- | --- | --- | --- |
|
||||
| `gateway` | LXC/VPS как gateway для роутера и всей сети | Docker `network_mode: host` + TProxy | делаем первым |
|
||||
| `desktop-proxy` | Mac/Linux локальный HTTP/SOCKS proxy с fallback | Docker bridged ports | позже переносим из старой реализации |
|
||||
| `windows-gaming` | Windows для игр/Discord/Vesktop | native `sing-box.exe` + ProxiFyre | позже приводим в порядок |
|
||||
|
||||
## Gateway mode
|
||||
|
||||
Цель: контейнер, который становится прозрачным gateway для сети.
|
||||
|
||||
Требования:
|
||||
|
||||
- `sing-box` внутри контейнера.
|
||||
- `network_mode: host`.
|
||||
- `CAP_NET_ADMIN` и `CAP_NET_RAW`.
|
||||
- TProxy inbound на `7895`.
|
||||
- Mixed HTTP/SOCKS inbound на `8080`.
|
||||
- Web UI на `3456`.
|
||||
- Subscription URL вводится в UI, парсится, пользователь выбирает сервер.
|
||||
- Пользовательские routing lists управляются из UI.
|
||||
- Генерируется `/etc/sing-box/config.json`.
|
||||
- `sing-box check` перед применением.
|
||||
- Restart `sing-box` после применения.
|
||||
- Idempotent iptables setup.
|
||||
- Cleanup iptables/ip rule/ip route при остановке контейнера.
|
||||
|
||||
Маршрутизация v1:
|
||||
|
||||
- private IP ranges -> `direct`.
|
||||
- пользовательские списки -> `direct`, `vpn` или `block`.
|
||||
- `geoip-ru` -> `direct`.
|
||||
- `geosite-category-ru` -> `direct`.
|
||||
- все остальное -> выбранный VPN outbound.
|
||||
|
||||
Порядок правил:
|
||||
|
||||
1. safety private-direct, чтобы не ломать LAN.
|
||||
2. custom routing lists из UI.
|
||||
3. RU direct rules.
|
||||
4. default VPN outbound.
|
||||
|
||||
Формат пользовательского списка:
|
||||
|
||||
- `name`.
|
||||
- `enabled`.
|
||||
- `outbound`: `direct`, `vpn`, `block`.
|
||||
- `domains`: exact domains.
|
||||
- `domainSuffixes`: доменные suffix, удобно для игр/сервисов.
|
||||
- `domainKeywords`: keyword matching.
|
||||
- `ipCidrs`: CIDR ranges.
|
||||
- `ports`: TCP/UDP ports.
|
||||
- `networks`: `tcp`, `udp`.
|
||||
- UI должен автосохранять списки с debounce, чтобы polling state не затирал незавершенное редактирование.
|
||||
|
||||
Важно: gateway не видит process name на клиентском ПК. Для сценария вроде "League of Legends всегда direct" нужны домены, CIDR и порты Riot, а не имя процесса.
|
||||
|
||||
Отдельно решить позже:
|
||||
|
||||
- DNS strategy: DHCP DNS, DNS redirect или local DNS inbound.
|
||||
- IPv6 TProxy.
|
||||
- nftables backend.
|
||||
- health checks и smoke diagnostics.
|
||||
- secret storage через Infisical/Vault/env.
|
||||
|
||||
## Desktop proxy mode
|
||||
|
||||
Цель: сохранить удобный Docker-сценарий для Mac/Linux без TProxy.
|
||||
|
||||
Требования:
|
||||
|
||||
- UI на `3456`.
|
||||
- Mixed inbound на `8080`.
|
||||
- Subscription parser.
|
||||
- Выбор сервера.
|
||||
- Fallback proxy через `urltest`.
|
||||
- Direct mode toggle.
|
||||
- Не требует `NET_ADMIN`.
|
||||
|
||||
## Windows gaming mode
|
||||
|
||||
Цель: сохранить сценарий для Discord/Vesktop/игр.
|
||||
|
||||
Требования:
|
||||
|
||||
- Native `sing-box.exe`.
|
||||
- Scheduled task или Windows service.
|
||||
- ProxiFyre + WinPacketFilter для приложений, которые не умеют proxy.
|
||||
- Управление из PowerShell helper.
|
||||
- Позже можно сделать Electron/Tauri UI поверх privileged helper.
|
||||
|
||||
## Рабочий порядок
|
||||
|
||||
1. Сделать новый gateway root.
|
||||
2. Реализовать Docker image + entrypoint TProxy lifecycle.
|
||||
3. Реализовать маленький control-server.
|
||||
4. Реализовать Vite + React UI для subscription -> server select -> apply.
|
||||
5. Добавить gateway docs/install script.
|
||||
6. Потом переносить desktop-proxy.
|
||||
7. Потом приводить Windows mode к новой архитектуре.
|
||||
Reference in New Issue
Block a user