Skip to content

G1Vh/LocalProxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LocalProxy.NET

Селективный 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
  • Права администратора (для установки службы)

Быстрый старт

1. Скачать релиз

Скачайте последнюю версию из Releases:

  • LocalProxy-vX.X.X-win-x64.zip — для 64-битных систем
  • LocalProxy-vX.X.X-win-x86.zip — для 32-битных систем

Или соберите из исходников:

2. Сборка из исходников

cd LocalProxy
.\publish.bat

3. Настройка

Отредактируйте 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 поддомены
  ]
}

4. Установка

Автоматическая установка (рекомендуется):

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          

Troubleshooting

Прокси не работает

# Проверка службы
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.com

Лицензия

MIT License - см. LICENSE

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors