FreeBSD Manual Pages
COREDNS-DNSTAP(7) CoreDNS Plugins COREDNS-DNSTAP(7) NAME dnstap - enables logging to dnstap. DESCRIPTION dnstap is a flexible, structured binary log format for DNS software; see https://dnstap.info <https://dnstap.info>. With this plugin you make CoreDNS output dnstap logging. Every message is sent to the socket as soon as it comes in, the dnstap plugin has a buffer of 10000 messages, above that number dnstap mes- sages will be dropped (this is logged). SYNTAX dnstap SOCKET [full] • SOCKET is the socket (path) supplied to the dnstap command line tool. • full to include the wire-format DNS message. EXAMPLES Log information about client requests and responses to /tmp/dnstap.sock. dnstap /tmp/dnstap.sock Log information including the wire-format DNS message about client re- quests and responses to /tmp/dnstap.sock. dnstap unix:///tmp/dnstap.sock full Log to a remote endpoint. dnstap tcp://127.0.0.1:6000 full COMMAND LINE TOOL Dnstap has a command line tool that can be used to inspect the logging. The tool can be found at GitHub: https://github.com/dnstap/golang- dnstap <https://github.com/dnstap/golang-dnstap>. It's written in Go. The following command listens on the given socket and decodes messages to stdout. $ dnstap -u /tmp/dnstap.sock The following command listens on the given socket and saves message payloads to a binary dnstap-format log file. $ dnstap -u /tmp/dnstap.sock -w /tmp/test.dnstap Listen for dnstap messages on port 6000. $ dnstap -l 127.0.0.1:6000 USING DNSTAP IN YOUR PLUGIN In your setup function, check to see if the dnstap plugin is loaded: c.OnStartup(func() error { if taph := dnsserver.GetConfig(c).Handler("dnstap"); taph != nil { if tapPlugin, ok := taph.(dnstap.Dnstap); ok { f.tapPlugin = tapPlugin } } return nil }) And then in your plugin: func (x RandomPlugin) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { if tapPlugin != nil { q := new(msg.Msg) msg.SetQueryTime(q, time.Now()) msg.SetQueryAddress(q, w.RemoteAddr()) if tapPlugin.IncludeRawMessage { buf, _ := r.Pack() // r has been seen packed/unpacked before, this should not fail q.QueryMessage = buf } msg.SetType(q, tap.Message_CLIENT_QUERY) tapPlugin.TapMessage(q) } // ... } SEE ALSO The website dnstap.info <https://dnstap.info> has info on the dnstap protocol. The forward plugin's dnstap.go uses dnstap to tap messages sent to an upstream. CoreDNS March 2021 COREDNS-DNSTAP(7)
NAME | DESCRIPTION | SYNTAX | EXAMPLES | COMMAND LINE TOOL | USING DNSTAP IN YOUR PLUGIN | SEE ALSO
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=coredns-dnstap&sektion=7&manpath=FreeBSD+Ports+14.3.quarterly>
