diff --git a/rust/connlib/tunnel/src/client.rs b/rust/connlib/tunnel/src/client.rs index 5056e34e7..81c680240 100644 --- a/rust/connlib/tunnel/src/client.rs +++ b/rust/connlib/tunnel/src/client.rs @@ -1553,7 +1553,10 @@ impl ClientState { }; if let Some(resource) = self.resources_by_id.get(&new_resource.id()) { - if resource.has_different_address(&new_resource) { + let resource_addressability_changed = resource.has_different_address(&new_resource) + || resource.has_different_ip_stack(&new_resource); + + if resource_addressability_changed { self.remove_resource(resource.id()); } } diff --git a/rust/connlib/tunnel/src/client/resource.rs b/rust/connlib/tunnel/src/client/resource.rs index d6131b471..88b60d92e 100644 --- a/rust/connlib/tunnel/src/client/resource.rs +++ b/rust/connlib/tunnel/src/client/resource.rs @@ -169,6 +169,13 @@ impl Resource { } } + pub fn has_different_ip_stack(&self, other: &Resource) -> bool { + match (self, other) { + (Resource::Dns(dns_a), Resource::Dns(dns_b)) => dns_a.ip_stack != dns_b.ip_stack, + _ => false, + } + } + pub fn addresses(&self) -> Vec { match self { Resource::Dns(_) => vec![],