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:
+5
-2
@@ -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
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user