Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help