1
0
Fork 0

bugfix: do proxy if no AAAA records found, e.g. only CNAME records

pull/2/head
jh.gao 2018-06-27 12:06:41 +08:00
parent fa5c63b2c1
commit d6a767f549
2 changed files with 18 additions and 4 deletions

View File

@ -3,7 +3,6 @@ package dns64
import (
"errors"
"log"
"net"
"time"
@ -56,13 +55,15 @@ func (r *ResponseWriter) WriteMsg(res *dns.Msg) error {
// do not modify if there are AAAA records or NameError. continue if NoData or any other error.
ty, _ := response.Typify(res, time.Now().UTC())
if ty == response.NoError || ty == response.NameError {
return r.ResponseWriter.WriteMsg(res)
if hasAAAA(res) {
return r.ResponseWriter.WriteMsg(res)
}
}
// perform request to upstream.
res2, err := r.Proxy.Lookup(state, state.Name(), dns.TypeA)
if err != nil {
log.Printf("[WARNING] Unable to query upstream DNS: %v", err)
log.Warningf("[WARNING] Unable to query upstream DNS: %v", err)
res.MsgHdr.Rcode = dns.RcodeServerFailure
return r.ResponseWriter.WriteMsg(res)
}
@ -103,7 +104,7 @@ func (r *ResponseWriter) WriteMsg(res *dns.Msg) error {
// Write implements the dns.ResponseWriter interface.
func (r *ResponseWriter) Write(buf []byte) (int, error) {
log.Printf("[WARNING] DNS64 called with Write: not performing DNS64")
log.Warning("[WARNING] DNS64 called with Write: not performing DNS64")
n, err := r.ResponseWriter.Write(buf)
return n, err
}
@ -141,3 +142,13 @@ func To6(prefix *net.IPNet, addr net.IP) (net.IP, error) {
return v6, nil
}
// hasAAAA checks if AAAA records exists in dns.Msg
func hasAAAA(res *dns.Msg) bool {
for _, a := range res.Answer {
if a.Header().Rrtype == dns.TypeAAAA {
return true
}
}
return false
}

View File

@ -6,11 +6,14 @@ import (
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/pkg/dnsutil"
clog "github.com/coredns/coredns/plugin/pkg/log"
"github.com/coredns/coredns/plugin/proxy"
"github.com/mholt/caddy"
)
var log = clog.NewWithPlugin("hosts")
func init() {
caddy.RegisterPlugin("dns64", caddy.Plugin{
ServerType: "dns",