Fix Tunnel: ID-Sync Backend<->Agent, bidirektionaler Proxy, API-Key via Query-Param

- Backend gibt tunnel_id vor, Agent uebernimmt sie
- Proxy-Verbindung bidirektional: Daten vom Agent zurueck an TCP-Client
- Middleware akzeptiert api_key als Query-Parameter (fuer WebSocket)
- Getestet: OPNsense WebUI erreichbar ueber Tunnel
This commit is contained in:
cynfo3000
2026-02-28 07:52:38 +01:00
parent f47154787d
commit fa68e191f9
4 changed files with 53 additions and 20 deletions
+5 -2
View File
@@ -116,8 +116,11 @@ func (h *Handler) handleTunnelOpen(msg Message) Message {
}
targetPort := int(targetPortFloat)
// Tunnel öffnen
tunnelID, err := h.client.tunnelManager.OpenTunnel(targetHost, targetPort)
// Tunnel-ID vom Backend uebernehmen (falls vorhanden)
backendTunnelID, _ := msg.Params["tunnel_id"].(string)
// Tunnel oeffnen
tunnelID, err := h.client.tunnelManager.OpenTunnel(targetHost, targetPort, backendTunnelID)
if err != nil {
response.Status = "error"
response.Error = fmt.Sprintf("Tunnel öffnen fehlgeschlagen: %v", err)
+11 -6
View File
@@ -33,9 +33,14 @@ func NewTunnelManager(client *Client) *TunnelManager {
}
}
func (tm *TunnelManager) OpenTunnel(targetHost string, targetPort int) (string, error) {
// Eindeutige Tunnel-ID generieren
tunnelID := tm.generateTunnelID()
func (tm *TunnelManager) OpenTunnel(targetHost string, targetPort int, tunnelID ...string) (string, error) {
// Tunnel-ID vom Backend uebernehmen oder selbst generieren
id := ""
if len(tunnelID) > 0 && tunnelID[0] != "" {
id = tunnelID[0]
} else {
id = tm.generateTunnelID()
}
// Verbindung zum Ziel aufbauen
target := fmt.Sprintf("%s:%d", targetHost, targetPort)
@@ -46,7 +51,7 @@ func (tm *TunnelManager) OpenTunnel(targetHost string, targetPort int) (string,
// Tunnel erstellen
tunnel := &Tunnel{
ID: tunnelID,
ID: id,
TargetHost: targetHost,
TargetPort: targetPort,
Conn: conn,
@@ -56,13 +61,13 @@ func (tm *TunnelManager) OpenTunnel(targetHost string, targetPort int) (string,
// Tunnel registrieren
tm.mutex.Lock()
tm.tunnels[tunnelID] = tunnel
tm.tunnels[id] = tunnel
tm.mutex.Unlock()
// Data-Forwarding starten
go tm.forwardData(tunnel)
return tunnelID, nil
return id, nil
}
func (tm *TunnelManager) CloseTunnel(tunnelID string) error {