diff --git a/dns.go b/dns.go index d25384f05fc497c280d8aef0b322394fb5424b14..2bd5ba1544169cd54886e7ab2d11065b01cb1d10 100644 --- a/dns.go +++ b/dns.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "math/rand" + "net" "strconv" "strings" "time" @@ -90,9 +91,17 @@ func ednsFromRequest(req, m *dns.Msg) { return } -// Create a RR string for an IP. -func recordForIp(query string, ttl int, recType string, ip string) string { - return fmt.Sprintf("%s %d IN %s %s", query, ttl, recType, ip) +// Create an A RR for a specific IP. +func recordForIp(name string, ttl int, ip string) *dns.A { + rec := new(dns.A) + rec.Hdr = dns.RR_Header{ + Name: name, + Rrtype: dns.TypeA, + Class: dns.ClassINET, + Ttl: uint32(ttl), + } + rec.A = net.ParseIP(ip) + return rec } func (d *DnsRedirector) getQuestionName(req *dns.Msg) string { @@ -150,9 +159,8 @@ func (d *DnsRedirector) serveDNS(w dns.ResponseWriter, req *dns.Msg) { m.SetReply(req) m.MsgHdr.Authoritative = true for _, ip := range ips { - rec := recordForIp(query, d.ttl, "A", ip) - answer, _ := dns.NewRR(rec) - m.Answer = append(m.Answer, answer) + rec := recordForIp(query, d.ttl, ip) + m.Answer = append(m.Answer, rec) } log.Printf("Query(%s): %v", query, ips) }