The configuration of DNS-collector is done through one yaml file named config.yml
. When the DNS-collector starts, it will look for the config.yml from the current working directory.
A typically configuration would have one or more collector to receive DNS traffic, and severals loggers to process the
incoming traffics. You can take a look to the list of config examples
.
Logs can be enable to have more informations like debug, errors messages generated by the application
Options:
verbose
: (boolean) debug informations, if turned on, log some applications messagesfilename
: (string) filename is the file to write logs to.max-size
: (integer) maximum size in megabytes of the log file it gets rotatedmax-backups
: (integer) maximum number of old log files to retainlog-malformed
: (boolean) log malformed packet
global:
trace:
verbose: true
log-malformed: false
filename: ""
max-size: 10
max-backups: 10
Example:
INFO: 2022/06/25 20:54:18.173239 main - version 0.0.0
INFO: 2022/06/25 20:54:18.173271 main - config loaded...
INFO: 2022/06/25 20:54:18.173277 main - starting dns-collector...
....
INFO: 2022/06/25 20:54:18.174256 [dtap] dnstap collector - running in background...
INFO: 2022/06/25 20:54:18.174286 [dtap] dnstap collector - is listening on [::]:6000
Set the server identity name. The hostname will be used if empty
global:
server-identity: "dns-collector"
The text format can be customized with the following directives.
Default directives:
timestamp-rfc3339ns
: timestamp rfc3339 format, with nano supporttimestamp-unixms
: unix timestamp with ms supporttimestamp-unixus
: unix timestamp with us supporttimestamp-unixns
: unix timestamp with nano supportlocaltime
: local timeidentity
: dnstap identityversion
: dnstap versionoperation
: dnstap operationopcode
: dns opcode (integer)rcode
: dns return codequeryip
: dns query ipqueryport
: dns query portresponseip
: dns response ipresponseport
: dns response portid
: dns idfamily
: ip protocol version INET or INET6protocol
: protocol UDP, TCPlength
: the length of the query or replyqtype
: dns qtypeqname
: dns qnamelatency
: computed latency between queries and repliesanswercount
: the number of answerttl
: answer ttl, only the first oneanswer
: rdata answer, only the first one, prefer to use the JSON format if you wamt all answersmalformed
: malformed dns packet, integer value 1/0qr
: query or reply flag, string value Q/Rtc
: flag truncated responseaa
: flag authoritative answerra
: flag recursion availablead
: flag authenticated datadf
: flag when ip defragmented occuredtr
: flag when tcp reassembled occurededns-csubnet
: display client subnet info
global:
text-format: "timestamp-rfc3339ns identity qr operation rcode queryip queryport family protocol length qname qtype latency ttl"
text-format-delimiter: " "
text-format-boundary: "\""
If you require a format like CSV, the delimiter can be configured with the text-format-delimiter
option.
The default separator is [space].
Output example:
2023-04-08T18:27:29.268465Z unbound CLIENT_QUERY NOERROR 127.0.0.1 39028 IPv4 UDP 50b google.fr A 0.000000
2023-04-08T18:27:29.268575Z unbound FORWARDER_QUERY NOERROR 0.0.0.0 20817 IPv4 UDP 38b google.fr A 0.000000
2023-04-08T18:27:29.278929Z unbound FORWARDER_RESPONSE NOERROR 0.0.0.0 20817 IPv4 UDP 54b google.fr A 0.000000
2023-04-08T18:27:29.279039Z unbound CLIENT_RESPONSE NOERROR 127.0.0.1 39028 IPv4 UDP 54b google.fr A 0.000000
The dns collector can be configured with multiple loggers and collectors at the same time.
You must defined the list of
collectors
: list of running inputsloggers
: list of running outputsroutes
: routing definition
If you want apply some modifications in traffic, you can do that with transformers. Transformers can be applied on collectors or loggers.
List of supported collectors
multiplexer:
collectors:
- name: <collector_name>
.....
List of supported loggers
multiplexer:
loggers:
- name: <logger_name>
...
Then defines the routing to use between all of them according to the name. You can connect one collector to multiple loggers and you can also connect multiple collectors to the same logger.
multiplexer:
routes: ...
- from: [ list of collectors by name ]
to: [ list of loggers by name ]