Селективный HTTP/HTTPS/SOCKS5 прокси-сервер на .NET 10, который направляет запросы к определённым доменам через внешний прокси, остальные — напрямую.
- ✅ HTTP и HTTPS — полная поддержка через CONNECT туннелирование
- ✅ SOCKS5 — поддержка для SSH и других TCP протоколов (например, git@github.com)
- ✅ Единый порт — все протоколы на одном порту с автоопределением
- ✅ Селективная маршрутизация — гибкая настройка доменов
- ✅ Hot-reload — изменение списка доменов без перезапуска
- ✅ Автоматический Fallback — при недоступности upstream переключается на прямое соединение
- ✅ Windows Service — автоматический запуск при старте системы
- ✅ Автоустановка — PowerShell скрипт для установки службы и настройки прокси
- ✅ Wildcard домены — поддержка паттернов
*.example.com - ✅ Basic Auth — аутентификация для upstream прокси
- .NET 10 Runtime
- Windows 10/11 или Windows Server
- Права администратора (для установки службы)
Скачайте последнюю версию из Releases:
LocalProxy-vX.X.X-win-x64.zip— для 64-битных системLocalProxy-vX.X.X-win-x86.zip— для 32-битных систем
Или соберите из исходников:
cd LocalProxy
.\publish.batОтредактируйте publish/appsettings.json:
{
"Port": 3128, // Порт локального прокси
"UpstreamProxy": {
"Enabled": true, // Использовать внешний прокси
"Host": "proxy.example.com", // Адрес upstream
"Port": 8080, // Порт upstream
"Username": "", // Basic Auth (опционально)
"Password": "" // Basic Auth (опционально)
},
"Timeouts": {
"HttpRequestSeconds": 30, // Таймаут HTTP запросов
"TcpConnectSeconds": 10 // Таймаут TCP подключений
},
"Domains": [ // Домены через upstream
"example.com", // Точное совпадение
"*.example.com" // Wildcard поддомены
]
}Автоматическая установка (рекомендуется):
cd publish
.\Manage-LocalProxyService.ps1При запуске без параметров откроется интерактивное меню:
╔═══════════════════════════════════════════════════╗
║ ║
║ LocalProxy Service Manager ║
║ ║
╚═══════════════════════════════════════════════════╝
1. Установить службу
└─ Создать Windows Service + настроить системный прокси + установить переменные среды
2. Удалить службу
└─ Удалить Windows Service + отключить системный прокси + удалить переменные среды
3. Показать статус
└─ Проверить состояние службы и настроек
4. Выход
Выберите действие [1-4]:
Или используйте параметры для автоматизации:
# Установка
.\Manage-LocalProxyService.ps1 -Action Install
# Установка с кастомным портом
.\Manage-LocalProxyService.ps1 -Action Install -Port 8080
# Удаление
.\Manage-LocalProxyService.ps1 -Action Uninstall
# Проверка статуса
.\Manage-LocalProxyService.ps1 -Action StatusСкрипт автоматически:
- Создаст Windows Service с автозапуском
- Настроит системный прокси Windows
- Установит переменные среды HTTP_PROXY и HTTPS_PROXY
- Запустит службу
Паттерны доменов:
example.com— только этот домен*.example.com— все поддомены (но не самexample.com)- Пути игнорируются, проверяется только домен
Client → LocalProxy (localhost:3128) → Protocol Detection (first byte)
↓
┌───────────┴───────────┐
↓ ↓
HTTP/HTTPS SOCKS5 (0x05)
(ASCII) ↓
↓ Socks5Handler
HttpHandler ↓
↓ DomainMatcher
DomainMatcher ↓
↓ Match domain?
Match domain? ↙ ↘
↙ ↘ Yes: PROXY No: DIRECT
Yes: PROXY No: DIRECT ↓ ↓
↓ ↓ Upstream Proxy Target Host
Upstream Proxy Target Host ↓
↓ ↓ Target Host
Target Host
# Проверка службы
Get-Service LocalProxyService # Должна быть Running
# Проверка порта
netstat -ano | findstr :3128 # Должен слушать 127.0.0.1:3128
# Проверка системного прокси
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select ProxyEnable, ProxyServer
# ProxyEnable: 1, ProxyServer: localhost:3128
# Проверка переменных среды
[System.Environment]::GetEnvironmentVariable("HTTP_PROXY", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("HTTPS_PROXY", [System.EnvironmentVariableTarget]::User)
# Должны быть: http://localhost:3128Решение: Переустановите через .\Manage-LocalProxyService.ps1 -Action Uninstall и -Action Install
# Запуск всех тестов
dotnet test
# Ручной тест
cd LocalProxy
dotnet run
# В другом терминале
$env:HTTP_PROXY="http://localhost:3128"
$env:HTTPS_PROXY="http://localhost:3128"
curl -v https://github.comMIT License - см. LICENSE