Есть задача тунелить трафик с порта X публичного сервера на порт Y пк за провайдерским натом (на пк крутится реверс-прокси, перенаправляющий http и ws на локальные устройства).
ssh не хочу по ряду причин. Всякие third-party сервисы не могу использовать, надо поставить самодостаточный продукт.
Конечный софт должен выйти настолько простым что человек который первый раз увидел компьютер сможет запустить и пользоваться.
В общем решил что мне нужно встроить какой-нить впн клиент напрямую в проект с прокси написанный на c#. Так вот какой клиент выбрать? Смотрел в сторону wireguard-go, начитался что его провайдеры блочат. Тогда Amneziawg-go? Так и не нашел ни одного примера как использовать эти клиенты в моем c# коде. Времени перечитывать весь интернет тупо нет.
Может кто тыкнуть где и что читать? Есть советы по выбору иных впн-клиентов? Может найдутся какие примеры по тем клиентам что я перечислил?
PS прокси сделано потому, что конечным устройствам сильно не нравится когда к ним стучат не из лана по причине большой жадности разработчиков из поднебесной.
Настраивать муторно, уронить соединение легко, от количества оберток глаза разбегаются, нестабильно работает с моим сервером - то поднимается тоннель, то нет (скорее всего, конечно, проблема в сервере, но какой есть - такой есть, бюджета не хватает чтобы ради тестирования при разработке mvp брать что-то лучше самого дешевого VPS) + мне так видится что если в дальнейшем будет не один такой пк с прокси а 100, то вариант с ssh станет ну очень проблематичным, виртуальная сеть на мой взгляд проще и лучше скейлится
По моему концепция ВПН не вписывается в "использование в моем коде". ВПН - это максимальное абстрагирование от конечного пользователя, чтоб любое приложение могло использовать ВПН канал прозрачно. Поэтому ВПН создает виртуальный сетевой адаптер в ОС, который могут использовать любые приложения, используя стандартные средства сетевого обмена, предоставляемые ОС. И тут не важно - ВПН клиент это или сервер - у обоих концепция использования одинаковая.
Для автоматизации настройки любого ВПН можете для пользователя сделать скрипт, который будет запускать и настраивать ВПН на стороне пользователя. Без встраивания в приложение. Можно встроить установку ВПН в ваш инсталлятор. В само приложение можно встроить функционал запуска и останова службы ВПН.
res2001, Ставить клиент изначально рассчитанный на использование человеком (А именно имеющий стопитьсот функций (когда мне нужна одна), ui, иконку в трее и миллион способов все сломать "тыкнув не туда")? Я очень сомневаюсь в этой идее. Хотелось бы чтобы это на крайняк было CLI решение запускающее сервис работающий где-то в фоне и не мозолящее глаза конечному пользователю (чтобы отбить жгучее желание "куда-нибудь тыкнуть").
А почему хочется именно библиотеку для всего этого счастья так это потому, что было бы удобнее иметь абстракции для запуска, отслеживания статуса тоннеля, рестарта по необходимости и подобных вещей. Да и чтобы функционал получившегося клиента был обрезан именно так как мне надо для упрощения всего и вся.
клиент изначально рассчитанный на использование человеком
Вообще для ВПН GUI - не обязательная часть. Тот же openvpn или wireguard прекрасно могут обходиться без него. А если вы еще и сконфигурируете его "автоматически" и сервис настроите на запуск/остановку вручную со своим собственным не стандартным именем сервиса, то клиент может никогда его и не увидеть.
Конечно пытливый пользователь сможет о нем узнать по дополнительному процессу и сетевому адаптеру в системе и т.п. , но у вас вроде бы нет цели это скрывать.
Xavisonell, Не тыкну. Тут будет многое зависеть от того как вы будете это настраивать. В итоге вам надо получить автоматическую настройку у клиента в каком-либо виде. Начните с ручной настройки, когда процесс освоите, решите для себя как конкретно будете реализовывать разворачивание ВПН у клиентов.
Сам я достаточно много использовал раньше OpenVPN. Он все это умеет - работать как сервис без GUI на винде и в линуксе. Имя сервиса может быть изменено стандартными системными средствами при установке сервиса или потом. Тип запуска сервиса - это то же относится к общесистемному администрированию и зависит от ОС, а не от вида ВПН.
Wireguard я плотно не использовал, но там +- то же самое.
Если вам не нужен ВПН за бугор, то внутри РФ не должно быть проблем с блокировкой. Хотя сейчас вообще интернет часто штормит во многих регионах, даже и без ВПН.
Есть еще OpenConnect (ocserv), его вроде бы пока не научились блокировать и можно с ним за границу ходить. Но тут у меня вообще пока мало опыта, хотя я сейчас пытаюсь его использовать вместо OpenVPN. Но еще мало кейсов с ним у меня было. Кстати, у ocserv несколько вариантов клиентов от разных производителей, возможно у него есть клиентская библиотека на которой они все базируются. Но это лишь предположение, т.к. мне это без надобности, то в эту сторону я не копал.
Создать ограниченного юзера на сервере, сгенерировать ключ и добавить его в конфиг на сервере - это муторно? Запускается туннель вообще одной командой с несколькими аргументами.
уронить соединение легко
Это относится в равной степени вообще к любому сетевому соединению.
от количества оберток глаза разбегаются
А ничего, что сегодня миллион абстракций и обёрток вообще во всём современном софте? И ничего - работает же как-то. И ничего с этим не сделать и никуда от этого не уйти. Ну, тогда можете просто на Си или шарпе сделать простейший прокси - там ничего сложного, десяток-другой строчек кода.
нестабильно работает с моим сервером
Тут надо смотреть почему оно работает нестабильно - может там блокировки какие или сеть на другом конце хреновая?