From 3ebd47f88d65172099d6451356fb61b6ab7b9a76 Mon Sep 17 00:00:00 2001 From: Viktor Liu Date: Mon, 4 May 2026 13:50:40 +0200 Subject: [PATCH] Use previous DNS-route mode when removing existing rules during mode switch --- client/internal/routemanager/server/server.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/client/internal/routemanager/server/server.go b/client/internal/routemanager/server/server.go index 9fe7e1564..492473076 100644 --- a/client/internal/routemanager/server/server.go +++ b/client/internal/routemanager/server/server.go @@ -38,7 +38,7 @@ func (r *Router) UpdateRoutes(routesMap map[route.ID]*route.Route, useNewDNSRout r.mux.Lock() defer r.mux.Unlock() - r.useNewDNSRoute = useNewDNSRoute + prevUseNewDNSRoute := r.useNewDNSRoute serverRoutesToRemove := make([]route.ID, 0) @@ -51,7 +51,7 @@ func (r *Router) UpdateRoutes(routesMap map[route.ID]*route.Route, useNewDNSRout for _, routeID := range serverRoutesToRemove { oldRoute := r.routes[routeID] - err := r.removeFromServerNetwork(oldRoute) + err := r.removeFromServerNetworkWithMode(oldRoute, prevUseNewDNSRoute) if err != nil { log.Errorf("Unable to remove route id: %s, network %s, from server, got: %v", oldRoute.ID, oldRoute.Network, err) @@ -59,6 +59,8 @@ func (r *Router) UpdateRoutes(routesMap map[route.ID]*route.Route, useNewDNSRout delete(r.routes, routeID) } + r.useNewDNSRoute = useNewDNSRoute + // If routing is to be disabled, do it after routes have been removed // If routing is to be enabled, do it before adding new routes; addToServerNetwork needs routing to be enabled if len(routesMap) > 0 { @@ -89,12 +91,16 @@ func (r *Router) UpdateRoutes(routesMap map[route.ID]*route.Route, useNewDNSRout } func (r *Router) removeFromServerNetwork(route *route.Route) error { + return r.removeFromServerNetworkWithMode(route, r.useNewDNSRoute) +} + +func (r *Router) removeFromServerNetworkWithMode(route *route.Route, useNewDNSRoute bool) error { if r.ctx.Err() != nil { log.Infof("Not removing from server network because context is done") return r.ctx.Err() } - routerPair := routeToRouterPair(route, r.useNewDNSRoute) + routerPair := routeToRouterPair(route, useNewDNSRoute) if err := r.firewall.RemoveNatRule(routerPair); err != nil { return fmt.Errorf("remove routing rules: %w", err) }