2024-05-08 16:50:40 +02:00
|
|
|
{ config, ... }:
|
2024-01-22 19:57:40 +01:00
|
|
|
{
|
2024-02-28 22:49:50 +01:00
|
|
|
services = {
|
|
|
|
unbound = {
|
|
|
|
enable = true;
|
|
|
|
localControlSocketPath = "/run/unbound/unbound.ctl";
|
|
|
|
settings = {
|
|
|
|
server = {
|
|
|
|
# Setting logfile to an empty string outputs to stderr
|
|
|
|
log-queries = false;
|
2024-05-08 16:50:40 +02:00
|
|
|
log-replies = true;
|
|
|
|
log-tag-queryreply = true;
|
|
|
|
log-local-actions = true;
|
|
|
|
logfile = "/var/log/unbound/unbound.log";
|
|
|
|
verbosity = 0;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
port = 5335;
|
|
|
|
do-ip4 = true;
|
|
|
|
do-ip6 = true;
|
|
|
|
do-udp = true;
|
|
|
|
do-tcp = true;
|
|
|
|
prefer-ip6 = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
hide-identity = true;
|
|
|
|
hide-version = true;
|
2024-03-06 08:16:29 +01:00
|
|
|
identity = "Server";
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Trust glue only if it is within the server's authority
|
|
|
|
harden-glue = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
|
|
|
|
harden-dnssec-stripped = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
harden-referral-path = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
|
|
|
|
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
|
|
|
|
use-caps-for-id = false;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Reduce EDNS reassembly buffer size.
|
|
|
|
# Suggested by the unbound man page to reduce fragmentation reassembly problems
|
|
|
|
edns-buffer-size = 1472;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Perform prefetching of close to expired message cache entries
|
|
|
|
# This only applies to domains that have been frequently queried
|
|
|
|
prefetch = true;
|
|
|
|
prefetch-key = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# This attempts to reduce latency by serving the outdated record before
|
|
|
|
# updating it instead of the other way around. Alternative is to increase
|
|
|
|
# cache-min-ttl to e.g. 3600.
|
2024-03-06 08:16:29 +01:00
|
|
|
cache-min-ttl = 300;
|
|
|
|
cache-max-ttl = 86400;
|
2024-02-28 22:49:50 +01:00
|
|
|
serve-expired = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-03-06 08:16:29 +01:00
|
|
|
# Set cache size. rrset-cache-size should be twice what msg-cache-size is
|
2024-02-28 22:49:50 +01:00
|
|
|
rrset-cache-size = "256m";
|
|
|
|
msg-cache-size = "128m";
|
|
|
|
msg-cache-slabs = 4;
|
2024-03-06 08:16:29 +01:00
|
|
|
|
|
|
|
# One thread should be sufficient, can be increased on beefy machines. In reality for most users running on
|
|
|
|
# small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1.
|
2024-02-28 22:49:50 +01:00
|
|
|
num-threads = 2;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-03-06 08:16:29 +01:00
|
|
|
# Leave sections that are not requested out of the response message
|
|
|
|
# Reduces response message significantly and may prevent TCP fallback
|
|
|
|
# for some responses
|
2024-03-16 22:53:31 +01:00
|
|
|
minimal-responses = true;
|
2024-03-06 08:16:29 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
|
|
|
|
so-rcvbuf = "8m";
|
2024-03-06 08:16:29 +01:00
|
|
|
so-sndbuf = "8m";
|
|
|
|
|
|
|
|
# Improve UDP performance with multithreading
|
|
|
|
so-reuseport = true;
|
2024-01-22 19:57:40 +01:00
|
|
|
|
2024-02-28 22:49:50 +01:00
|
|
|
# Ensure privacy of local IP ranges
|
|
|
|
private-address = [
|
|
|
|
"192.168.0.0/16"
|
|
|
|
"169.254.0.0/16"
|
|
|
|
"172.16.0.0/12"
|
|
|
|
"10.0.0.0/8"
|
|
|
|
"fd00::/8"
|
|
|
|
"fe80::/10"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
prometheus.exporters = {
|
|
|
|
node = {
|
|
|
|
enable = true;
|
|
|
|
enabledCollectors = [ "systemd" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
unbound = {
|
|
|
|
enable = true;
|
|
|
|
unbound.host = "unix:///run/unbound/unbound.ctl";
|
2024-01-22 19:57:40 +01:00
|
|
|
};
|
|
|
|
};
|
2024-05-08 16:50:40 +02:00
|
|
|
|
|
|
|
logrotate = {
|
|
|
|
settings = {
|
|
|
|
unbound = {
|
|
|
|
files = [ "/var/log/unbound/unbound.log" ];
|
|
|
|
frequency = "daily";
|
|
|
|
rotate = 7;
|
|
|
|
compress = true;
|
|
|
|
delaycompress = true;
|
|
|
|
notifempty = true;
|
|
|
|
postrotate = ''
|
|
|
|
${config.services.unbound.package}/bin/unbound-control log_reopen
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2024-01-22 19:57:40 +01:00
|
|
|
};
|
|
|
|
}
|