From b7fd5d37008b9567614c98e60a71b87dfcb48031 Mon Sep 17 00:00:00 2001 From: Andrey Meshkov Date: Wed, 14 Apr 2021 18:20:03 +0300 Subject: [PATCH] Fix compatibility with the old dnscrypt-proxy version --- cmd/generate.go | 2 ++ server.go | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/generate.go b/cmd/generate.go index 6f8d914..f3b1e13 100644 --- a/cmd/generate.go +++ b/cmd/generate.go @@ -47,4 +47,6 @@ func generate(args GenerateArgs) { log.Info("Configuration has been written to %s", args.Out) log.Info("Go to https://dnscrypt.info/stamps to generate an SDNS stamp") + log.Info("You can run a DNSCrypt server using the following command:") + log.Info("dnscrypt server -c %s -f 8.8.8.8", args.Out) } diff --git a/server.go b/server.go index d127242..02c4269 100644 --- a/server.go +++ b/server.go @@ -3,6 +3,7 @@ package dnscrypt import ( "context" "net" + "strings" "sync" "time" @@ -158,7 +159,7 @@ func (s *Server) isStarted() bool { return started } -// serveDNS serves DNS response +// serveDNS serves a DNS response func (s *Server) serveDNS(rw ResponseWriter, r *dns.Msg) error { if r == nil || len(r.Question) != 1 || r.Response { return ErrInvalidQuery @@ -240,7 +241,8 @@ func (s *Server) handleHandshake(b []byte, certTxt string) ([]byte, error) { q := m.Question[0] providerName := dns.Fqdn(s.ProviderName) - if q.Qtype != dns.TypeTXT || q.Name != providerName { + qName := strings.ToLower(q.Name) // important, may be random case + if q.Qtype != dns.TypeTXT || qName != providerName { // Invalid provider name or type, doing nothing return nil, ErrInvalidQuery } @@ -259,6 +261,10 @@ func (s *Server) handleHandshake(b []byte, certTxt string) ([]byte, error) { }, } reply.Answer = append(reply.Answer, txt) + + // These bits are important for the old dnscrypt-proxy versions + reply.Authoritative = true + reply.RecursionAvailable = true return reply.Pack() }