Когда VPN душат, в бой идёт SOCKS5: что нового в ProxiFyre 2.0
- среда, 23 июля 2025 г. в 00:00:11
В последние месяцы я всё чаще сталкиваюсь с ситуациями, когда привычные VPN-соединения становятся всё менее надёжными или вовсе блокируются. Для тех, кто, как и я, продолжает получать доступ к домашней инфраструктуре из-за границы, особенно из стран с усиливающимся контролем за трафиком, это уже не просто неудобство, а реальный риск потери стабильной связи.
Моя собственная схема — домашний сервер за WireGuard-эндпоинтом — уже не раз демонстрировала странности: внезапные падения скорости, потеря UDP-пакетов (особенно в мобильных сетях). Всё вроде работает, но как-то не так: туннель подключается, но затем «виснет» или показывает подозрительно низкую пропускную способность. В таких случаях надёжным обходным путём становится туннелирование TCP-трафика через SOCKS5-прокси, например, поверх SSH.
Но и у SOCKS5 есть ограничение — сам по себе он ничего не даст, если не существует механизма для перенаправления трафика от нужных приложений. Многие программы не поддерживают прокси напрямую.
Ранее необходимо было вручную перечислять имена всех процессов, трафик которых должен был перенаправляться. Это давало гибкость, но и усложняло настройку. В версии 2.0.1 появилась поддержка «маски»: теперь, если указать пустую строку ""
в поле appNames
, ProxiFyre будет перехватывать весь исходящий трафик приложений, соответствующий указанным протоколам.
Пример конфигурации:
{
"logLevel": "Error",
"proxies": [
{
"appNames": [""],
"socks5ProxyEndpoint": "proxy.example.org:1080",
"username": "user1",
"password": "pass1",
"supportedProtocols": ["TCP", "UDP"]
}
]
}
⚠️ Важно: DNS-запросы по UDP на порт 53 не перехватываются и пойдут напрямую.
Эта небольшая по сути настройка превращает ProxiFyre в «мягкий VPN» — без дополнительных сетевых интерфейсов, маршрутов и сложных конфигураций, но с полной маршрутизацией сетевых приложений через SOCKS5-прокси.
При росте числа подключений некоторые пользователи начали замечать, что под высокой нагрузкой ProxiFyre теряет в производительности. Причина оказалась в архитектуре: до этой версии определение контекста (процесса-источника пакета) происходило синхронно, прямо в обработчике пакетов.
Это вызывало:
Блокировку критического потока обработки пакетов
Потенциальные дедлоки между ядром и user-mode
Резкое снижение пропускной способности при пиковых нагрузках
Эта проблема подробно зафиксирована в issue #62 и потребовала серьёзной переработки внутренних механизмов.
Начиная с версии v2.0.1, определение контекста вынесено в асинхронную очередь, что обеспечивает:
Немедленную обработку трафика без задержек на определение процесса
Перемещение ресурсоёмких операций в фоновые потоки
Повышение стабильности и отзывчивости при высоких нагрузках
Версия | Определение контекста | Поведение |
---|---|---|
≤ 2.0.0 | Синхронное (inline) | Блокирует, плохо под нагрузкой |
2.0.1 | Асинхронное (очередь) | Не блокирует, устойчива |
ProxiFyre работает поверх Windows Packet Filter — NDIS драйвера для перехвата сетевого трафика. Начиная с версии 2.0.1, обязательно использовать Windows Packet Filter версии 3.6.1 или новее.
Почему это критично:
В новых версиях улучшена синхронизация, снижена нагрузка на ядро и добавлена совместимость с обработкой трафика со всех доступных сеетвых интерфейсов с использованием queued_multi_interface_packet_filter
.
Загрузить актуальный драйвер можно с github.com.
Использование старого драйвера может привести к нестабильной или частично неработающей функциональности.
В 2.0.1 также произведена масштабная чистка и рефакторинг:
Новый класс queued_multi_interface_packet_filter
для обработки трафика на нескольких интерфейсах
Обновлены заголовки библиотеки netlib до актуальных версий
В .NET-компоненте введены уровни логирования (Error
, Warning
, Info
, Debug
, All
)
Удалён устаревший и неиспользуемый код
Всё это упростило отладку и повысило читаемость кода как для разработчиков, так и для тех, кто собирает проект вручную.
Хотя wildcard-настройка подходит большинству, исходная логика «по приложениям» остаётся полезной. Например, вы можете настроить перенаправление трафика только от Chrome и mstsc через локальный SSH-tunnel (например, PuTTY или ssh -D
):
{
"logLevel": "Info",
"proxies": [
{
"appNames": ["chrome", "mstsc"],
"socks5ProxyEndpoint": "127.0.0.1:8080",
"supportedProtocols": ["TCP"]
}
]
}
Такой подход позволит изолировать критичные каналы, не меняя поведение остальной системы.
Состоит из трёх основных компонентов:
ndisapi.lib
— статическая библиотека на основе Windows Packet Filter
socksify
— C++/CLI-библиотека, реализующая маршрутизацию через SOCKS5
ProxiFyre
— консольное .NET-приложение, управляющее маршрутизацией по конфигу
Проект не требует написания собственного драйвера и работает полностью в user-mode. Это делает его особенно удобным для разработчиков, исследователей и просто продвинутых пользователей.
Актуальная версия доступна на GitHub:
👉 ProxiFyre v2.0.1 — страница релиза
В комплекте — исходники, бинарники и пример конфигурации.
Не забудьте обновить драйвер Windows Packet Filter до версии 3.6.1 или новее.
В эпоху, когда доступ к информации и цифровой инфраструктуре больше не гарантирован, такие простые и надёжные инструменты как ProxiFyre могут оказаться ключевыми. Версия 2.0.1 — это шаг к большей универсальности, стабильности и гибкости в условиях неопределённости.