SSH-Tunnel + Socat UDP-Weiterleitung + mehrere Clients

1690
Alterscape

Ich habe einen Ubuntu-Computer, auf dem ein Server-Daemon ausgeführt wird (in diesem Fall Unity3d unet game game server), der ausschließlich für die Kommunikation mit Clients über UDP ausgelegt ist. Die Clients verwenden Windows 7 und Windows 10. Aufgrund der Sicherheitsanforderungen des Clientnetzwerks muss ich alle Verbindungen über einen SSH-Tunnel herstellen (der nur TCP-Pakete überträgt). Ich kann Putty oder cygwin OpenSSH auf Clients verwenden, aber beide unterstützen offenbar die -w-Tunnel-Funktion von openssh.

Ich habe erfolgreich konfiguriert socat, UDP-Pakete über TCP zwischen einem einzelnen Client und dem Server weiterzuleiten. Befolgen Sie auf dem Server eine leicht modifizierte Version der Anweisungen am Ende dieser Seite . Ich bin in erster Linie ein Entwickler und obwohl ich genug Unix-Netzwerke kenne, um gefährlich zu sein, liegt dies außerhalb meines typischen Könnensets.

Auf dem Server laufe ich $socat tcp4-listen:7776,reuseaddr,fork udp:localhost:7777

Auf meinem Kunden renne ich $socat -T15 udp-listen:7777,reuseaddr,fork TCP4:localhost:7776.

Ich führe dann einen SSH-Tunnel von 7776 bis localhost: 7776.

Dies funktioniert gut mit einem einzigen Client. Sobald ich jedoch versuche, mehr als einen Client zu verbinden, schlagen beide Clients fehl. Ich habe den Verdacht, dass dies socatals Proxy fungiert. Mein Server sieht also mehrere Verbindungen von localhost: 7777, und weder Server noch socat verfügen über genügend Informationen, um die UDP-Pakete an ihre Absender zurückzuleiten.

Dies riecht nach einem idealen Anwendungsfall für virtuelle Schnittstellen oder Dummy-Schnittstellen. Ich glaube, wenn ich virtuelle / Dummy-Schnittstellen mit eindeutigen IPs definieren könnte, z. B. 10.0.0.2, 10.0.0.3 usw., als virtuelle / Dummys und eine Instanz von binden socatzu jeder virtuellen Schnittstelle und lassen Sie meine Clients ihre SSH-Tunnel mit einem Endpunkt von 10.0.0 einrichten. x, ich sollte pro Client einen Client akzeptieren können. Offensichtlich skaliert dies nicht, aber ich brauche nur wenige Clients für diesen Anwendungsfall.

Denk ich in eine vernünftige Richtung? Wenn ja, wie kann ich die Dummys so lenken, dass ich socat an sie binden kann und socat aus 10.0.0 UDP-Pakete produzieren lässt. x : 7777 zu localhost geroutet: 7777 (und Pakete von localhost akzeptieren: 7777 bis 10.0.0. x )?

Mir ist klar, dass es bessere Möglichkeiten gibt, dies zu erreichen (z. B. ein VPN oder ssf), aber aufgrund der Clientanforderungen bin ich auf Lösungen beschränkt, die über einen SSH-Tunnel laufen. Ich kann eine zusätzliche Software auf dem Server installieren, aber die gesamte Kommunikation muss über TCP über den SSH-Tunnel erfolgen.

[edit] Es scheint, dass eine mögliche Alternative darin besteht, openvpn auf dem Server auszuführen und dann eine openvpn-Clientverbindung durch den ssh-Tunnel zu tunneln. Dies scheint chaotisch, aber möglicherweise robuster und erweiterbar als mit Socat. Irgendwelche Gedanken oder Meinungen zu diesen beiden möglichen Lösungen angesichts meiner Anforderungen? [/ Edit]

0

1 Antwort auf die Frage

0
Eugen Rieck

Sie sollten ssh -wgenau hinschauen - es tut genau das: Erstellen Sie den Tunnel und richten Sie virtuelle Schnittstellen an beiden Enden ein.

ssh -w x:y user@host network-script.sh Mit network-script.sh wird das Einrichten der serverseitigen Schnittstellen vollständig automatisiert.

Danke für den Zeiger! Leider sind meine Clients unter Windows und weder auf Kitt noch auf einem cygwin-basierten openssh-Build kann ich den Support -w finden. Ich werde meine Frage bearbeiten, um diese Klarstellung hinzuzufügen. Alterscape vor 7 Jahren 0