[Bug] Tunnel-Connect-Befehl nutzt globales SERVER_URL als Host → falsche Adresse (gleiches Muster wie #191/#189) #202
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug (live beobachtet)
Der generierte Tunnel-Connect-Befehl zeigt die falsche Host-Adresse: z. B.
ssh root@172.16.1.14 -p 50004, obwohl der Nutzer das Backend nicht ueber diese (interne/VPN-)IP erreicht. Port-Forwarding (bind_port) ist korrekt — nur die Host-Adresse im Link stimmt nicht.Ursache
server/tunneling/manager.py:42-46:Der Connect-Host wird aus dem globalen SERVER_URL abgeleitet (Fallback) und in
to_dict()(:96) fuer JEDEN Tunnel verwendet. → bei VPN-SERVER_URL (172.16.1.14) bekommt man immer die interne IP, auch wenn man public/ueber Domain zugreift.Architektur-Klarstellung (verifiziert)
Der Tunnel-Listener laeuft auf dem Backend (manager.py:4-9: "backend-side TCP listeners that relay through WS"). Datenpfad: Browser → Backend-Listener:bind_port → WS → Agent → Ziel. Die Connect-Adresse ist also die Backend-Adresse, unter der der NUTZER das Backend erreicht — nicht die Node-Adresse, nicht zwingend SERVER_URL.
Bezug zu #189/#191 (gleiches Wurzelmuster)
Wie bei #191 (regenerate-token) wird eine transport-/erreichbarkeitsabhaengige Adresse faelschlich aus dem globalen SERVER_URL abgeleitet. Es braucht dieselbe transport-bewusste Auswahl:
TUNNEL_PUBLIC_HOST(explizit gesetzt) gewinnt immer.Fix
TUNNEL_PUBLIC_HOST-Ableitung von SERVER_URL auf die #189-Adress-Logik umstellen (Public/VPN). Idealerweise den in #191 vorgeschlagenen gemeinsamen Helper (resolve_install_base/eineresolve_public_host-Variante) wiederverwenden statt erneut SERVER_URL zu parsen.TUNNEL_PUBLIC_HOSTals expliziten Konfigwert dokumentieren/empfehlen (er gewinnt bereits) — und im UI/Doku klarstellen, dass dieser fuer korrekte Connect-Strings gesetzt sein sollte.localhostausliefern (aktueller Last-Fallback) — das ist nie ein gueltiger Connect-Host fuer den Nutzer.Akzeptanz
Branch
fix/tunnel-connect-host-transport-awareUmgesetzt in
bd2bbae(aufmain).tunneling/manager.pyleiteteTUNNEL_PUBLIC_HOSTeinmalig beim Import ausSERVER_URLab und nutzte den einen globalen Wert für jeden Tunnel → falscher Connect-Host, wenn das Backend nicht überSERVER_URLerreichbar ist.Fix per-Node:
_spawnlöst den Public-Host viaresolve_install_base(node)auf (transport-bewusst, gleicher Helper) und speichert ihn auf der Session (public_host). Defensiv — fehlende VPN-Adresse blockt das Tunnel-Öffnen NICHT (HTTPException gefangen → None).to_dict: ENVTUNNEL_PUBLIC_HOSTgewinnt → sonstself.public_host→ sonst leer +public_host_unset=True(UI: „Host manuell setzen"). KeinSERVER_URL-Global, keinlocalhost/0.0.0.0in der Ausgabe.SERVER_URL-Fallback entfernt (reines ENV).Akzeptanz verifiziert (Container): per-node →
http://172.16.1.14:port; kein Host → leer +public_host_unset; ENV → Override gewinnt. Listener bleibt backend-seitig (Datenpfad Browser→Backend:bind_port→WS→Agent), daher per-Node-Backend-Adresse korrekt.Bleibt offen wie gewünscht.
Verifiziert → erfüllt, wird geschlossen. manager.py: globaler SERVER_URL-Fallback entfernt (:41-44); Connect-Host =
TUNNEL_PUBLIC_HOST-Override → sonst per-Node aufgelöst (sess.public_host = urlparse(resolve_install_base(node)['base']).hostname, :416-424) → sonst LEER mit UI-Hinweis 'Host manuell setzen' (:96-105). Kein localhost-Fallback mehr. Commitbd2bbae.