SSH Tunnel + Socat UDP Forwarding + несколько клиентов

1543
Alterscape

У меня есть машина с Ubuntu, на которой работает демон сервера (в данном случае Unity3d Unet Game Server), который предназначен для взаимодействия с клиентами исключительно через UDP. Клиенты работают на Windows 7 и Windows 10. Из-за требований безопасности сети клиента мне необходимо выполнить все подключения через туннель SSH (который передает только пакеты TCP). Я могу использовать Putty или cygwin OpenSSH на клиентах, но ни один из них, похоже, не поддерживает функцию туннеля openssh -w.

Я успешно настроил socatпересылку пакетов UDP через TCP между одним клиентом и сервером. На сервере, следуя слегка измененной версии инструкции внизу этой страницы . Я прежде всего разработчик, и хотя я знаю достаточно сетей Unix, чтобы быть опасными, это выходит за рамки моего типичного навыка.

На сервере я бегу $socat tcp4-listen:7776,reuseaddr,fork udp:localhost:7777

На моем клиенте я бегу $socat -T15 udp-listen:7777,reuseaddr,fork TCP4:localhost:7776.

Затем я запускаю SSH-туннель с 7776 до localhost: 7776.

Это хорошо работает с одним клиентом. Однако, как только я пытаюсь подключить более одного клиента, оба клиента перестают работать. Я подозреваю, что это потому, что socatон действует как прокси-сервер, поэтому мой сервер видит несколько соединений с localhost: 7777, и ни у сервера, ни у socat нет достаточной информации для маршрутизации пакетов UDP обратно их отправителям.

Это пахнет как идеальный вариант использования для виртуальных интерфейсов или фиктивных интерфейсов - я полагаю, что если бы я мог определить виртуальные / фиктивные интерфейсы с уникальными IP-адресами, например: 10.0.0.2, 10.0.0.3 и т. Д., Как виртуальные / фиктивные, и связать экземпляр socatкаждому виртуальному интерфейсу, и мои клиенты настраивают свои туннели SSH с конечной точкой 10.0.0. х, я должен быть в состоянии принять один клиент на интерфейс. Очевидно, это не масштабируется, но мне нужно всего несколько клиентов для этого варианта использования.

Думаю ли я в разумном направлении? Если так, то как мне направить макеты так, чтобы я мог связать с ними socat и заставить socat создавать пакеты udp с 10.0.0. x : 7777 маршрутизируется на локальный хост: 7777 (и принимает пакеты от локального хоста: с 7777 по 10.0.0. x )?

Я понимаю, что есть лучшие способы для достижения этой цели (например, VPN или ssf), но из-за требований клиента я ограничен решениями, которые работают через туннель SSH. Я могу предложить установить дополнительное программное обеспечение на сервере, но все общение должно осуществляться через TCP через SSH туннель.

[edit] Похоже, что одной из возможных альтернатив будет запуск openvpn на сервере, а затем туннелирование клиентского соединения openvpn через туннель ssh. Это кажется грязным, но, возможно, более надежным и расширяемым, чем слияние с socat. Любые мысли или мнения по поводу этих двух потенциальных решений, учитывая мои требования? [/ Edit]

0

1 ответ на вопрос

0
Eugen Rieck

Вы должны посмотреть ssh -w- он делает именно это: построить туннель и настроить виртуальные интерфейсы на обоих концах.

ssh -w x:y user@host network-script.sh с помощью network-script.sh настройка серверных интерфейсов сделает его полностью автоматическим.

Спасибо за указатель! К сожалению, мои клиенты работают на Windows, и ни putty, ни какая-либо сборка openssh на основе cygwin я не могу найти поддержку -w. Я отредактирую свой вопрос, чтобы добавить это разъяснение. Alterscape 6 лет назад 0

Похожие вопросы