Weiterleiten einer TeamSpeak-Instanz

793
LDericher

Ich versuche, einen TeamSpeak3- Server in meinem Heimnetzwerk "net1.mydomain" einzurichten. Es verwendet ein IPv4-Subnetz von 10.0.0.0/8 im LAN. Internetzugang über IPv4 ist über CGN möglich. Dies macht IPv4-only-listeners (wie auch TeamSpeak) für Clients außerhalb von "net1.mydomain" nicht erreichbar.

Um das nur socatnachteilig zu umgehen, fand ich (SOcket CAT; Mehrzweckrelais.) Hilfreich, da ich auch Zugriff auf eine Maschine habe, fwbox.net2.mydomaindie über eine vollständige IPv4- und IPv6-Dual-Stack-Verbindung verfügt.

Lassen Sie den Server auf dem Computer laufen tsbox.net1.mydomain, Ports 1234/UDP4(Sprache), 1234/TCP4(Abfrage), 1235/TCP(Datei). Nach dem Ausführen des folgenden Befehlssatzes kann ich den TS3-Client verwenden, um eine Verbindung fwbox.net2.mydomain:1234herzustellen, als ob mein TS3-Server stattdessen dort ausgeführt würde.

ldericher@fwbox$ socat TCP4-LISTEN:1234,fork TCP6:tsbox.net1.mydomain:61234 &# queryport ldericher@fwbox$ socat TCP4-LISTEN:1235,fork TCP6:tsbox.net1.mydomain:61235 &# fileport ldericher@fwbox$ socat UDP4-LISTEN:1234,fork TCP6:tsbox.net1.mydomain:61236 &# voiceport  ldericher@tsbox$ socat TCP6-LISTEN:61234,fork TCP4:localhost:1234 &# queryport ldericher@tsbox$ socat TCP6-LISTEN:61235,fork TCP4:localhost:1235 &# fileport ldericher@tsbox$ socat TCP6-LISTEN:61236,fork UDP4:localhost:1234 &# voiceport 

Naja fast.

Aufgrund der FIFO-Verbindung des Voice- (UDP-) Streams wird ein hoher Prozentsatz von Paketen abgebrochen und die Verbindung ist unbrauchbar. Idealerweise würde es UDP-Pakete nur über IPv6 weiterleiten - aber die folgenden Befehle erzeugen stattdessen nur "Permission denied" auf tsbox...

ldericher@fwbox$ socat UDP4-LISTEN:1234,reuseaddr,fork UDP6:tsbox.net1.mydomain:61234 &# voiceport ldericher@tsbox$ socat UDP6-LISTEN:61234,reuseaddr,fork UDP4:localhost:1234 &# voiceport 

… Wofür ich die verbindungslose Natur von UDP verantwortlich mache. Ich versuchte, mit den Optionen zu basteln socat, ohne Erfolg. "UDP-RECVFROM" / "UDP-SENDTO" erzeugt keine Fehler, scheint jedoch nur eine unidirektionale Weiterleitung zu sein. Ich las darüber stone(Anwendung TCP / IP-Repeater), dass es da draußen sein könnte, was als Alternative dienen könnte, aber nicht in socatmeiner Hand als für mich kam.
Entweder habe ich irgendwann etwas über UDP verpasst, oder es ist überhaupt nicht möglich, UDP weiterzuleiten, oder es ist mein Toolset.

Gibt es eine Möglichkeit, ein Tool oder Code-Code, der meinen Bedürfnissen entspricht? Vielleicht sogar eine Reihe von socatOptionen, die ich noch nicht gefunden habe?

ADD 03/06/2015

Es ist möglich, UDP - Datenverkehr weiterleiten, wie ich will. Selbst mit Socat gibt es einen Weg. Ich habe das erfolgreich mit einer anderen Box getestet testbox.net1.mydomain:

# File- and Query- portforwards omitted for irrelevance ldericher@testbox$ socat UDP4-LISTEN:1234,fork UDP4:tsbox:61234 & ldericher@tsbox$ socat UDP4-LISTEN:61234,fork UDP4:localhost:1234 & 

Dies funktioniert ohne Leistungseinbußen, löst jedoch nicht das Problem, dass IPv4 nicht von außen verwendet werden kann.

# File- and Query- portforwards omitted for irrelevance ldericher@testbox$ socat UDP4-LISTEN:1234,fork UDP6:tsbox:61234 & ldericher@tsbox$ socat UDP6-LISTEN:61234,fork UDP4:localhost:1234 & 

Dies funktioniert nicht genauso wie das Weiterleiten über fwbox.
Verpasse ich also gerade einen wichtigen Punkt zu IPv6?
Ist das ein Fehler? In socat? In Linux ?!

0

2 Antworten auf die Frage

0
Michael Hampton

Es kann sein, dass dies nicht funktioniert, da das TeamSpeak-Protokoll die IP-Adresse in die (schlecht verschlüsselten) Payloads einbettet. Daher führt das Weiterleiten der Daten an andere Hosts wahrscheinlich zu Verbindungsfehlern, entweder als Client, als Server oder als beides. Ignorieren Sie vollständig, woher die Daten kommen, und versuchen Sie, die IP-Adressen zu verwenden, von denen sie glauben, dass die Daten stammen sollen.

Warum funktioniert es dann nur mit UDPv4-Weiterleitung? Und warum kann ich TeamSpeak-Server hinter einfachen NAT-DSL-Routern (dynamisches DNS) erreichen, die offensichtlich nicht auf der IP des Routers laufen? LDericher vor 9 Jahren 0
0
LDericher

Durch Hinzufügen der -TOption wird socatdas Problem irgendwie gelöst.

-T<timeout> Total inactivity timeout: when socat is already in the transfer loop and nothing has happened for <timeout> [timeval] seconds (no data arrived, no interrupt occurred...) then it terminates. Useful with protocols like UDP that cannot transfer EOF. 

Aktualisierte Befehle:

ldericher@fwbox$ socat TCP4-LISTEN:1234,reuseaddr,fork TCP6:tsbox.net1.mydomain:61234 &# queryport ldericher@fwbox$ socat TCP4-LISTEN:1235,reuseaddr,fork TCP6:tsbox.net1.mydomain:61235 &# fileport ldericher@fwbox$ socat -T15 UDP4-LISTEN:1234,reuseaddr,fork UDP6:tsbox.net1.mydomain:61234 &# voiceport  ldericher@tsbox$ socat TCP6-LISTEN:61234,reuseaddr,fork TCP4:localhost:1234 &# queryport ldericher@tsbox$ socat TCP6-LISTEN:61235,reuseaddr,fork TCP4:localhost:1235 &# fileport ldericher@tsbox$ socat -T15 UDP6-LISTEN:61234,reuseaddr,fork UDP4:localhost:1234 &# voiceport 

Ich kann nicht ganz genau verstehen, warum dies funktioniert (da offensichtlich keine 15 Sekunden vergehen), aber ich bin glücklich, dass dies der Fall ist.