User:Matthews/Drafts/Knot Resolver
Knot Resolver is a minimalistic implementation of a caching validating DNS resolver.
Installation
USE flags
USE flags for net-dns/knot-resolver A scaleable caching DNS resolver
+manager
|
Manager is a user-friendly interface and a component handling rolling restarts, config update logic and more. |
caps
|
Use Linux capabilities library to control privilege |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
dnstap
|
Build dnstap binary logging module |
jemalloc
|
Use dev-libs/jemalloc for memory management |
kresc
|
Build (experimental) command-line client |
nghttp2
|
DNS-over-HTTPS support |
prometheus
|
Metrics exported in Prometheus |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
verify-sig
|
Verify upstream signatures on distfiles |
xdp
|
Enable eXpress Data Path |
Emerge
root #
emerge --ask net-dns/knot-resolver
Configuration
The Knot Resolver configuration is handled via a Lua script, /etc/knot-resolver/kresd.conf. It defaults to listening on localhost and acting as a recursive resolver.
Moving cache to tmpfs
To improve performance and reduce disk I/O, the resolver cache can be moved to a tmpfs by mounting one at /var/cache/knot-resolver:
tmpfs /var/cache/knot-resolver tmpfs rw,size=2G,uid=knot-resolver,gid=knot-resolver,nosuid,nodev,noexec,mode=0700 0 0
The cache.fssize()
function can be used in the configuration, to make the cache module aware of the tmpfs size:
cache.size = cache.fssize() - 10*MB
Adding to runlevel
OpenRC
OpenRC users can add the kresd init script to the default runlevel with the following command:
root #
rc-update add kresd default
systemd
The kresd systemd unit is templated, allowing multiple instances to be created for high availability and to handle higher volumes of traffic. For maximum performance, it is recommended to create as many instances as there are CPUs[1].
To start a single instance:
root #
systemctl enable --now kresd@1.service
To start four instances:
root #
systemctl enable --now kresd@{1..4}.service
See also
- BIND — a popular free software DNS server
References
- ↑ Knot Resolver Documentation. Multiple Instances, retrieved on August 12th, 2023