Skip to content

Commit ae20034

Browse files
authored
Merge pull request #27 from monasticacademy/clean-up-dns-logs
Improve logging of true DNS errors
2 parents 160ecbb + 1db11e4 commit ae20034

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

dns.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,15 @@ func handleDNS(ctx context.Context, w io.Writer, payload []byte) {
1919
}
2020

2121
if req.Opcode != dns.OpcodeQuery {
22-
verbosef("ignoring a dns query with non-query opcode (%v)", req.Opcode)
22+
errorf("ignoring a dns query with non-query opcode (%v)", req.Opcode)
2323
return
2424
}
2525

2626
// resolve the query
2727
rrs, err := handleDNSQuery(ctx, &req)
2828
if err != nil {
29-
verbosef("dns failed for %v with error: %v, sending a response with empty answer", req, err.Error())
29+
errorf("error performing DNS query: %v, sending a response with empty answer", err)
3030
// do not abort here, continue on and send a reply with no answer
31-
// because the client might easily have tried to resolve a non-existent
32-
// hostname
3331
}
3432

3533
resp := new(dns.Msg)
@@ -50,7 +48,6 @@ func handleDNS(ctx context.Context, w io.Writer, payload []byte) {
5048
errorf("error writing dns response: %v, abandoning...", err)
5149
return
5250
}
53-
verbosef("done responding to DNS request (sent %d bytes)", len(buf))
5451
}
5552

5653
func dnsTypeCode(t uint16) string {
@@ -261,7 +258,9 @@ func handleDNSQuery(ctx context.Context, req *dns.Msg) ([]dns.RR, error) {
261258
}
262259

263260
question := req.Question[0]
264-
verbosef("got dns request for %v (%v)", question.Name, dnsTypeCode(question.Qtype))
261+
questionType := dnsTypeCode(question.Qtype)
262+
263+
verbosef("got dns request for %v (%v)", question.Name, questionType)
265264

266265
// handle the request ourselves
267266
switch question.Qtype {
@@ -288,6 +287,7 @@ func handleDNSQuery(ctx context.Context, req *dns.Msg) ([]dns.RR, error) {
288287
rrs = append(rrs, rr)
289288
}
290289
return rrs, nil
290+
291291
case dns.TypeAAAA:
292292
ips, err := net.DefaultResolver.LookupIP(ctx, "ip6", question.Name)
293293
if err != nil {
@@ -307,7 +307,7 @@ func handleDNSQuery(ctx context.Context, req *dns.Msg) ([]dns.RR, error) {
307307
return rrs, nil
308308
}
309309

310-
verbose("proxying non-A request to upstream DNS server...")
310+
verbosef("proxying %s request to upstream DNS server...", questionType)
311311

312312
// proxy the request to another server
313313
request := new(dns.Msg)
@@ -318,13 +318,11 @@ func handleDNSQuery(ctx context.Context, req *dns.Msg) ([]dns.RR, error) {
318318
dnsClient.Net = "udp"
319319
response, _, err := dnsClient.Exchange(request, upstreamDNS)
320320
if err != nil {
321-
return nil, err
321+
return nil, fmt.Errorf("error in DNS message exchange: %w", err)
322322
}
323323

324324
verbosef("got answer from upstream dns server with %d answers", len(response.Answer))
325325

326-
if len(response.Answer) > 0 {
327-
return response.Answer, nil
328-
}
329-
return nil, fmt.Errorf("not found")
326+
// note that we might have 0 answers here: this means there were no records for the query, which is not an error
327+
return response.Answer, nil
330328
}

0 commit comments

Comments
 (0)