A simple non-recursive DNS server written in Go.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

52 lines
1.1 KiB

package main
import (
"log"
"os"
"github.com/alexflint/go-arg"
"github.com/brettlangdon/realm"
)
var args struct {
Zones []string `arg:"--zone,positional,help:DNS zone files to serve from this server"`
Bind string `arg:"help:[<host>]:<port> to bind too"`
StatsD string `arg:"--statsd,help:<host>:<port> to send StatsD metrics to"`
}
func main() {
args.Bind = ":53"
argParser := arg.MustParse(&args)
if len(args.Zones) == 0 {
log.Println("must supply at least 1 zone file to serve")
argParser.WriteUsage(os.Stderr)
os.Exit(1)
}
var registry *realm.Registry
registry = realm.NewRegistry()
for _, filename := range args.Zones {
// Load and parse the zone file
var zone *realm.Zone
var err error
log.Printf("parsing zone file \"%s\"\n", filename)
zone, err = realm.ParseZone(filename)
if err != nil {
log.Fatal(err)
}
registry.AddZone(zone)
}
// Create and start the server
log.Printf("starting the server on \"%s\"\n", args.Bind)
var server *realm.Server
var err error
server, err = realm.NewServer(args.Bind, registry, args.StatsD)
if err != nil {
log.Fatal(err)
}
log.Fatal(server.ListenAndServe())
}