diff --git a/client/internal/peer/conn.go b/client/internal/peer/conn.go index 07ff850fc..af8e551db 100644 --- a/client/internal/peer/conn.go +++ b/client/internal/peer/conn.go @@ -556,6 +556,12 @@ func (conn *Conn) onWorkerRelayStateDisconnected() { defer conn.mu.Unlock() if conn.wgProxyRelay != nil { + log.Debugf("relayed connection is closed, clean up WireGuard config") + err := conn.config.WgConfig.WgInterface.RemovePeer(conn.config.WgConfig.RemoteKey) + if err != nil { + conn.log.Errorf("failed to remove wg endpoint: %v", err) + } + conn.endpointRelay = nil _ = conn.wgProxyRelay.CloseConn() conn.wgProxyRelay = nil diff --git a/client/internal/wgproxy/proxy_ebpf.go b/client/internal/wgproxy/proxy_ebpf.go index 969a836ff..d385cc4ca 100644 --- a/client/internal/wgproxy/proxy_ebpf.go +++ b/client/internal/wgproxy/proxy_ebpf.go @@ -181,8 +181,8 @@ func (p *WGEBPFProxy) proxyToRemote() { conn, ok := p.turnConnStore[uint16(addr.Port)] p.turnConnMutex.Unlock() if !ok { - log.Infof("turn conn not found by port, exit form proxy: %d", addr.Port) - return // todo replace it to return. For debug troubleshooting keep it + log.Debugf("turn conn not found by port because conn already has been closed: %d", addr.Port) + continue } _, err = conn.Write(buf[:n])