VEGAS: add DNS service
This commit is contained in:
parent
1384345400
commit
d0721d38b7
3 changed files with 120 additions and 0 deletions
55
hosts/VEGAS/services/dns/default.nix
Normal file
55
hosts/VEGAS/services/dns/default.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
{ config, hosts, ... }:
|
||||||
|
# TODO: is this secure?
|
||||||
|
let
|
||||||
|
inherit (hosts.${config.networking.hostName}) interfaces;
|
||||||
|
in {
|
||||||
|
imports = [ ./zones.nix ];
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPorts = [ 53 ];
|
||||||
|
allowedUDPPorts = [ 53 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.coredns = {
|
||||||
|
enable = true;
|
||||||
|
config = ''
|
||||||
|
. {
|
||||||
|
bind ${interfaces.vstub.addr}
|
||||||
|
hosts /ipfs/QmRgDmvcHsB61pYEPDrwsvHwkoC6hCR9dTEnvkDHrypcFJ {
|
||||||
|
fallthrough
|
||||||
|
}
|
||||||
|
chaos "Private Void DNS" info@privatevoid.net
|
||||||
|
forward . 127.0.0.1
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.bind = {
|
||||||
|
enable = true;
|
||||||
|
# TODO: un-hardcode all ip addresses
|
||||||
|
listenOn = [ interfaces.primary.addr "127.0.0.1" ];
|
||||||
|
ipv4Only = true;
|
||||||
|
|
||||||
|
cacheNetworks = [ "10.0.0.0/8" ];
|
||||||
|
extraConfig = ''
|
||||||
|
acl "trusted" {
|
||||||
|
127.0.0.0/8;
|
||||||
|
::1/128;
|
||||||
|
${interfaces.primary.addr}/32;
|
||||||
|
${interfaces.vstub.addr}/32;
|
||||||
|
10.100.0.0/16;
|
||||||
|
10.10.0.0/16;
|
||||||
|
};
|
||||||
|
acl "publicservers" {
|
||||||
|
${interfaces.primary.addr}/32;
|
||||||
|
116.202.226.86/32;
|
||||||
|
};
|
||||||
|
'';
|
||||||
|
extraOptions = ''
|
||||||
|
recursion yes;
|
||||||
|
allow-recursion { trusted; };
|
||||||
|
dnssec-enable yes;
|
||||||
|
dnssec-validation no;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
64
hosts/VEGAS/services/dns/zones.nix
Normal file
64
hosts/VEGAS/services/dns/zones.nix
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{ lib, tools, ... }:
|
||||||
|
|
||||||
|
# upstream's zone generator is pretty bad, so...
|
||||||
|
|
||||||
|
# TODO: make this prettier
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (tools.meta) domain;
|
||||||
|
inherit (tools) nginx identity;
|
||||||
|
|
||||||
|
externalSlave = { name, masters ? [ identity.dns.master.addr ], notify ? "no", alsoNotify ? [ "none" ] }: let
|
||||||
|
zoneName = "${name}";
|
||||||
|
file = "/var/named/slaves/ext_${zoneName}.db";
|
||||||
|
mastersFormatted = builtins.concatStringsSep "; " masters;
|
||||||
|
notifiersFormatted = builtins.concatStringsSep "; " alsoNotify;
|
||||||
|
in ''
|
||||||
|
zone "${zoneName}." IN {
|
||||||
|
type slave;
|
||||||
|
masters { ${mastersFormatted}; };
|
||||||
|
file "${file}";
|
||||||
|
allow-transfer { trusted; publicservers; };
|
||||||
|
allow-query { any; };
|
||||||
|
notify ${notify};
|
||||||
|
also-notify { ${notifiersFormatted}; };
|
||||||
|
};
|
||||||
|
'';
|
||||||
|
internalSlave' = domain: name: let
|
||||||
|
zoneName = "${name}${domain}";
|
||||||
|
file = "/var/named/slaves/int_${zoneName}.db";
|
||||||
|
in ''
|
||||||
|
zone "${zoneName}." IN {
|
||||||
|
type slave;
|
||||||
|
masters { ${identity.dns.master.addr}; };
|
||||||
|
file "${file}";
|
||||||
|
allow-transfer { trusted; };
|
||||||
|
allow-query { trusted; };
|
||||||
|
notify no;
|
||||||
|
};
|
||||||
|
'';
|
||||||
|
internalSlave = internalSlave' ".${domain}";
|
||||||
|
revSlave = internalSlave' ".in-addr.arpa";
|
||||||
|
toAttr = value: { inherit (value) name; inherit value; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.bind.extraConfig = builtins.concatStringsSep "\n" ([
|
||||||
|
(externalSlave { name = domain; notify = "explicit"; alsoNotify = [ "116.202.226.86" ]; })
|
||||||
|
(externalSlave { name = "animus.com"; masters = [ "116.202.226.86" ]; })
|
||||||
|
] ++ map internalSlave [
|
||||||
|
"virtual-machines"
|
||||||
|
"core"
|
||||||
|
"services"
|
||||||
|
"ext"
|
||||||
|
"int"
|
||||||
|
"vpn"
|
||||||
|
"find"
|
||||||
|
] ++ map revSlave [
|
||||||
|
"0.10.10"
|
||||||
|
"1.10.10"
|
||||||
|
"2.10.10"
|
||||||
|
"100.10"
|
||||||
|
] ++ map (internalSlave' "") [
|
||||||
|
"void"
|
||||||
|
]);
|
||||||
|
}
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
# Services
|
# Services
|
||||||
./services/backbone-routing
|
./services/backbone-routing
|
||||||
|
./services/dns
|
||||||
]
|
]
|
||||||
# TODO: fix users
|
# TODO: fix users
|
||||||
# ++ (import ../../users "server").groups.admin
|
# ++ (import ../../users "server").groups.admin
|
||||||
|
|
Loading…
Reference in a new issue