package main import ( "log" "strings" "github.com/miekg/dns" ) const upstream = "1.1.1.1:53" var blocklist = map[string]bool{ "x.com.": true, } func handleDNS(w dns.ResponseWriter, r *dns.Msg) { m := new(dns.Msg) m.SetReply(r) c := new(dns.Client) for _, q := range r.Question { log.Printf("question: %s", q.Name) if blocklist[strings.ToLower(q.Name)] { res, err := dns.NewRR(q.Name + " 60 IN A 0.0.0.0") if err != nil { log.Fatal(err) } m.Answer = append(m.Answer, res) } else { req := new(dns.Msg) req.Question = append(req.Question, q) res, _, err := c.Exchange(req, upstream) if err != nil { log.Fatal(err) } m.Answer = append(m.Answer, res.Answer...) } } w.WriteMsg(m) } func main() { dns.HandleFunc(".", handleDNS) server := &dns.Server{Addr: ":8053", Net: "udp"} log.Println("Starting DNS Server on :53") log.Fatal(server.ListenAndServe()) }