{"id":108,"date":"2026-07-25T07:55:23","date_gmt":"2026-07-25T07:55:23","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/07\/25\/port-forwarding-chisel\/"},"modified":"2026-07-25T07:55:23","modified_gmt":"2026-07-25T07:55:23","slug":"port-forwarding-chisel","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2026\/07\/25\/port-forwarding-chisel\/","title":{"rendered":"Portweiterleitung zwischen Clients \u00fcber Chisel: ein abgespeckter Tunnel ohne L3"},"content":{"rendered":"<p>Wenn sich zwei Ger\u00e4te hinter NAT oder strengen Firewalls befinden und sich nicht direkt \u201esehen\u201c k\u00f6nnen, scheint ein VPN die Standardl\u00f6sung zu sein. Ein vollwertiger L3-Tunnel (wie WireGuard oder OpenVPN) ist jedoch h\u00e4ufig \u00fcberfl\u00fcssig: Er erfordert Root-Rechte, die Einrichtung virtueller Schnittstellen und kann zu Konflikten mit vorhandenen Routen f\u00fchren.<\/p>\n<p>In solchen F\u00e4llen ist es praktisch, <b>Chisel<\/b> zu verwenden \u2013 einen TCP\/UDP-Tunnel, der auf HTTP l\u00e4uft und WebSockets f\u00fcr die Daten\u00fcbertragung verwendet. In diesem Hinweis werde ich zeigen, wie man einen Port \u00fcber einen Zwischenserver von einem Client an einen anderen \u201eweiterleitet\u201c.<\/p>\n<h2>Wie funktioniert es?<\/h2>\n<p>Stellen Sie sich die Situation vor: Sie haben <b>Client A<\/b> (z. B. Ihren Heimserver), <b>Client B<\/b> (Ihren Arbeitslaptop) und einen <b>VPS<\/b> mit einer \u00f6ffentlichen IP-Adresse. Clients A und B k\u00f6nnen auf den VPS zugreifen, jedoch nicht aufeinander.<\/p>\n<p>Das Weiterleitungsschema sieht folgenderma\u00dfen aus:<br \/>\n1. <b>Client A<\/b> stellt eine Verbindung zum VPS her und \u00f6ffnet einen \u201eReverse\u201c-Port auf dem Server. Jetzt geht alles, was an Port X des Servers ankommt, an Port Y von Client A.<br \/>\n2. <b>Client B<\/b> stellt eine Verbindung zum VPS her und leitet Port Z von seinem lokalen Computer an Port X des Servers weiter.<br \/>\n3. Infolgedessen greift Client B auf <b>localhost:Z<\/b> zu und landet auf <b>Client A:Y<\/b>.<\/p>\n<p>Dieser Ansatz ist eine der L\u00f6sungen in F\u00e4llen, in denen die Kommunikation mit einem VPS keine L3-Schicht implementiert oder keine M\u00f6glichkeit besteht, Routing zwischen Clients zu konfigurieren. Wir arbeiten ausschlie\u00dflich auf Anwendungs- und Portebene.<\/p>\n<h2>Schritt 1: Starten Sie den Server<\/h2>\n<p>F\u00fchren Sie Chisel auf Ihrem VPS einfach im Servermodus aus. Das Flag <code>--reverse<\/code> ist erforderlich, damit Clients Ports auf der Serverseite \u00f6ffnen k\u00f6nnen.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel server --port 8080 --reverse\n<\/code><\/pre>\n<\/div>\n<h2>Schritt 2: Client A (Quelle) verbinden<\/h2>\n<p>Nehmen wir an, Kunde A m\u00f6chte den Zugriff auf seinen lokalen Webserver auf Port 3000 \u00f6ffnen. Er verbindet sich mit dem VPS und sagt: \u201eReservieren Sie Port 2000 auf dem Server und leiten Sie ihn an 3000 an mich weiter.\u201c<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel client vps-ip:8080 R:2000:127.0.0.1:3000\n<\/code><\/pre>\n<\/div>\n<p>Jetzt f\u00fchrt Port 2000 am VPS (an der Loopback-Schnittstelle) zu Client A.<\/p>\n<h2>Schritt 3: Client B (Verbraucher) verbinden<\/h2>\n<p>Jetzt m\u00f6chte Client B auf diese Ressource zugreifen. Es verbindet sich mit demselben VPS und leitet seinen lokalen Port 8080 an Port 2000 des Servers weiter.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>chisel client vps-ip:8080 8080:127.0.0.1:2000\n<\/code><\/pre>\n<\/div>\n<p>Bereit! Wenn Sie nun <code>http:\/\/localhost:8080<\/code> auf Client B \u00f6ffnen, sehen Sie, dass der Dienst auf Client A ausgef\u00fchrt wird.<\/p>\n<h2>Sicherheit und Nuancen<\/h2>\n<p>Chisel unterst\u00fctzt die Authentifizierung \u00fcber das Flag <code>--auth<\/code>, was bei der Arbeit \u00fcber \u00f6ffentliche Server dringend empfohlen wird. Sie k\u00f6nnen TLS-Zertifikate auch zum Verschl\u00fcsseln des Datenverkehrs verwenden.<\/p>\n<p>Der Hauptvorteil dieses Ansatzes besteht darin, dass keine TUN\/TAP-Ger\u00e4te und komplexen Routing-Tabellen erforderlich sind. Dabei handelt es sich um einen abgespeckten Tunnel, der genau eines tut: Ports \u00fcber eine WebSocket-Verbindung bindet. Dies funktioniert sogar \u00fcber Unternehmens-Proxys, wenn Sie Chisel so konfigurieren, dass es \u00fcber Port 443 funktioniert.<\/p>\n<h2>Ausgabe<\/h2>\n<p>Chisel ist ein Dienstprogramm f\u00fcr bestimmte Netzwerkaufgaben. Wenn Sie Ports zwischen isolierten Knoten weiterleiten m\u00fcssen, ohne ein vollwertiges VPN einzurichten, erweist sich eine Kombination aus Vorw\u00e4rts- und R\u00fcckw\u00e4rtstunneln \u00fcber einen Relay-Server als eine durchaus praktikable L\u00f6sung.<\/p>\n<h2>Links<\/h2>\n<p><a href=\"https:\/\/github.com\/jpillora\/chisel\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/jpillora\/chisel<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn sich zwei Ger\u00e4te hinter NAT oder strengen Firewalls befinden und sich nicht direkt \u201esehen\u201c k\u00f6nnen, scheint ein VPN die Standardl\u00f6sung zu sein. Ein vollwertiger L3-Tunnel (wie WireGuard oder OpenVPN) ist jedoch h\u00e4ufig \u00fcberfl\u00fcssig: Er erfordert Root-Rechte, die Einrichtung virtueller Schnittstellen und kann zu Konflikten mit vorhandenen Routen f\u00fchren. In solchen F\u00e4llen ist es praktisch, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-108","post","type-post","status-publish","format-standard","hentry","category-notes"],"translation":{"provider":"WPGlobus","version":"3.0.3","language":"de","enabled_languages":["en","ru","zh","de","ja","fr","es","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"es":{"title":false,"content":false,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=108"}],"version-history":[{"count":0,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/108\/revisions"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}