35 lines
713 B
Go
35 lines
713 B
Go
package main
|
|
|
|
import (
|
|
"github.com/miekg/dns"
|
|
"github.com/zettio/weavedns"
|
|
"log"
|
|
"net"
|
|
)
|
|
|
|
var zone = new(weavedns.ZoneDb)
|
|
|
|
func handleLocal(w dns.ResponseWriter, r *dns.Msg) {
|
|
m := new(dns.Msg)
|
|
m.SetReply(r)
|
|
q := r.Question[0]
|
|
ip, err := zone.MatchLocal(q.Name)
|
|
if err == nil {
|
|
hdr := dns.RR_Header{Name: q.Name, Rrtype: dns.TypeA,
|
|
Class: dns.ClassINET, Ttl: 3600}
|
|
a := &dns.A{hdr, net.ParseIP(ip)}
|
|
m.Answer = append(m.Answer, a)
|
|
} else {
|
|
log.Printf("Failed lookup for %s", q.Name)
|
|
}
|
|
w.WriteMsg(m)
|
|
return
|
|
}
|
|
|
|
func main() {
|
|
LocalServeMux := dns.NewServeMux()
|
|
LocalServeMux.HandleFunc("local", handleLocal)
|
|
go weavedns.ListenHttp(zone)
|
|
dns.ListenAndServe(":5300", "udp", LocalServeMux)
|
|
}
|