diff --git a/wgengine/tsdns/tsdns.go b/wgengine/tsdns/tsdns.go index e4ecf90f6..6aa637ac5 100644 --- a/wgengine/tsdns/tsdns.go +++ b/wgengine/tsdns/tsdns.go @@ -293,6 +293,14 @@ func (r *Resolver) parseQuery(query []byte, resp *response) error { return err } + // Lowercase the name: DOMAIN.COM. should resolve the same as domain.com. + name := resp.Question.Name.Data[:resp.Question.Name.Length] + for i, b := range name { + if 'A' <= b && b <= 'Z' { + name[i] = b - 'A' + 'a' + } + } + return nil } diff --git a/wgengine/tsdns/tsdns_test.go b/wgengine/tsdns/tsdns_test.go index 72e4031bd..4cca1a108 100644 --- a/wgengine/tsdns/tsdns_test.go +++ b/wgengine/tsdns/tsdns_test.go @@ -550,6 +550,7 @@ func TestFull(t *testing.T) { }{ {"ipv4", dnspacket("test1.ipn.dev.", dns.TypeA), validIPv4Response}, {"ipv6", dnspacket("test2.ipn.dev.", dns.TypeAAAA), validIPv6Response}, + {"upper", dnspacket("TEST1.IPN.DEV.", dns.TypeA), validIPv4Response}, {"ptr", dnspacket("4.3.2.1.in-addr.arpa.", dns.TypePTR), validPTRResponse}, {"error", dnspacket("test3.ipn.dev.", dns.TypeA), nxdomainResponse}, }