package main import ( "flag" "log" "os" "os/signal" "syscall" "linum/internal/server" ) func main() { addr := flag.String("addr", ":5353", "listen address") mode := flag.String("mode", "forward", "resolver mode: forward or recursive") upstream := flag.String("upstream", "1.1.1.1:53", "upstream dns server") blockfile := flag.String("blocklist", "blocklist.txt", "path to blocklist file") hints := flag.String("hints", "named.cache", "path to root hints file (download from internic.net)") flag.Parse() srv, err := server.New(server.Config{ Mode: *mode, Addr: *addr, Upstream: *upstream, BlockFile: *blockfile, HintsFile: *hints, }) if err != nil { log.Fatalf("create server: %v", err) } go func() { sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) <-sig log.Println("shutting down") os.Exit(0) }() log.Fatal(srv.ListenAndServe()) }