{ config, lib, ... }: let inherit (config.networking) domain; netlib = import ../../../lib/net.nix { inherit lib; }; subdomain = "dns.${domain}"; backend = config.services.adguardhome; addrs = backend.settings.dns.bind_hosts; byFamily = builtins.partition netlib.isv6 addrs; v6s = byFamily.right; v4s = byFamily.wrong; in { services.adguardhome = { enable = true; host = "[::1]"; # otherwise blocklists will be lost (prefer web UI configuration) mutableSettings = true; settings = { dhcp.enabled = false; dns = { hostsfile_enabled = false; trusted_proxies = [ "::1" ]; enable_dnssec = true; filtering = { protection_enabled = true; filtering_enabled = true; blocking_mode = "refused"; }; upstream_timeout = "2s"; cache_enabled = true; cache_optimistic = false; cache_size = 100 * 1024 * 1024; }; tls = { enabled = true; server_name = subdomain; port_https = 0; # disabled, not random allow_unencrypted_doh = true; # for reverse_proxy usage }; }; }; services.dnsmasq.settings.host-record = [ "${subdomain},${builtins.head v4s},${builtins.head v6s},${toString (24 * 60 * 60)}" ]; services.caddy.virtualHosts = { ${subdomain} = { serverAliases = addrs; extraConfig = '' tls { issuer internal { ca home } } reverse_proxy * ${backend.host}:${toString backend.port} ''; }; }; }