summaryrefslogtreecommitdiff
path: root/modules/nixos/nsd.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/nixos/nsd.nix
parent9ac64328603d44bd272175942d3ea3eaadcabd04 (diff)
2024-04-21
Diffstat (limited to 'modules/nixos/nsd.nix')
-rw-r--r--modules/nixos/nsd.nix229
1 files changed, 0 insertions, 229 deletions
diff --git a/modules/nixos/nsd.nix b/modules/nixos/nsd.nix
deleted file mode 100644
index f44a2a0..0000000
--- a/modules/nixos/nsd.nix
+++ /dev/null
@@ -1,229 +0,0 @@
-{
- config,
- inputs,
- lib,
- this,
- ...
-}:
-with lib;
-let
- cfg = config.nixfiles.modules.nsd;
-in
-{
- options.nixfiles.modules.nsd = {
- enable = mkEnableOption "NSD";
-
- fqdn = mkOption {
- description = "FQDN of this nameserver.";
- type = with types; str;
- default = "ns.${config.networking.domain}";
- };
- };
-
- config = mkIf cfg.enable {
- nixfiles.modules.nginx =
- let
- domain = my.domain.shire;
- in
- {
- enable = true;
- virtualHosts = mapAttrs' (
- _: v:
- nameValuePair "mta-sts.${v}" {
- locations."= /.well-known/mta-sts.txt" = {
- extraConfig = ''
- add_header default_type text/plain;
- '';
- return = "200 '${
- concatStringsSep "\\r\\n" [
- "version: STSv1"
- "mode: enforce"
- "max_age: 2419200"
- "mx: ${domain}"
- ]
- }'";
- };
- }
- ) my.domain;
- };
-
- services = {
- nsd = {
- enable = true;
- interfaces = with this; [
- ipv4.address
- ipv6.address
- ];
- ipTransparent = true;
- ratelimit.enable = true;
-
- zones =
- let
- dns = inputs.dns.lib;
- in
- with dns.combinators;
- let
- ips =
- hostname: with my.configurations.${hostname}; {
- A = [ (a ipv4.address) ];
- AAAA = [ (aaaa ipv6.address) ];
- };
-
- mkEmailEntries =
- {
- domain ? my.domain.shire,
- dkimKey ? null,
- }:
- {
- MX = [ (mx.mx 10 "${my.domain.shire}.") ];
- TXT = [ (spf.soft [ "a" ]) ];
- DMARC = [
- {
- p = "quarantine";
- sp = "quarantine";
- rua = [ "mailto:admin+rua@${domain}" ];
- ruf = [ "mailto:admin+ruf@${domain}" ];
- }
- ];
- DKIM = optional (dkimKey != null) {
- selector = "mail";
- p = dkimKey;
- };
- subdomains._mta-sts.TXT = [ "v=STSv1; id=20230506134541Z" ];
- };
-
- mkZone =
- {
- domain,
- sldIps ? (ips "manwe"),
- extra ? { },
- }:
- {
- ${domain}.data = dns.toString domain (mkMerge [
- {
- TTL = 60 * 60;
-
- SOA = {
- nameServer = "${cfg.fqdn}.";
- adminEmail = "admin+dns@${my.domain.shire}";
- serial = 2022091601; # Don't forget to bump the revision!
- };
-
- NS = with my.domain; [
- "ns1.${shire}"
- # "ns2.${shire}"
- ];
-
- CAA = letsEncrypt "admin+caa@${my.domain.shire}";
- }
- sldIps
- extra
- ]);
- };
-
- # https://ariadne.id/
- # https://docs.keyoxide.org/service-providers/dns/
- ariadneIdProof.TXT = [ "openpgp4fpr:${my.pgp.fingerprint}" ];
- in
- mkMerge [
- (mkZone rec {
- domain = my.domain.shire;
- extra = mkMerge [
- (mkEmailEntries {
- inherit domain;
- dkimKey = "@DKIM_KEY@";
- })
- {
- subdomains = rec {
- manwe = ips "manwe";
- "*.manwe" = manwe;
- varda = ips "varda";
- "*.varda" = varda;
- yavanna = ips "yavanna";
- "*.yavanna" = yavanna;
-
- mta-sts = manwe;
-
- ns1 = manwe;
- # ns2 = varda;
-
- alertmanager = manwe;
- bitwarden = manwe;
- git = manwe;
- grafana = manwe;
- loki = manwe;
- ntfy = manwe;
- plausible = manwe;
- prometheus = manwe;
- radicale = manwe;
- rss-bridge = manwe;
- vaultwarden = manwe;
-
- flood = yavanna;
- jackett = yavanna;
- lidarr = yavanna;
- };
- }
- ];
- })
- (mkZone rec {
- domain = my.domain.azahi;
- extra = mkMerge [
- (mkEmailEntries {
- inherit domain;
- dkimKey = "@DKIM_KEY@";
- })
- ariadneIdProof
- {
- subdomains = {
- mta-sts = ips "manwe";
-
- git = ips "manwe";
- };
- }
- ];
- })
- (mkZone rec {
- domain = my.domain.gondor;
- extra = mkMerge [
- (mkEmailEntries {
- inherit domain;
- dkimKey = "@DKIM_KEY@";
- })
- {
- subdomains = {
- mta-sts = ips "manwe";
-
- frodo = ips "manwe" // ariadneIdProof;
- };
- }
- ];
- })
- (mkZone rec {
- domain = my.domain.rohan;
- extra = mkMerge [
- (mkEmailEntries {
- inherit domain;
- dkimKey = "@DKIM_KEY@";
- })
- {
- subdomains = {
- mta-sts = ips "manwe";
-
- frodo = ips "manwe" // ariadneIdProof;
- };
- }
- ];
- })
- ];
- };
-
- fail2ban.jails.nsd.enabled = true;
- };
-
- networking.firewall = rec {
- allowedTCPPorts = [ 53 ];
- allowedUDPPorts = allowedTCPPorts;
- };
- };
-}