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