add list support for auther, admission and bypass

This commit is contained in:
ginuerzh
2022-08-23 21:49:49 +08:00
parent fe6554d8a3
commit bdd239fb09
11 changed files with 134 additions and 71 deletions

View File

@ -1,12 +1,10 @@
package dns
import (
"bytes"
"context"
"errors"
"fmt"
"net"
"strconv"
"strings"
"time"
@ -114,7 +112,7 @@ func (h *dnsHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler.
}).Infof("%s >< %s", conn.RemoteAddr(), conn.LocalAddr())
}()
b := bufpool.Get(defaultBufferSize)
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
n, err := conn.Read(*b)
@ -165,7 +163,7 @@ func (h *dnsHandler) exchange(ctx context.Context, msg []byte, log logger.Logger
mr = h.lookupHosts(&mq, log)
if mr != nil {
b := bufpool.Get(defaultBufferSize)
b := bufpool.Get(h.md.bufferSize)
return mr.PackBuffer(*b)
}
@ -177,7 +175,7 @@ func (h *dnsHandler) exchange(ctx context.Context, msg []byte, log logger.Logger
log.Debugf("exchange message %d (cached): %s", mq.Id, mq.Question[0].String())
mr.Id = mq.Id
b := bufpool.Get(defaultBufferSize)
b := bufpool.Get(h.md.bufferSize)
return mr.PackBuffer(*b)
}
@ -188,7 +186,7 @@ func (h *dnsHandler) exchange(ctx context.Context, msg []byte, log logger.Logger
}()
}
b := bufpool.Get(defaultBufferSize)
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
query, err := mq.PackBuffer(*b)
@ -268,13 +266,3 @@ func (h *dnsHandler) lookupHosts(r *dns.Msg, log logger.Logger) (m *dns.Msg) {
return
}
func (h *dnsHandler) dumpMsgHeader(m *dns.Msg) string {
buf := new(bytes.Buffer)
buf.WriteString(m.MsgHdr.String() + " ")
buf.WriteString("QUERY: " + strconv.Itoa(len(m.Question)) + ", ")
buf.WriteString("ANSWER: " + strconv.Itoa(len(m.Answer)) + ", ")
buf.WriteString("AUTHORITY: " + strconv.Itoa(len(m.Ns)) + ", ")
buf.WriteString("ADDITIONAL: " + strconv.Itoa(len(m.Extra)))
return buf.String()
}

View File

@ -19,7 +19,8 @@ type metadata struct {
timeout time.Duration
clientIP net.IP
// nameservers
dns []string
dns []string
bufferSize int
}
func (h *dnsHandler) parseMetadata(md mdata.Metadata) (err error) {
@ -29,6 +30,7 @@ func (h *dnsHandler) parseMetadata(md mdata.Metadata) (err error) {
timeout = "timeout"
clientIP = "clientIP"
dns = "dns"
bufferSize = "bufferSize"
)
h.md.readTimeout = mdx.GetDuration(md, readTimeout)
@ -42,6 +44,10 @@ func (h *dnsHandler) parseMetadata(md mdata.Metadata) (err error) {
h.md.clientIP = net.ParseIP(sip)
}
h.md.dns = mdx.GetStrings(md, dns)
h.md.bufferSize = mdx.GetInt(md, bufferSize)
if h.md.bufferSize <= 0 {
h.md.bufferSize = defaultBufferSize
}
return
}