diff --git a/internal/authoritative.go b/internal/authoritative.go index cb6fcc8..f9f84eb 100644 --- a/internal/authoritative.go +++ b/internal/authoritative.go @@ -124,5 +124,7 @@ func handleRequest(w dns.ResponseWriter, r *dns.Msg, zone zoneView) { m.SetRcode(m, dns.RcodeNameError) } + debugResponse(m) + w.WriteMsg(m) } diff --git a/internal/cooldns.go b/internal/cooldns.go index af7d896..812582f 100644 --- a/internal/cooldns.go +++ b/internal/cooldns.go @@ -18,6 +18,13 @@ type zoneMap map[string][]zoneView // Start starts cooldns func Start(configPath string) { + + debug := os.Getenv("COOLDNS_DEBUG") + if len(debug) != 0 { + debugFlag = true + debugLog("Enabled debug") + } + config, err := loadConfig(configPath) if err != nil { log.Fatalf("Failed to load config: %s\n", err.Error()) @@ -80,6 +87,8 @@ func createServer(zones zoneMap, config config, aclList map[string]*net.IPNet, b return } + debugRequest(r, ip) + // Check if it is a ACME DNS-01 challange if config.Lego.Enable && handleACMERequest(w, r, acmeList) { return @@ -96,6 +105,7 @@ func createServer(zones zoneMap, config config, aclList map[string]*net.IPNet, b handleBlockedDomain(w, r) } else { // Forward request + debugLog("Forwarded request") in, _, err := c.Exchange(r, config.Forward.Server) if err != nil { @@ -167,6 +177,8 @@ func createHandler(zones []zoneView, config config, aclList map[string]*net.IPNe return } + debugRequest(r, ip) + // Check if it is a ACME DNS-01 challange if config.Lego.Enable && handleACMERequest(w, r, acmeList) { return diff --git a/internal/debug.go b/internal/debug.go new file mode 100644 index 0000000..338736d --- /dev/null +++ b/internal/debug.go @@ -0,0 +1,35 @@ +package cooldns + +import ( + "fmt" + "log" + "net" + + "github.com/miekg/dns" +) + +var debugFlag = false + +func debugLog(msg string) { + if !debugFlag { + return + } + + log.Printf("DEBUG: %s", msg) +} + +func debugRequest(r *dns.Msg, ip net.IP) { + if !debugFlag { + return + } + + debugLog(fmt.Sprintf("Request from %s: %s", ip, r.String())) +} + +func debugResponse(m *dns.Msg) { + if !debugFlag { + return + } + + debugLog(fmt.Sprintf("Response send: %s", m.String())) +}