60 lines
1.6 KiB
Nix
60 lines
1.6 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
with lib;
|
||
|
let
|
||
|
hostname = config.instance.hostname;
|
||
|
domain-name = config.instance.local-domain;
|
||
|
domain = config.fudo.domains.${domain-name};
|
||
|
|
||
|
served-domain = domain.primary-nameserver != null;
|
||
|
|
||
|
is-primary-nameserver = hostname == domain.primary-nameserver;
|
||
|
|
||
|
primary-nameserver = domain.primary-nameserver;
|
||
|
primary-nameserver-ip = pkgs.lib.network.host-ipv4 config primary-nameserver;
|
||
|
|
||
|
in {
|
||
|
config = mkIf (served-domain) {
|
||
|
fudo.dns = {
|
||
|
enable = is-primary-nameserver;
|
||
|
|
||
|
identity = "${hostname}.${domain-name}.";
|
||
|
|
||
|
nameservers = {
|
||
|
ns1 = {
|
||
|
ipv4-address = primary-nameserver-ip;
|
||
|
description = "Primary ${domain-name} nameserver";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
listen-ips = optionals is-primary-nameserver
|
||
|
(pkgs.lib.network.host-ips config hostname);
|
||
|
|
||
|
domains = {
|
||
|
${domain-name} = {
|
||
|
dnssec = true;
|
||
|
default-host = primary-nameserver-ip;
|
||
|
gssapi-realm = domain.gssapi-realm;
|
||
|
mx = optional (domain.primary-mailserver != null)
|
||
|
domain.primary-mailserver;
|
||
|
dmarc-report-address = "dmarc-report@${domain-name}";
|
||
|
|
||
|
zone-definition = let
|
||
|
zone = config.fudo.zones.${domain-name};
|
||
|
|
||
|
make-dns-srv-record = hostname: {
|
||
|
port = 53;
|
||
|
host = hostname;
|
||
|
};
|
||
|
in zone // {
|
||
|
srv-records = {
|
||
|
tcp.domain = map make-dns-srv-record [ "ns1.${domain-name}" ];
|
||
|
udp.domain = map make-dns-srv-record [ "ns1.${domain-name}" ];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|