feat: can now handle two (or more) nameservers

This commit is contained in:
silver 2023-01-18 02:32:01 +00:00
parent 8db9529449
commit 654d45a842
4 changed files with 150 additions and 28 deletions

View file

@ -11,6 +11,33 @@ in {
type = lib.types.bool; 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 = { records = {
external = lib.mkOption { external = lib.mkOption {
default = [ ]; default = [ ];
@ -69,7 +96,7 @@ in {
'' ''
$TTL 60 ; 1 minute $TTL 60 ; 1 minute
; hostmaster@skynet.ie is an email address that recieves stuff related to dns ; hostmaster@skynet.ie is an email address that recieves stuff related to dns
@ IN SOA ns1.skynet.ie. hostmaster.skynet.ie. ( @ IN SOA ${cfg.own.nameserver}.skynet.ie. hostmaster.skynet.ie. (
2023011701 ; Serial (YYYYMMDDCC) 2023011701 ; Serial (YYYYMMDDCC)
600 ; Refresh (10 minutes) 600 ; Refresh (10 minutes)
300 ; Retry (5 minutes) 300 ; Retry (5 minutes)

View file

@ -31,9 +31,6 @@
]; ];
}; };
# firewall machiene
#agentjones = import ./machines/agentjones.nix;
/* TODO: /* TODO:
vm host vm host
jarvis.skynet.ie jarvis.skynet.ie
@ -52,10 +49,18 @@
22, 53 (UDP) 22, 53 (UDP)
53 (UDP) 53 (UDP)
vigil.skynet.ie
ns2.skynet.ie
193.1.99.121
172.20.20.4
Ports
22, 53 (UDP)
53 (UDP)
Wireguard Wireguard
ash.skynet.ie Ash is a robot spy from Alien https://en.wikipedia.org/wiki/Ash_(Alien) we need someone to get us into teh network ash.skynet.ie Ash is a robot spy from Alien https://en.wikipedia.org/wiki/Ash_(Alien) we need someone to get us into teh network
193.1.99.75 193.1.99.75
172.20.20.4 172.20.205.5
Ports Ports
22, 51820 (UDP) 22, 51820 (UDP)
51820 (UDP) 51820 (UDP)
@ -63,7 +68,7 @@
Icecase Icecase
stream.skynet.ie stream.skynet.ie
193.1.99.111 193.1.99.111
172.20.20.5 172.20.20.6
Ports Ports
22, 80, 443, 8000 22, 80, 443, 8000
80, 443, 8000 80, 443, 8000
@ -71,7 +76,7 @@
Minecraft Minecraft
minecraft.games.skynet.ie minecraft.games.skynet.ie
193.1.99.112 193.1.99.112
172.20.20.6 172.20.20.7
Ports Ports
22, 80, 443, 25564, 25565, 25575 22, 80, 443, 25564, 25565, 25575
80, 443, 25564, 25565, 25575 80, 443, 25564, 25565, 25575
@ -84,6 +89,9 @@
# ns1 # ns1
vendetta = import ./machines/vendetta.nix; vendetta = import ./machines/vendetta.nix;
# ns1
vigil = import ./machines/vigil.nix;
}; };
}; };

View file

@ -12,26 +12,13 @@
{ pkgs, lib, nodes, ... }: { pkgs, lib, nodes, ... }:
let let
# ip_pub = "193.1.99.120"; ip_pub = "193.1.99.120";
ip_pub = "192.168.1.157";
ip_priv = "172.20.20.3"; ip_priv = "172.20.20.3";
# hostname = "vendetta.skynet.ie"; # hostname = "vendetta.skynet.ie";
hostname = "192.168.1.157"; hostname = ip_pub;
# this server will have to have dns records # sets which nameserver it is
own = { ns = "ns1";
external = [
"vendetta A ${ip_pub}"
"ns1 A ${ip_pub}"
# needs this, temporally
"ns2 A ${ip_pub}"
"mail A ${ip_pub}"
];
cname = [
#"misc CNAME vendetta"
];
};
in { in {
imports = [ imports = [
# applications for this particular server # applications for this particular server
@ -54,14 +41,29 @@ in {
skynet_dns = { skynet_dns = {
enable = true; enable = true;
# this server will have to have dns records
own = {
nameserver = ns;
external = [
"vendetta A ${ip_pub}"
"${ns} A ${ip_pub}"
# needs this, temporally
"mail A ${ip_pub}"
];
cname = [
#"misc CNAME vendetta"
];
};
records = { records = {
# using the same logic as the firewall, comments there # using the same logic as the firewall, comments there
external = builtins.concatLists ( external = builtins.concatLists (
lib.attrsets.mapAttrsToList (key: value: lib.attrsets.mapAttrsToList (key: value:
if builtins.hasAttr "skynet_dns" value.config if builtins.hasAttr "skynet_dns" value.config
then ( then (
if value.config.deployment.targetHost == hostname if value.config.skynet_dns.enable
then own.external then value.config.skynet_dns.own.external
else value.config.skynet_dns.records.external else value.config.skynet_dns.records.external
) )
else [] else []
@ -72,8 +74,8 @@ in {
lib.attrsets.mapAttrsToList (key: value: lib.attrsets.mapAttrsToList (key: value:
if builtins.hasAttr "skynet_dns" value.config if builtins.hasAttr "skynet_dns" value.config
then ( then (
if value.config.deployment.targetHost == hostname if value.config.skynet_dns.enable
then own.cname then value.config.skynet_dns.own.cname
else value.config.skynet_dns.records.cname else value.config.skynet_dns.records.cname
) )
else [] else []

85
machines/vigil.nix Normal file
View file

@ -0,0 +1,85 @@
/*
Name: https://masseffect.fandom.com/wiki/Vigil
Why: Counterpart to Vendetta
Type: VM
Hardware: -
From: 2023
Role: DNS Server
Notes:
*/
{ pkgs, lib, nodes, ... }:
let
# ip_pub = "193.1.99.121";
ip_pub = "192.168.1.157";
ip_priv = "172.20.20.4";
# hostname = "vigil.skynet.ie";
hostname = ip_pub;
# sets which nameserver it is
ns = "ns2";
in {
imports = [
# applications for this particular server
../applications/dns.nix
];
deployment = {
targetHost = hostname;
targetPort = 22;
targetUser = "root";
};
networking = {
firewall = {
allowedTCPPorts = [22 53];
allowedUDPPorts = [53];
};
};
skynet_dns = {
enable = true;
# this server will have to have dns records
own = {
nameserver = ns;
external = [
"vigil A ${ip_pub}"
"${ns} A ${ip_pub}"
];
cname = [
#"misc CNAME vendetta"
];
};
records = {
# using the same logic as the firewall, comments there
external = builtins.concatLists (
lib.attrsets.mapAttrsToList (key: value:
if builtins.hasAttr "skynet_dns" value.config
then (
if value.config.skynet_dns.enable
then value.config.skynet_dns.own.external
else value.config.skynet_dns.records.external
)
else []
) nodes
);
cname = builtins.concatLists (
lib.attrsets.mapAttrsToList (key: value:
if builtins.hasAttr "skynet_dns" value.config
then (
if value.config.skynet_dns.enable
then value.config.skynet_dns.own.cname
else value.config.skynet_dns.records.cname
)
else []
) nodes
);
};
};
}