Forward DNS requests that aren't for our 'weave' domain

This commit is contained in:
Bryan Boreham committed 2014-10-10 15:41:09 +01:00
1 parent de65dc7996
commit b5214f65e7
2 files changed
+24

No files matched your search

+1
View File
@@ -27,6 +27,7 @@ func NewMDNSServer(zone *ZoneDb) (*MDNSServer, error) {
func makeDNSReply(r *dns.Msg, name string, addr net.IP) *dns.Msg {
m := new(dns.Msg)
m.SetReply(r)
m.RecursionAvailable = true
hdr := dns.RR_Header{Name: name, Rrtype: dns.TypeA,
Class: dns.ClassINET, Ttl: 3600}
a := &dns.A{hdr, addr}
+23
View File
@@ -39,6 +39,14 @@ func findInterface(ifaceName string) (iface *net.Interface, err error) {
return
}
func makeDNSFailResponse(r *dns.Msg) *dns.Msg {
m := new(dns.Msg)
m.SetReply(r)
m.RecursionAvailable = true
m.Rcode = dns.RcodeNameError
return m
}
func queryHandler(zone Zone, mdnsClient *MDNSClient) dns.HandlerFunc {
return func(w dns.ResponseWriter, r *dns.Msg) {
q := r.Question[0]
@@ -64,6 +72,20 @@ func queryHandler(zone Zone, mdnsClient *MDNSClient) dns.HandlerFunc {
}
}
func notUsHandler() dns.HandlerFunc {
return func(w dns.ResponseWriter, r *dns.Msg) {
q := r.Question[0]
addrs, err := net.LookupIP(q.Name)
if err == nil {
m := makeDNSReply(r, q.Name, addrs[0])
w.WriteMsg(m)
} else {
m := makeDNSFailResponse(r)
w.WriteMsg(m)
}
}
}
func StartServer(ifaceName string, dnsPort int, httpPort int, wait int) error {
var zone = new(ZoneDb)
@@ -91,6 +113,7 @@ func StartServer(ifaceName string, dnsPort int, httpPort int, wait int) error {
LocalServeMux := dns.NewServeMux()
LocalServeMux.HandleFunc(LOCAL_DOMAIN, queryHandler(zone, mdnsClient))
LocalServeMux.HandleFunc(".", notUsHandler())
mdnsServer, err := NewMDNSServer(zone)
if err != nil {