feat: can now handle two (or more) nameservers
This commit is contained in:
parent
8db9529449
commit
654d45a842
4 changed files with 150 additions and 28 deletions
|
@ -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)
|
||||||
|
|
20
flake.nix
20
flake.nix
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
85
machines/vigil.nix
Normal 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
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue