diff --git a/crates/shadowsocks-service/src/local/dns/server.rs b/crates/shadowsocks-service/src/local/dns/server.rs index 8b622a5e8781..1a16b5d4a2e2 100644 --- a/crates/shadowsocks-service/src/local/dns/server.rs +++ b/crates/shadowsocks-service/src/local/dns/server.rs @@ -594,13 +594,19 @@ fn should_forward_by_query(context: &ServiceContext, balancer: &PingBalancer, qu if let ServerAddr::DomainName(dn, ..) = svr_cfg.addr() { // Convert domain name to `Name` // Ignore it if error occurs - if let Ok(name) = Name::from_str(dn) { + if let Ok(mut name) = Name::from_str(dn) { // cmp will handle FQDN in case insensitive way if let Ordering::Equal = query.name().cmp(&name) { // It seems that query is for this server, just bypass it to local resolver trace!("DNS querying name {} of server {:?}", query.name(), svr_cfg); return Some(false); } + // test it again with fqdn set + name.set_fqdn(true); + if let Ordering::Equal = query.name().cmp(&name) { + trace!("DNS querying name {} of server {:?}", query.name(), svr_cfg); + return Some(false); + } } } }