add flake to build go module and to block all parent roots

This commit is contained in:
2025-09-22 10:18:00 +08:00
parent c4e8442517
commit 191f2e6ba2
2 changed files with 23 additions and 6 deletions

View File

@@ -24,6 +24,12 @@
]; ];
}; };
}; };
packages.default = pkgs.buildGoModule {
name = "nutdns";
src = ./.;
vendorHash = "sha256-4V3cIgEN8WkHHrPz9SRshoiu0C+NHR0Xov1FZ06Q9XI=";
};
} }
); );
} }

23
main.go
View File

@@ -9,8 +9,21 @@ import (
const upstream = "1.1.1.1:53" const upstream = "1.1.1.1:53"
var blocklist = map[string]bool{ var blocklist = []string{
"x.com.": true, "x.com.",
"twitter.com.",
"example.com.",
}
func isBlocked(domain string) bool {
domain = strings.ToLower(domain)
for _, blocked := range blocklist {
// Check exact match or subdomain
if domain == blocked || strings.HasSuffix(domain, "."+blocked) {
return true
}
}
return false
} }
func handleDNS(w dns.ResponseWriter, r *dns.Msg) { func handleDNS(w dns.ResponseWriter, r *dns.Msg) {
@@ -20,7 +33,7 @@ func handleDNS(w dns.ResponseWriter, r *dns.Msg) {
c := new(dns.Client) c := new(dns.Client)
for _, q := range r.Question { for _, q := range r.Question {
log.Printf("question: %s", q.Name) log.Printf("question: %s", q.Name)
if blocklist[strings.ToLower(q.Name)] { if isBlocked(q.Name) {
res, err := dns.NewRR(q.Name + " 60 IN A 0.0.0.0") res, err := dns.NewRR(q.Name + " 60 IN A 0.0.0.0")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@@ -41,10 +54,8 @@ func handleDNS(w dns.ResponseWriter, r *dns.Msg) {
} }
func main() { func main() {
dns.HandleFunc(".", handleDNS) dns.HandleFunc(".", handleDNS)
server := &dns.Server{Addr: ":53", Net: "udp"}
server := &dns.Server{Addr: ":8053", Net: "udp"}
log.Println("Starting DNS Server on :53") log.Println("Starting DNS Server on :53")
log.Fatal(server.ListenAndServe()) log.Fatal(server.ListenAndServe())
} }