From f7c594af5aac0bd8fe44febde90851ebbbf2de58 Mon Sep 17 00:00:00 2001 From: cynic Date: Mon, 10 Jun 2024 04:09:00 +0000 Subject: [PATCH] generate proper response for missing A record --- pkg/meshname/server.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/pkg/meshname/server.go b/pkg/meshname/server.go index cdd8112..5337bc2 100644 --- a/pkg/meshname/server.go +++ b/pkg/meshname/server.go @@ -162,13 +162,30 @@ func (s *MeshnameServer) handleMeshnameRequest(w dns.ResponseWriter, r *dns.Msg) func (s *MeshnameServer) handleMeshIPRequest(w dns.ResponseWriter, r *dns.Msg) { m := new(dns.Msg) m.SetReply(r) - s.log.Debugln(r.String()) + m.Authoritative = true for _, q := range r.Question { labels := dns.SplitDomainName(q.Name) + + // handle A type properly + if q.Qtype == dns.TypeA { + answer := new(dns.SOA) + answer.Hdr = dns.RR_Header{Name: q.Name, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: 3600} + answer.Ns = "ns1.mesh.kyun.li." + answer.Mbox = "ns2.mesh.kyun.li." + answer.Serial = 2024061000 + answer.Refresh = 1200 + answer.Retry = 180 + answer.Expire = 1209600 + answer.Minttl = 600 + m.Ns = append(m.Ns, answer) + s.log.Debugln(m) + continue + } + // resolve only AAAA type if q.Qtype != dns.TypeAAAA || q.Qclass != dns.ClassINET { - s.log.Debugln("Error: invalid resource requested") + //s.log.Debugln("Error: invalid resource requested") continue } @@ -176,8 +193,8 @@ func (s *MeshnameServer) handleMeshIPRequest(w dns.ResponseWriter, r *dns.Msg) { answer := new(dns.AAAA) answer.Hdr = dns.RR_Header{Name: q.Name, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 3600} answer.AAAA = resolvedAddr - m.Answer = append(m.Answer, answer) + s.log.Debugln(m) } else { s.log.Debugln(err) }