Fix verdicts of DNS request connections

This commit is contained in:
Daniel 2022-02-25 15:36:53 +01:00
parent 6cbe33ae70
commit 1dde1437b6

View file

@ -250,27 +250,35 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, request *dns.Msg)
rrCache, err = resolver.Resolve(ctx, q) rrCache, err = resolver.Resolve(ctx, q)
// Handle error. // Handle error.
if err != nil { if err != nil {
conn.Failed(fmt.Sprintf("query failed: %s", err), "")
switch { switch {
case errors.Is(err, resolver.ErrNotFound): case errors.Is(err, resolver.ErrNotFound):
tracer.Tracef("nameserver: %s", err) tracer.Tracef("nameserver: %s", err)
conn.Failed("domain does not exist", "")
return reply(nsutil.NxDomain("nxdomain: " + err.Error())) return reply(nsutil.NxDomain("nxdomain: " + err.Error()))
case errors.Is(err, resolver.ErrBlocked): case errors.Is(err, resolver.ErrBlocked):
tracer.Tracef("nameserver: %s", err) tracer.Tracef("nameserver: %s", err)
conn.Block(err.Error(), "")
return reply(nsutil.BlockIP("blocked: " + err.Error())) return reply(nsutil.BlockIP("blocked: " + err.Error()))
case errors.Is(err, resolver.ErrLocalhost): case errors.Is(err, resolver.ErrLocalhost):
tracer.Tracef("nameserver: returning localhost records") tracer.Tracef("nameserver: returning localhost records")
conn.Accept("allowing query for localhost", "")
return reply(nsutil.Localhost()) return reply(nsutil.Localhost())
case errors.Is(err, resolver.ErrOffline): case errors.Is(err, resolver.ErrOffline):
if rrCache == nil { if rrCache == nil {
log.Tracer(ctx).Debugf("nameserver: not resolving %s, device is offline", q.ID()) log.Tracer(ctx).Debugf("nameserver: not resolving %s, device is offline", q.ID())
conn.Failed("not resolving, device is offline", "")
return reply(nsutil.ServerFailure(err.Error())) return reply(nsutil.ServerFailure(err.Error()))
} }
// If an rrCache was returned, it's usable a backup. // If an rrCache was returned, it's usable as a backup.
rrCache.IsBackup = true rrCache.IsBackup = true
log.Tracer(ctx).Debugf("nameserver: device is offline, using backup cache for %s", q.ID()) log.Tracer(ctx).Debugf("nameserver: device is offline, using backup cache for %s", q.ID())
default: default:
tracer.Warningf("nameserver: failed to resolve %s: %s", q.ID(), err) tracer.Warningf("nameserver: failed to resolve %s: %s", q.ID(), err)
conn.Failed(fmt.Sprintf("query failed: %s", err), "")
addFailingQuery(q, err) addFailingQuery(q, err)
return reply(nsutil.ServerFailure("internal error: " + err.Error())) return reply(nsutil.ServerFailure("internal error: " + err.Error()))
} }