Files
dotfiles/modules/systems/networking/base/nixos.nix
2026-08-05 03:56:16 +09:00

99 lines
1.7 KiB
Nix

{ lib, ... }:
let
dohPort = 5300;
dohLocalUpstream = "127.0.0.1#${toString dohPort}";
internalDns = [
"10.50.80.53"
"10.50.80.54"
# "fd00:50:80::53"
# "fd00:50:80::54"
];
internalZones = [
"app.homelabs.run"
];
internalDnsServers = lib.concatMap (zone: map (dns: "/${zone}/${dns}") internalDns) internalZones;
in
{
services.resolved.enable = false;
networking.networkmanager.dns = "none";
services.dnscrypt-proxy = {
enable = true;
upstreamDefaults = true;
settings = {
listen_addresses = [
"127.0.0.1:${toString dohPort}"
];
server_names = [
"cloudflare"
"cloudflare-ipv6"
];
ipv4_servers = true;
ipv6_servers = true;
dnscrypt_servers = false;
doh_servers = true;
odoh_servers = false;
cache = false;
block_ipv6 = false;
ignore_system_dns = true;
bootstrap_resolvers = [
"9.9.9.11:53"
"149.112.112.11:53"
"[2620:fe::11]:53"
"[2620:fe::fe:11]:53"
];
netprobe_address = "1.1.1.1:443";
timeout = 5000;
keepalive = 30;
};
};
services.dnsmasq = {
enable = true;
resolveLocalQueries = true;
settings = {
no-resolv = true;
local-service = "host";
server = [ dohLocalUpstream ] ++ internalDnsServers;
all-servers = true;
cache-size = 10000;
dns-loop-detect = true;
domain-needed = true;
bogus-priv = true;
};
};
systemd.services.dnsmasq = {
wants = [ "dnscrypt-proxy.service" ];
after = [ "dnscrypt-proxy.service" ];
};
security.pki.certificateFiles = [
./root_ca.crt
];
}