Revert diagnostic ServeDNS log line
This commit is contained in:
parent
19e93e39e1
commit
1fe95e3f6c
@ -75,7 +75,6 @@ func (p *RFC2136) Name() string { return "rfc2136" }
|
|||||||
// Anything else → pass through to Next (the auto plugin handles
|
// Anything else → pass through to Next (the auto plugin handles
|
||||||
// queries against the zone files we maintain).
|
// queries against the zone files we maintain).
|
||||||
func (p *RFC2136) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
func (p *RFC2136) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||||
log.Infof("ServeDNS: opcode=%d (UPDATE=5) qcount=%d", r.Opcode, len(r.Question))
|
|
||||||
if r.Opcode == dns.OpcodeUpdate {
|
if r.Opcode == dns.OpcodeUpdate {
|
||||||
if err := p.checkTSIG(w, r); err != nil {
|
if err := p.checkTSIG(w, r); err != nil {
|
||||||
log.Warningf("UPDATE rejected: %v", err)
|
log.Warningf("UPDATE rejected: %v", err)
|
||||||
|
|||||||
54
setup.go
54
setup.go
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/coredns/coredns/core/dnsserver"
|
"github.com/coredns/coredns/core/dnsserver"
|
||||||
"github.com/coredns/coredns/plugin"
|
"github.com/coredns/coredns/plugin"
|
||||||
clog "github.com/coredns/coredns/plugin/pkg/log"
|
clog "github.com/coredns/coredns/plugin/pkg/log"
|
||||||
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
// log is the package logger, scoped so messages are prefixed `[rfc2136]`.
|
// log is the package logger, scoped so messages are prefixed `[rfc2136]`.
|
||||||
@ -18,6 +19,59 @@ var log = clog.NewWithPlugin("rfc2136")
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
plugin.Register("rfc2136", setup)
|
plugin.Register("rfc2136", setup)
|
||||||
|
|
||||||
|
// miekg/dns's default MsgAcceptFunc rejects UPDATE opcode messages
|
||||||
|
// with NOTIMP before they ever reach the plugin chain (see the
|
||||||
|
// comment in miekg/dns/acceptfunc.go: "Don't allow dynamic updates,
|
||||||
|
// because then the sections can contain a whole bunch of RRs").
|
||||||
|
//
|
||||||
|
// CoreDNS constructs its dns.Server instances without setting a
|
||||||
|
// per-server MsgAcceptFunc, so the package-level default is the
|
||||||
|
// one that runs. We override it here at plugin init() time -- well
|
||||||
|
// before any dns.Server starts listening -- to permit UPDATE
|
||||||
|
// through. The plugin itself does proper validation in the
|
||||||
|
// UPDATE handler, so opening this gate doesn't lower security.
|
||||||
|
dns.DefaultMsgAcceptFunc = msgAcceptFunc
|
||||||
|
}
|
||||||
|
|
||||||
|
// msgAcceptFunc mirrors miekg/dns's defaultMsgAcceptFunc but additionally
|
||||||
|
// allows OpcodeUpdate. For UPDATE messages, the conservative Ancount/
|
||||||
|
// Nscount limits in the default function don't apply -- per RFC 2136
|
||||||
|
// those sections (Prerequisite / Update) can carry many RRs.
|
||||||
|
func msgAcceptFunc(dh dns.Header) dns.MsgAcceptAction {
|
||||||
|
// Responses are silently ignored regardless of opcode (default behaviour).
|
||||||
|
if isResponse := dh.Bits&0x8000 != 0; isResponse {
|
||||||
|
return dns.MsgIgnore
|
||||||
|
}
|
||||||
|
|
||||||
|
opcode := int(dh.Bits>>11) & 0xF
|
||||||
|
switch opcode {
|
||||||
|
case dns.OpcodeQuery, dns.OpcodeNotify, dns.OpcodeUpdate:
|
||||||
|
// allowed
|
||||||
|
default:
|
||||||
|
return dns.MsgRejectNotImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
if dh.Qdcount != 1 {
|
||||||
|
return dns.MsgReject
|
||||||
|
}
|
||||||
|
|
||||||
|
// UPDATE messages legitimately carry multiple RRs in the
|
||||||
|
// Prerequisite (Ancount) and Update (Nscount) sections -- skip the
|
||||||
|
// "exactly 1" check that the default function applies for queries.
|
||||||
|
if opcode != dns.OpcodeUpdate {
|
||||||
|
if dh.Ancount > 1 {
|
||||||
|
return dns.MsgReject
|
||||||
|
}
|
||||||
|
if dh.Nscount > 1 {
|
||||||
|
return dns.MsgReject
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if dh.Arcount > 2 {
|
||||||
|
return dns.MsgReject
|
||||||
|
}
|
||||||
|
return dns.MsgAccept
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup is invoked by the CoreDNS plugin registry once per Corefile
|
// setup is invoked by the CoreDNS plugin registry once per Corefile
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user