SSH-Beschleunigungs-Nervtaten-Best-of: Wie wir „geht irgendwie“ zu „läuft endlich stabil“ verfrickelt haben
Vorweg das Fazit, damit du nicht nach der Hälfte die Seite zumachst:
- Diese Lösung verbessert die „Stabilität“, senkt aber nicht unbedingt spürbar die „Latenzzahlen“.
- Kostenloses Cloudflare +
wstunnelkann dir das Leben retten, macht aber nicht aus dem Nichts eine Standleitung. - Der größte Gewinn ist: Bei ähnlichen Problemen weißt du künftig, welche Schicht du zuerst prüfst – statt dich auf Voodoo zu verlassen.
Kapitel 1: 300 ms sind nicht schlimm – schlimm ist „ruckelt wie eine PowerPoint“
Die Geschichte beginnt ganz unspektakulär:
- China nach Singapur,
ping300 ms. - Die Business-Website wirkt noch benutzbar, weil es CF-Reverse-Proxy und optimierte Domains gibt.
- Aber sobald man SSH tippt, beginnt die Lebensphase „du redest, ich überlege kurz und antworte dann“.
Also die Seelenfrage:
„HTTP kann man beschleunigen – kann SSH nicht auch ein bisschen mitnaschen?“
Antwort: Kann es, aber du musst akzeptieren, dass es keine „Ein-Klick-Magie“ ist, sondern ein mehrschichtiges Puzzle.
Kapitel 2: Wir dachten, es ist das Netz – am Ende haben sich Konfigurationen gegenseitig verprügelt
Der Teil, der am ehesten wie ein Krimi war:
ssh.cafe.de5.netsieht erreichbar aus.ssh.aiya.de5.netZertifikat auchactive.- Der Client wirft aber ständig
connection closed by foreign host,Connection refusedusw.
Später stellte sich bei der Ursachenanalyse heraus:
- Cloudflare SaaS Custom Hostnames bringen ihren eigenen
Hostbeim Origin-Request mit. - Wenn Nginx
server_namessh.aiya.de5.netnicht mit abdeckt, fällt es auf die falsche Site/den falschen vHost zurück. - Und dann siehst du keinen „klaren Fehler“, sondern nur „irgendwie stimmt gar nichts“.
In einem Satz:
Es ist nicht down – es ist nur auf jeder Schicht „fast richtig“.
Kapitel 3: 400 im Browser ist eigentlich eine gute Nachricht
Viele erschrecken beim ersten Mal:
Wenn du https://ssh.xxx aufrufst und Invalid protocol request oder 400 siehst, denkst du, es ist explodiert.
In dieser Architektur ist das aber oft ein gutes Zeichen:
- Es zeigt, dass der Request bereits beim
wstunnel-Backend ankommt. - Du schickst nur mit dem Browser HTTP – nicht den Protokollstrom von SSH-over-WS.
Heißt:
400kann bedeuten „Leitung steht, aber falsches Protokoll“;404sieht eher aus wie „hat dein erwartetes Backend gar nicht erreicht“.
Kapitel 4: Der Client ist die letzte Meile (und auch die unfallträchtigste)
Selbst wenn der Server sauber konfiguriert ist, kann der Client immer noch crashen:
- Du glaubst, du verbindest dich mit der beschleunigten Domain, in Wirklichkeit verbindet FinalShell zu
127.0.0.1:10022, aber der lokale Tunnel läuft nicht. wstunnel-Versionen haben inkompatible Parameter; ein-vführt direkt zuunexpected argument.- In SSH-Logs steht
kex_exchange_identification: Connection closed– im Kern ist einfach der Tunnel nicht stabil aufgebaut.
Am Ende ist die korrekte Vorgehensweise erstaunlich simpel:
- Lokal
wstunnel clientstarten, damit lokal10022lauscht. - Danach FinalShell/Terminal auf
127.0.0.1:10022verbinden lassen. - Wenn es nicht geht: zuerst prüfen, ob der lokale Port überhaupt lauscht – nicht gleich am Leben zweifeln.
Kapitel 5: Hat das nun wirklich „beschleunigt“?
Das verdient ein eigenes Kapitel.
Meist bekommst du:
- Latenzzahlen: kaum Veränderung (teils praktisch gleich)
- subjektive Stabilität: deutlich besser (keine random Disconnects, weniger Zicken)
Warum?
- Kostenloses CF ist keine Argo-Standleitung und zaubert die physische Entfernung nicht weg.
- Aber es kann oft „miese Routing-Jitter“ in etwas Kontrollierbareres verwandeln.
Darum ist diese Lösung eher:
SSH bekommt einen „Anti-Wackel-Gimbal“, nicht einen „Lichtgeschwindigkeitsmotor“.
Anti-Fallen-Checkliste für Nachzügler (komprimiert)
- Erst das Link-Modell klären: Nutzt du
wstunnelodercloudflared tunnel? Begriffe nicht vermischen. - Bei SaaS Custom Hostnames unbedingt
custom_origin_serverund den Origin-Hostauf Matching prüfen. - Nginx
server_namemuss die SaaS-Hostname(s) abdecken, sonst landest du im falschen vHost. - Wenn der Browser beim SSH-Domainaufruf 400 zurückgibt, ist das nicht zwingend schlecht.
- Beim Client zuerst lokalen Port-Listen-Status prüfen, dann SSH-Logs.
- Ziel zuerst auf „stabil“ setzen – nicht darauf versteifen, dass „Latenz muss sinken“.
Zum Schluss ein Satz (für dich, der nachts Netze debuggt)
Der größte Wert dieses Gefummels ist nicht „ein bestimmter Befehl funktioniert endlich“, sondern dass du eine komplexe Kette in verifizierbare Module zerlegt hast:
- DNS
- SaaS Hostname
- Origin
- Tunnel
- Client
Wenn du schichtweise debuggen kannst, werden „mystische Netzwerkprobleme“ zu „normalen Engineering-Problemen“.
Glückwunsch: Von „vom Netzwerk gequält“ zu „das Netzwerk quälen“ weiterentwickelt.