generate proper response for missing A record

This commit is contained in:
cynic 2024-06-10 04:09:00 +00:00
parent 17a8ed4414
commit f7c594af5a

View File

@ -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)
}