ProxiFyre: Open Source SOCKS5 Проксификатор для Windows

25bbc6b01ae2f0ebe2ae6349ac7949f4.png

В условиях постоянно усиливающегося государственного контроля над интернетом, проявляющегося, в том числе, в блокировке VPN-протоколов, проблема разработки альтернативных методов подключения становится все более актуальной. Этот вопрос не только теоретический, но и весьма практический. Переехав из России около года назад, я продолжаю активно использовать выстроенную за многие годы домашнюю инфраструктуру. Вплоть до недавнего времени мне достаточно было использовать VPN на базе Wireguard для доступа к домашним сетям, однако периодически наблюдаются определенные аномалии — увеличение потери UDP-пакетов и похоже, что попытки блокировки самого протокола. Хотя в некоторых случаях удается обойти эти проблемы, меняя параметры самодельного клиента Wireguard, общая картина вызывает определенную обеспокоенность. Вот почему сегодня становится крайне важным искать и разрабатывать альтернативные способы доступа к домашним сетям на случай массовой блокировки популярных VPN протоколов.

Один из проверенных временем и надёжных методов, не требующий сложной специализированной инфраструктуры, — это туннелирование TCP-соединений с использованием SSH. Этот протокол является критически важным для стабильности работы интернета, и вероятность его массовой блокировки выглядит крайне малой. Вероятно, наибольшими трудностями, с которыми мы можем столкнуться, являются ограничения на скорость соединения. Однако, даже в этом случае, доступ к домашним сетям будет сохранён, оставляя время для поиска и изучения других возможных решений. Уникальной особенностью SSH является встроенный SOCKS5 прокси-сервер, который предоставляет функционал аналогичный VPN с возможностью реализации split tunneling на уровне отдельных приложений. Именно здесь мы переходим к основной теме нашего обсуждения.

ProxiFyre — это Open Source инструмент, функционирующий как «соксификатор» для приложений, не имеющих встроенной поддержки работы через SOCKS прокси-серверы. Программа является улучшенным вариантом одного из демонстрационных примеров для Windows Packet Filter. В отличие от базовой версии, ProxiFyre обеспечивает поддержку протокола UDP и предлагает функцию одновременного использования нескольких экземпляров SOCKS5 прокси, что существенно расширяет ее функциональные возможности. Приложение в схожем виде существует уже пару лет, но я опубликовал его всего лишь пару недель назад после небольшого ревью. Поводом для публикации стали несколько последовательных запросов на дополнительные функциональные возможности (в частности поддержку UDP), а также скромная надежда на то, что те, кто просит об этих улучшениях, примут посильное участие в дальнейшем развитии проекта.

С целью упрощения работы с ProxiFyre, я добавил возможность настройки конфигурации при помощи файла app-config.json. Данный JSON файл предполагает включение массива конфигураций для разнообразных приложений, что обеспечивает высокую степень гибкости и позволяет вести детальный контроль над настройками интернет-подключения каждого отдельного приложения.

Пример конфигурации:

[
    {
        "appNames": ["chrome", "chrome_canary"],
        "socks5ProxyEndpoint": "158.101.205.51:1080",
        "username": "username1",
        "password": "password1"
    },
    {
        "appNames": ["firefox", "firefox_dev"],
        "socks5ProxyEndpoint": "159.101.205.52:1080",
        "username": "username2",
        "password": "password2"
    }
]

В контексте использования SOCKS5 с SSH, ProxiFyre применяется следующим образом. Предположим, вы подключаетесь к SSH-серверу с использованием команды ssh -D 8080 user@host. Тогда, с использованием нижеследующего конфигурационного файла, вы сможете направить трафик приложений Google Chrome и RDP-клиента через SSH-тоннель:

[
    {
        "appNames": ["chrome", "mstsc"],
        "socks5ProxyEndpoint": "127.0.0.1:8080"
    }
]

Пример с Google Chrome может не вполне отражать все преимущества ProxiFyre, поскольку большинство веб-браузеров уже обладают встроенной поддержкой явной настройки прокси. Вместе с тем, множество других приложений не располагают этой функциональностью. Именно здесь ProxiFyre проявляет свою эффективность, предоставляя возможность конфигурации прокси для всех приложений, обеспечивая тем самым расширенный контроль над настройками интернет-подключения.

Архитектурно ProxiFyre состоит из трех основных проектов:

  1. ndisapi.lib: Адаптированный проект статической библиотеки Windows Packet Filter.

  2. socksify: .NET C++/CLI библиотека классов, реализующая функциональность локального маршрутизатора SOCKS5.

  3. ProxiFyre: простенькое консольное .NET приложение для Windows, использующее функциональность предоставляемую .NET C++/CLI библиотекой классов socksify.

Подробные инструкции по использованию, включая требования к сборке, вы можете найти в README репозитория.

Надеюсь кому-то это приложение окажется полезным в текущих непростых обстоятельствах.

© Habrahabr.ru