Rebuild vpn proxy around gateway mode
This commit is contained in:
379
README.md
379
README.md
@@ -1,363 +1,34 @@
|
||||
# 🌐 VPN Proxy — Домашний VPN в одной программе
|
||||
# VPN Proxy Gateway
|
||||
|
||||
> **Простыми словами:** ваш компьютер подключается к удалённому VPN-серверу, и весь интернет-трафик идёт через него. Это нужно для доступа к заблокированным сайтам или для защиты данных в публичных Wi-Fi сетях.
|
||||
Новая версия проекта начинается с `gateway`-режима: контейнер поднимается в `network_mode: host`, применяет TProxy-правила на хосте и запускает `sing-box` как прозрачный gateway для устройств в локальной сети.
|
||||
|
||||
---
|
||||
## Что уже заложено
|
||||
|
||||
## 📖 Что это такое?
|
||||
- Web UI на Vite + React.
|
||||
- Один простой Node control-server вместо отдельного backend framework.
|
||||
- Парсинг subscription URL: JSON config, base64 список, plain-text VLESS links.
|
||||
- Routing lists управляются из UI: можно отправлять отдельные домены/CIDR/порты в `direct`, `vpn` или `block`.
|
||||
- Генерация `sing-box` config для gateway:
|
||||
- `tproxy` inbound на `7895`;
|
||||
- `mixed` inbound на `8080`;
|
||||
- private IP ranges напрямую;
|
||||
- RU rule sets напрямую;
|
||||
- остальное через выбранный outbound.
|
||||
- Docker entrypoint с idempotent TProxy setup/cleanup.
|
||||
|
||||
Это набор инструментов, который позволяет:
|
||||
## Быстрый старт
|
||||
|
||||
1. **Запустить VPN-прокси** на вашем компьютере
|
||||
2. **Управлять через удобное меню** — всё настраивается автоматически
|
||||
3. **Подключить браузер или приложения** (например, VS Code, Discord) через этот прокси
|
||||
4. **Работает с UDP** — голосовые звонки и игры тоже работают!
|
||||
|
||||
### 🎯 Для кого это?
|
||||
|
||||
- Пользователи, которым нужен VPN для работы или доступа к заблокированным ресурсам
|
||||
- Разработчики, которые хотят направить трафик VS Code или других программ через VPN
|
||||
- Геймеры, которым нужно запустить игры или Discord через VPN
|
||||
- Люди, которые получили VLESS ссылку от VPN-провайдера
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Как это работает?
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
||||
│ Ваш браузер │────▶│ VPN Proxy │────▶│ VPN Сервер │────▶ Интернет
|
||||
│ или Discord │ │ (порт 1080) │ │ (в другой стране)│
|
||||
└─────────────────┘ └──────────────────┘ └──────────────────┘
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose -f docker-compose.gateway.yml up -d --build
|
||||
```
|
||||
|
||||
---
|
||||
UI будет доступен на хосте по `http://<gateway-host>:3456`.
|
||||
|
||||
## 🔧 Перед началом: Требования
|
||||
## Важные ограничения v0.1
|
||||
|
||||
### ✅ PowerShell 7 (Обязательно!)
|
||||
|
||||
> ⚠️ **Важно:** Скрипты требуют PowerShell 7. Стандартный Windows PowerShell 5.1 **не подойдёт!**
|
||||
|
||||
#### Проверьте вашу версию
|
||||
|
||||
Откройте любой PowerShell и выполните:
|
||||
|
||||
```powershell
|
||||
$PSVersionTable.PSVersion.Major
|
||||
```
|
||||
|
||||
- Если результат **7 или выше** — всё хорошо, переходите к установке ✅
|
||||
- Если **5 или ниже** — нужно установить PowerShell 7 👇
|
||||
|
||||
#### Установка PowerShell 7
|
||||
|
||||
**Способ 1: Через winget (самый простой)**
|
||||
|
||||
Откройте обычный PowerShell или Командную строку и выполните:
|
||||
|
||||
```powershell
|
||||
winget install Microsoft.PowerShell
|
||||
```
|
||||
|
||||
После установки закройте окно и откройте **PowerShell 7** (он появится в меню Пуск).
|
||||
|
||||
**Способ 2: Скачать вручную**
|
||||
|
||||
1. Перейдите: https://github.com/PowerShell/PowerShell/releases/latest
|
||||
2. Скачайте файл `PowerShell-7.x.x-win-x64.msi` (где x.x.x — версия)
|
||||
3. Запустите установщик и следуйте инструкциям
|
||||
4. После установки используйте **PowerShell 7** из меню Пуск
|
||||
|
||||
> 💡 **Как отличить?** PowerShell 7 имеет чёрный фон и надпись "pwsh" или "PowerShell 7". Старый PowerShell — синий фон.
|
||||
|
||||
---
|
||||
|
||||
### ✅ URL Подписки или VLESS-ссылка
|
||||
|
||||
Получите от вашего VPN-провайдера:
|
||||
|
||||
- **Подписку**: URL, который начинается с `http://` или `https://`
|
||||
- **VLESS-ссылку**: начинается с `vless://...`
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Установка на Windows
|
||||
|
||||
### ⚡ Быстрая установка (Одной командой)
|
||||
|
||||
Самый быстрый способ — использовать наш автоматический установщик. Он сам скачает проект и распакует его в `C:\Tools\vpn-proxy`.
|
||||
|
||||
1. Откройте **PowerShell 7** от имени **Администратора**
|
||||
2. Скопируйте и вставьте команду:
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy RemoteSigned -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iwr https://git.dokops.ru/dokril/vpn-proxy/raw/branch/master/install.ps1 | iex
|
||||
```
|
||||
|
||||
> 💡 Если команда выдаст ошибку 404, попробуйте заменить `master` на `main` в ссылке, или используйте ручную установку ниже.
|
||||
|
||||
---
|
||||
|
||||
### 📦 Ручная установка (если авто-установка не работает)
|
||||
|
||||
Если вы предпочитаете всё делать сами:
|
||||
|
||||
#### Шаг 1: Скачайте проект
|
||||
|
||||
Мы рекомендуем использовать папку `C:\Tools`.
|
||||
|
||||
```powershell
|
||||
# 1. Создаем папку и переходим
|
||||
New-Item -ItemType Directory -Force -Path "C:\Tools" | Out-Null
|
||||
cd C:\Tools
|
||||
|
||||
# 2. Клонируем или скачиваем архив
|
||||
git clone https://git.dokops.ru/dokril/vpn-proxy
|
||||
|
||||
# (Или скачайте ZIP вручную и распакуйте в C:\Tools\vpn-proxy)
|
||||
```
|
||||
|
||||
#### Шаг 2: Запустите
|
||||
|
||||
```powershell
|
||||
cd C:\Tools\vpn-proxy
|
||||
.\manage.ps1
|
||||
```
|
||||
|
||||
### Шаг 3: Выберите пункт [1] — VPN Клиент
|
||||
|
||||
```
|
||||
[1] 📦 VPN Клиент (Sing-box) [НЕ УСТАНОВЛЕН]
|
||||
Основной способ. Поддерживает UDP и игры.
|
||||
|
||||
[2] 🎮 Настройка Discord/Vesktop [НЕ АКТИВЕН]
|
||||
Маршрутизация приложений через прокси.
|
||||
|
||||
---------------------------------------
|
||||
[3] 🔄 Обновить статус
|
||||
[U] ❌ Удалить всё (Uninstall)
|
||||
[q] Выход
|
||||
|
||||
👉 Ваш выбор: 1
|
||||
```
|
||||
|
||||
### Шаг 4: Введите VLESS-ссылку или URL подписки
|
||||
|
||||
Скрипт попросит ввести ссылку. Вставьте и нажмите Enter.
|
||||
|
||||
**Готово!** 🎉 Прокси запущен на `127.0.0.1:1080`
|
||||
|
||||
### 📂 Где всё хранится?
|
||||
|
||||
Всё организовано в папке `C:\Tools`:
|
||||
|
||||
1. **Сам проект:** `C:\Tools\vpn-proxy`
|
||||
- `scripts/` — Скрипты управления (PowerShell)
|
||||
- `web/` — Веб-интерфейс (для Docker/Python запуска)
|
||||
- `docker/` — Конфигурация контейнеров
|
||||
2. **Sing-box (VPN клиент):** `C:\Tools\sing-box`
|
||||
- Здесь лежит `config.json` с вашими настройками и сам исполняемый файл
|
||||
3. **ProxiFyre (для Discord):** `C:\Program Files\ProxiFyre` (системная служба)
|
||||
|
||||
---
|
||||
|
||||
## ✅ Проверка работы
|
||||
|
||||
После установки меню покажет статус и адреса подключения:
|
||||
|
||||
```
|
||||
[1] 📦 VPN Клиент (Sing-box) [РАБОТАЕТ]
|
||||
Основной способ. Поддерживает UDP и игры.
|
||||
|
||||
📡 ПОДКЛЮЧЕНИЕ К ПРОКСИ
|
||||
─────────────────────────────
|
||||
Локально: 127.0.0.1:1080
|
||||
Из сети:
|
||||
192.168.1.100:1080
|
||||
```
|
||||
|
||||
### Проверка через терминал
|
||||
|
||||
```powershell
|
||||
# Без прокси — покажет ваш домашний IP
|
||||
Invoke-WebRequest -Uri "https://ipinfo.io/ip" | Select-Object -ExpandProperty Content
|
||||
|
||||
# Через прокси — должен показать IP VPN-сервера
|
||||
Invoke-WebRequest -Proxy "http://127.0.0.1:1080" -Uri "https://ipinfo.io/ip" | Select-Object -ExpandProperty Content
|
||||
```
|
||||
|
||||
Если IP-адреса разные — VPN работает! 🎉
|
||||
|
||||
---
|
||||
|
||||
## 🎮 Настройка Discord / Vesktop
|
||||
|
||||
Discord не поддерживает системные настройки прокси, поэтому нужна дополнительная настройка.
|
||||
|
||||
### Требования
|
||||
|
||||
- ✅ Установленный VPN клиент (пункт [1] в меню)
|
||||
- ✅ VPN клиент должен быть запущен (статус "РАБОТАЕТ")
|
||||
|
||||
### Установка
|
||||
|
||||
1. Запустите `.\manage.ps1`
|
||||
2. Выберите пункт **[2] — Настройка Discord/Vesktop**
|
||||
3. Выберите какое приложение настроить:
|
||||
- Discord
|
||||
- Vesktop
|
||||
- Оба
|
||||
|
||||
**Что устанавливается:**
|
||||
|
||||
- Windows Packet Filter — драйвер для перехвата трафика
|
||||
- ProxiFyre — служба, которая направляет трафик Discord через прокси
|
||||
|
||||
После установки Discord/Vesktop будут автоматически работать через VPN!
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Настройка приложений
|
||||
|
||||
### Для VS Code
|
||||
|
||||
Откройте настройки (Ctrl + ,), найдите "proxy" и добавьте:
|
||||
|
||||
```
|
||||
http.proxy: http://127.0.0.1:1080
|
||||
```
|
||||
|
||||
Или добавьте в `settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"http.proxy": "http://127.0.0.1:1080",
|
||||
"http.proxyStrictSSL": true
|
||||
}
|
||||
```
|
||||
|
||||
### Для браузера
|
||||
|
||||
В настройках прокси вашего браузера укажите:
|
||||
|
||||
- **Тип**: HTTP или SOCKS5
|
||||
- **Адрес**: `127.0.0.1`
|
||||
- **Порт**: `1080`
|
||||
|
||||
> 💡 **Совет:** Используйте расширение [Proxy SwitchyOmega](https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif) для удобного переключения прокси в Chrome.
|
||||
|
||||
### Для других программ
|
||||
|
||||
Укажите SOCKS5 прокси: `127.0.0.1:1080`
|
||||
|
||||
---
|
||||
|
||||
## 📋 Управление
|
||||
|
||||
При повторном запуске `.\manage.ps1` скрипт покажет меню управления:
|
||||
|
||||
| Действие | Как сделать |
|
||||
| ----------------- | ------------------------------------ |
|
||||
| Посмотреть статус | Запустить `.\manage.ps1` |
|
||||
| Сменить сервер | Пункт [1] → "Сменить VLESS/Подписку" |
|
||||
| Перезапустить | Пункт [1] → "Перезапустить" |
|
||||
| Остановить | Пункт [1] → "Остановить" |
|
||||
| Полностью удалить | Пункт [U] |
|
||||
|
||||
---
|
||||
|
||||
## 🌍 Подключение из локальной сети
|
||||
|
||||
Если вы хотите использовать прокси с других устройств (телефон, планшет):
|
||||
|
||||
1. Посмотрите IP-адрес в меню (раздел "Из сети:")
|
||||
2. На другом устройстве настройте прокси: `IP_ВАШЕГО_ПК:1080`
|
||||
|
||||
Например: `192.168.1.100:1080`
|
||||
|
||||
---
|
||||
|
||||
## ❓ Часто задаваемые вопросы
|
||||
|
||||
### Ошибка "Файл не может быть загружен, так как выполнение сценариев отключено"
|
||||
|
||||
**Решение:** Включите выполнение скриптов:
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
```
|
||||
|
||||
### Ошибка при запуске — непонятные символы или синтаксис
|
||||
|
||||
**Причина:** Вы используете старый PowerShell 5.1
|
||||
|
||||
**Решение:** Установите PowerShell 7 (см. раздел "Перед началом")
|
||||
|
||||
### Discord не подключается к голосовым каналам
|
||||
|
||||
**Причина:** ProxiFyre не запущен или VPN клиент остановлен
|
||||
|
||||
**Решение:**
|
||||
|
||||
1. Запустите `.\manage.ps1`
|
||||
2. Убедитесь что пункт [1] показывает "РАБОТАЕТ"
|
||||
3. Убедитесь что пункт [2] показывает "АКТИВЕН"
|
||||
|
||||
### Как узнать, работает ли VPN?
|
||||
|
||||
1. Откройте https://ipinfo.io в браузере — это ваш реальный IP
|
||||
2. Настройте прокси в браузере
|
||||
3. Откройте https://ipinfo.io снова — должен показать другой IP
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Продвинутые варианты
|
||||
|
||||
### Docker с веб-интерфейсом
|
||||
|
||||
Если вы предпочитаете управлять через браузер с красивым интерфейсом:
|
||||
|
||||
> 💡 **Порты Docker версии:**
|
||||
>
|
||||
> - **Веб-интерфейс:** `http://localhost:3456`
|
||||
> - **Прокси:** `127.0.0.1:8080` (обратите внимание, отличается от нативной версии!)
|
||||
|
||||
> ⚠️ **Внимание:** В этом режиме **Discord работать не будет**!
|
||||
> Docker на Windows не поддерживает UDP-проксирование, которое необходимо для голосовых чатов. Если вам нужен рабочий Discord — используйте **основной способ** (пункт [1] в меню).
|
||||
|
||||
📖 **[Инструкция по Docker](docs/DOCKER.md)**
|
||||
|
||||
### Установка на удалённый сервер (VPS)
|
||||
|
||||
Если вы хотите развернуть прокси на своём сервере в другой стране:
|
||||
|
||||
📖 **[Инструкция по установке на сервер](docs/SERVER.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Словарь терминов
|
||||
|
||||
| Термин | Объяснение |
|
||||
| ------------ | ----------------------------------------------------------------------------- |
|
||||
| **Прокси** | Программа-посредник, которая передаёт ваши запросы в интернет от своего имени |
|
||||
| **VPN** | Зашифрованный туннель между вашим компьютером и удалённым сервером |
|
||||
| **VLESS** | Современный протокол VPN-соединения |
|
||||
| **sing-box** | Программа-клиент для подключения к VPN |
|
||||
| **SOCKS5** | Тип прокси, поддерживающий любой трафик (включая UDP для игр) |
|
||||
| **Порт** | "Номер двери" для сетевых соединений |
|
||||
|
||||
---
|
||||
|
||||
## 🆘 Нужна помощь?
|
||||
|
||||
Если что-то не работает:
|
||||
|
||||
1. Убедитесь что используете **PowerShell 7**
|
||||
2. Запустите от имени **Администратора**
|
||||
3. Проверьте статус в главном меню
|
||||
4. Попробуйте переустановить: пункт [U], затем пункт [1]
|
||||
|
||||
---
|
||||
|
||||
_Создано для простого и безопасного доступа в интернет_ 🛡️
|
||||
- IPv4 TProxy first. IPv6 routing будет отдельным этапом.
|
||||
- DNS-перехват пока не включен. Для корректного gateway-сценария лучше выдать клиентам DNS через роутер/DHCP.
|
||||
- Контейнер должен запускаться с `network_mode: host`, `NET_ADMIN`, `NET_RAW`.
|
||||
- `_archive/` игнорируется git, потому что там лежит старая реализация и runtime state.
|
||||
- Gateway не видит process name на клиентском ПК, поэтому правила для игр задаются через домены, suffix, IP CIDR и порты.
|
||||
|
||||
Reference in New Issue
Block a user