11package dns
22
33import (
4- "time"
5-
64 "github.com/miekg/dns"
75)
86
97const defaultTTL = 30
108
11- var upstreamServers = []string {
12- "8.8.8.8:53" ,
13- "1.1.1.1:53" ,
14- }
15-
169type dnsHandler struct {
17- store * RecordStore
18- client * dns.Client
19- }
20-
21- func newDNSHandler (store * RecordStore ) * dnsHandler {
22- return & dnsHandler {
23- store : store ,
24- client : & dns.Client {
25- Net : "udp" ,
26- Timeout : 5 * time .Second ,
27- },
28- }
10+ store * RecordStore
2911}
3012
3113func (h * dnsHandler ) ServeDNS (w dns.ResponseWriter , r * dns.Msg ) {
@@ -36,29 +18,23 @@ func (h *dnsHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
3618 for _ , q := range r .Question {
3719 switch q .Qtype {
3820 case dns .TypeA :
39- if ! h .handleA (m , q ) {
40- h .forwardQuery (w , r )
41- return
42- }
21+ h .handleA (m , q )
4322 case dns .TypeAAAA :
44- if ! h .handleAAAA (m , q ) {
45- h .forwardQuery (w , r )
46- return
47- }
23+ h .handleAAAA (m , q )
4824 default :
49- h .forwardQuery (w , r )
50- return
25+ m .Rcode = dns .RcodeNotImplemented
5126 }
5227 }
5328
5429 w .WriteMsg (m )
5530}
5631
57- func (h * dnsHandler ) handleA (m * dns.Msg , q dns.Question ) bool {
32+ func (h * dnsHandler ) handleA (m * dns.Msg , q dns.Question ) {
5833 ips := h .store .Lookup (q .Name )
5934
6035 if ips == nil {
61- return false
36+ m .Rcode = dns .RcodeNameError
37+ return
6238 }
6339
6440 for _ , ip := range ips {
@@ -75,14 +51,14 @@ func (h *dnsHandler) handleA(m *dns.Msg, q dns.Question) bool {
7551 m .Answer = append (m .Answer , rr )
7652 }
7753 }
78- return true
7954}
8055
81- func (h * dnsHandler ) handleAAAA (m * dns.Msg , q dns.Question ) bool {
56+ func (h * dnsHandler ) handleAAAA (m * dns.Msg , q dns.Question ) {
8257 ips := h .store .Lookup (q .Name )
8358
8459 if ips == nil {
85- return false
60+ m .Rcode = dns .RcodeNameError
61+ return
8662 }
8763
8864 for _ , ip := range ips {
@@ -99,22 +75,4 @@ func (h *dnsHandler) handleAAAA(m *dns.Msg, q dns.Question) bool {
9975 m .Answer = append (m .Answer , rr )
10076 }
10177 }
102- return true
103- }
104-
105- func (h * dnsHandler ) forwardQuery (w dns.ResponseWriter , r * dns.Msg ) {
106- for _ , server := range upstreamServers {
107- resp , _ , err := h .client .Exchange (r , server )
108- if err != nil {
109- continue
110- }
111- resp .Id = r .Id
112- w .WriteMsg (resp )
113- return
114- }
115-
116- m := new (dns.Msg )
117- m .SetReply (r )
118- m .Rcode = dns .RcodeServerFailure
119- w .WriteMsg (m )
12078}
0 commit comments