Подключение к серверу OpenVPN в C# без использования внешних приложений - PullRequest
0 голосов
/ 13 февраля 2020

В C# имеется приложение прокси-сервера, которое получает трафик c от пользователей по протоколу SOCKS5 (для этого я написал реализацию этого протокола с нуля, основываясь на RF C -1928). Затем, в зависимости от того, к какому порту пришел трафик c, этот трафик c перенаправляется на внешний сервер SOCKS5, а с него - на целевой сервер, запрошенный пользователем. Внешний сервер SOCKS5 различен для каждого пользователя приложения.

Итак, на данный момент схема пересылки traffi c в приложении выглядит следующим образом: Socks5Client -> MySocks5ProxyApplication -> Socks5ExternalServer

Теперь мне нужно перенаправить пользовательский трафик c через внешний сервер OpenVPN, т.е. я хочу, чтобы схема приложения стала следующей: Socks5Client -> MySocks5ProxyApplication -> OpenVpnExternalServer

Для реализации этой схемы работы я нужна некоторая реализация клиента протокола OpenVPN в C#, но я не смог найти никакой реализации в C#. Какие варианты я уже рассмотрел: - запустить внешний официальный клиент openvpn. Эта опция не подходит, потому что весь трафик c на компьютере перенаправляется на указанный c VPN-сервер. - используйте библиотеку DotRas. Эта опция не подходит, потому что эта библиотека не поддерживает протокол OpenVPN.

Последний вариант, который я рассматриваю, заключается в реализации поддержки протокола OpenVPN в соответствии с RF C для моих нужд, с нуля. Сам протокол довольно ясен на основе спецификации, но есть много вопросов о совместном использовании этого протокола с шифрованием SSL / TLS. Поскольку каждый пакет данных в OpenVPN содержит служебный заголовок с информацией OpenVPN + часть данных TLS, я думаю, что будет трудно записать данные OpenVPN и TLS в один сокет без их смешивания. Эта опция кажется мне чрезвычайно трудоемкой для реализации.

Итак, мой вопрос:

  • Существуют ли какие-либо способы из приложения c# создавать соединения с несколькими серверами OpenVPN читать и отправлять данные на эти соединения?
...