|
|
|
@ -13,24 +13,24 @@ import (
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type dnsHandler struct {
|
|
|
|
|
Config Configuration
|
|
|
|
|
httpBindIP net.IP
|
|
|
|
|
logger *log.Logger
|
|
|
|
|
Resolver DNSResolver
|
|
|
|
|
Blocklist BlocklistManager
|
|
|
|
|
Cache DNSCacher
|
|
|
|
|
Config Configuration
|
|
|
|
|
blockForwardIP net.IP
|
|
|
|
|
logger *log.Logger
|
|
|
|
|
Resolver DNSResolver
|
|
|
|
|
Blocklist BlocklistManager
|
|
|
|
|
Cache DNSCacher
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//NewDNSHandler creates a new DNS server handler
|
|
|
|
|
func NewDNSHandler(httpBindIP string, cache DNSCacher, blocklist BlocklistManager, r DNSResolver, cfg Configuration) (dns.Handler, error) {
|
|
|
|
|
func NewDNSHandler(blockForwardIP string, cache DNSCacher, blocklist BlocklistManager, r DNSResolver, cfg Configuration) (dns.Handler, error) {
|
|
|
|
|
l := log.New(os.Stdout, "[DNS Server] ", log.LUTC|log.Lmicroseconds|log.Lshortfile)
|
|
|
|
|
return &dnsHandler{
|
|
|
|
|
logger: l,
|
|
|
|
|
httpBindIP: net.ParseIP(httpBindIP),
|
|
|
|
|
Resolver: r,
|
|
|
|
|
Config: cfg,
|
|
|
|
|
Blocklist: blocklist,
|
|
|
|
|
Cache: cache,
|
|
|
|
|
logger: l,
|
|
|
|
|
blockForwardIP: net.ParseIP(blockForwardIP),
|
|
|
|
|
Resolver: r,
|
|
|
|
|
Config: cfg,
|
|
|
|
|
Blocklist: blocklist,
|
|
|
|
|
Cache: cache,
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -68,7 +68,7 @@ func (h *dnsHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
|
|
|
|
}
|
|
|
|
|
} else if list, block := h.Blocklist.IsBlacklisted(domain); block {
|
|
|
|
|
h.logger.Printf("blocked dns query for '%s' from list '%s'", domain, list)
|
|
|
|
|
msg.Answer = append(msg.Answer, &dns.A{Hdr: header, A: h.httpBindIP})
|
|
|
|
|
msg.Answer = append(msg.Answer, &dns.A{Hdr: header, A: h.blockForwardIP})
|
|
|
|
|
} else if cacheAnswers, ok := h.Cache.Get(domain); ok && len(cacheAnswers) > 0 {
|
|
|
|
|
msg.Answer = append(msg.Answer, cacheAnswers...)
|
|
|
|
|
} else {
|
|
|
|
|