Wenn sich zwei Geräte hinter NAT oder strengen Firewalls befinden und sich nicht direkt „sehen“ können, scheint ein VPN die Standardlösung zu sein. Ein vollwertiger L3-Tunnel (wie WireGuard oder OpenVPN) ist jedoch häufig überflüssig: Er erfordert Root-Rechte, die Einrichtung virtueller Schnittstellen und kann zu Konflikten mit vorhandenen Routen führen.
In solchen Fällen ist es praktisch, Chisel zu verwenden – einen TCP/UDP-Tunnel, der auf HTTP läuft und WebSockets für die Datenübertragung verwendet. In diesem Hinweis werde ich zeigen, wie man einen Port über einen Zwischenserver von einem Client an einen anderen „weiterleitet“.
Wie funktioniert es?
Stellen Sie sich die Situation vor: Sie haben Client A (z. B. Ihren Heimserver), Client B (Ihren Arbeitslaptop) und einen VPS mit einer öffentlichen IP-Adresse. Clients A und B können auf den VPS zugreifen, jedoch nicht aufeinander.
Das Weiterleitungsschema sieht folgendermaßen aus:
1. Client A stellt eine Verbindung zum VPS her und öffnet einen „Reverse“-Port auf dem Server. Jetzt geht alles, was an Port X des Servers ankommt, an Port Y von Client A.
2. Client B stellt eine Verbindung zum VPS her und leitet Port Z von seinem lokalen Computer an Port X des Servers weiter.
3. Infolgedessen greift Client B auf localhost:Z zu und landet auf Client A:Y.
Dieser Ansatz ist eine der Lösungen in Fällen, in denen die Kommunikation mit einem VPS die L3-Schicht nicht implementiert oder keine Möglichkeit besteht, Routing zwischen Clients zu konfigurieren. Wir arbeiten ausschließlich auf Anwendungs- und Portebene.
Schritt 1: Starten Sie den Server
Führen Sie Chisel auf Ihrem VPS einfach im Servermodus aus. Das Flag --reverse ist erforderlich, damit Clients Ports auf der Serverseite öffnen können.
chisel server --port 8080 --reverse
Schritt 2: Client A (Quelle) verbinden
Nehmen wir an, Kunde A möchte den Zugriff auf seinen lokalen Webserver auf Port 3000 öffnen. Er verbindet sich mit dem VPS und sagt: „Reservieren Sie Port 2000 auf dem Server und leiten Sie ihn an 3000 an mich weiter.“
chisel client vps-ip:8080 R:2000:127.0.0.1:3000
Jetzt führt Port 2000 am VPS (an der Loopback-Schnittstelle) zu Client A.
Schritt 3: Client B (Verbraucher) verbinden
Jetzt möchte Client B auf diese Ressource zugreifen. Es verbindet sich mit demselben VPS und leitet seinen lokalen Port 8080 an Port 2000 des Servers weiter.
chisel client vps-ip:8080 8080:127.0.0.1:2000
Bereit! Wenn Sie nun http://localhost:8080 auf Client B öffnen, sehen Sie, dass der Dienst auf Client A ausgeführt wird.
Sicherheit und Nuancen
Chisel unterstützt die Authentifizierung über das Flag --auth, was bei der Arbeit über öffentliche Server dringend empfohlen wird. Sie können TLS-Zertifikate auch zum Verschlüsseln des Datenverkehrs verwenden.
Der Hauptvorteil dieses Ansatzes besteht darin, dass keine TUN/TAP-Geräte und komplexen Routing-Tabellen erforderlich sind. Dabei handelt es sich um einen abgespeckten Tunnel, der genau eines tut: Ports über eine WebSocket-Verbindung bindet. Dies funktioniert sogar über Unternehmens-Proxys, wenn Sie Chisel so konfigurieren, dass es über Port 443 funktioniert.
Ausgabe
Chisel ist ein Dienstprogramm für bestimmte Netzwerkaufgaben. Wenn Sie Ports zwischen isolierten Knoten weiterleiten müssen, ohne ein vollwertiges VPN einzurichten, erweist sich eine Kombination aus Vorwärts- und Rückwärtstunneln über einen Relay-Server als eine durchaus praktikable Lösung.
Links
https://github.com/jpillora/chisel