2023-01-25 11:48:44 +00:00
|
|
|
{ lib, pkgs, config, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.skynet_dns;
|
|
|
|
in {
|
|
|
|
options = {
|
|
|
|
skynet_dns = {
|
|
|
|
enable = lib.mkEnableOption {
|
|
|
|
default = false;
|
|
|
|
example = true;
|
|
|
|
description = "Skynet DNS";
|
|
|
|
type = lib.types.bool;
|
|
|
|
};
|
|
|
|
|
|
|
|
own = {
|
|
|
|
nameserver = lib.mkOption {
|
|
|
|
default = "ns1";
|
|
|
|
type = lib.types.str;
|
|
|
|
description = ''
|
|
|
|
the hostname of this nameserver, eg ns1, ns2
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
external = lib.mkOption {
|
|
|
|
default = [ ];
|
|
|
|
type = lib.types.listOf lib.types.str;
|
|
|
|
description = ''
|
|
|
|
External records like: agentjones A 193.1.99.72
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
cname = lib.mkOption {
|
|
|
|
default = [ ];
|
|
|
|
type = lib.types.listOf lib.types.str;
|
|
|
|
description = ''
|
|
|
|
External records like: ns1 CNAME ns1
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
records = {
|
|
|
|
external = lib.mkOption {
|
|
|
|
default = [ ];
|
|
|
|
type = lib.types.listOf lib.types.str;
|
|
|
|
description = ''
|
|
|
|
External records like: agentjones A 193.1.99.72
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
cname = lib.mkOption {
|
|
|
|
default = [ ];
|
|
|
|
type = lib.types.listOf lib.types.str;
|
|
|
|
description = ''
|
|
|
|
External records like: ns1 CNAME ns1
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
services.bind = {
|
|
|
|
enable = true;
|
|
|
|
|
2023-04-20 07:56:52 +00:00
|
|
|
ipv4Only = true;
|
|
|
|
|
2023-04-20 08:34:06 +00:00
|
|
|
#forwarders = [
|
2023-01-25 11:48:44 +00:00
|
|
|
# these were in old config file
|
|
|
|
#"193.1.100.130"
|
|
|
|
#"193.1.100.131"
|
2023-04-20 08:34:06 +00:00
|
|
|
#];
|
2023-01-25 11:48:44 +00:00
|
|
|
|
|
|
|
zones = {
|
|
|
|
/*
|
|
|
|
put any other zones above skynet and link to their files like so:
|
|
|
|
|
|
|
|
example.ie = {
|
|
|
|
extraConfig = "";
|
|
|
|
file = ./dns/example;
|
|
|
|
master = true;
|
|
|
|
masters = [];
|
|
|
|
slaves = [ ];
|
|
|
|
};
|
|
|
|
|
|
|
|
Skynet is handled a bit more dynamically since it is the key one we should focus on
|
|
|
|
*/
|
|
|
|
|
|
|
|
"skynet.ie" = {
|
|
|
|
extraConfig = "";
|
|
|
|
# really wish teh nixos config didnt use master/slave
|
|
|
|
master = true;
|
|
|
|
slaves = [ ];
|
|
|
|
# need to write this to a file
|
|
|
|
file = pkgs.writeText "dns_zone_skynet"
|
|
|
|
# no leading whitespace for first line
|
|
|
|
''
|
|
|
|
$TTL 60 ; 1 minute
|
|
|
|
; hostmaster@skynet.ie is an email address that recieves stuff related to dns
|
|
|
|
@ IN SOA ${cfg.own.nameserver}.skynet.ie. hostmaster.skynet.ie. (
|
|
|
|
2023011701 ; Serial (YYYYMMDDCC)
|
|
|
|
600 ; Refresh (10 minutes)
|
|
|
|
300 ; Retry (5 minutes)
|
|
|
|
2419200 ; Expire (4 weeks)
|
|
|
|
3600 ; Minimum (1 hour)
|
|
|
|
)
|
|
|
|
NS ns1.skynet.ie.
|
|
|
|
NS ns2.skynet.ie.
|
|
|
|
; @ stands for teh root domain so teh A record below is where skynet.ie points to
|
|
|
|
A 193.1.99.76
|
|
|
|
MX 5 mail.skynet.ie.
|
|
|
|
|
|
|
|
; can have multiple mailserves
|
|
|
|
;MX 20 mail2.skynet.ie.
|
|
|
|
|
|
|
|
|
|
|
|
; ------------------------------------------
|
|
|
|
; Server Names
|
|
|
|
; ------------------------------------------
|
|
|
|
|
|
|
|
; External addresses
|
|
|
|
; ------------------------------------------
|
|
|
|
${lib.strings.concatMapStrings (x: x + "\n") cfg.records.external}
|
|
|
|
|
|
|
|
|
|
|
|
; this is fixed for now
|
|
|
|
wintermute A 193.1.101.148
|
|
|
|
|
|
|
|
|
|
|
|
; internal addresses
|
|
|
|
; ------------------------------------------
|
|
|
|
; May come back to this idea in teh future
|
|
|
|
; agentjones.int A 172.20.20.1
|
|
|
|
|
|
|
|
|
|
|
|
; cname's
|
|
|
|
; ------------------------------------------
|
|
|
|
${lib.strings.concatMapStrings (x: x + "\n") cfg.records.cname}
|
|
|
|
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-17 22:40:04 +00:00
|
|
|
}
|