main
 1{ dns, globals, ... }:
 2with dns.lib.combinators;
 3let
 4  # Machines that have VPN entries
 5  machineList = [
 6    "okinawa"
 7    "aomi"
 8    "shikoku"
 9    "sakhalin"
10    "rhea"
11    "aion"
12    "athena"
13    "demeter"
14    "nagoya"
15    "kyushu"
16    "lutece"
17  ];
18
19  mkVpnMachineRecords = builtins.listToAttrs (
20    map (machineName: {
21      name = machineName;
22      value =
23        let
24          vpnIP = globals.machines.${machineName}.net.vpn.ips;
25          ip = if builtins.isList vpnIP then builtins.head vpnIP else vpnIP;
26        in
27        {
28          A = [ ip ];
29          subdomains."*".A = [ ip ];
30        };
31    }) machineList
32  );
33in
34{
35  SOA = {
36    nameServer = "ns1.vpn.";
37    adminEmail = "admin.vpn";
38    serial = 3;
39    refresh = 604800;
40    retry = 86400;
41    expire = 2419200;
42    minimum = 604800;
43  };
44
45  NS = [
46    "ns1.vpn."
47    "ns2.vpn."
48  ];
49
50  subdomains = {
51    # Name servers
52    ns1.A = [ (builtins.head globals.machines.shikoku.net.vpn.ips) ];
53    ns2.A = [ (builtins.head globals.machines.sakhalin.net.vpn.ips) ];
54
55    # hass - hardcoded as it's not in the machine list
56    hass.A = [ "10.100.0.81" ];
57  }
58  // mkVpnMachineRecords;
59}