summaryrefslogtreecommitdiff
path: root/config/networking/services/dhcp.nix
blob: 1958f288f079f09e23624cbab769ead5c00bb9a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{ config, ... }:

let nets = config.personal.networking.networks;
in {
  services.kea.dhcp4 = {
    enable = true;
    settings = let subnets = with nets; [ wan iot eth0 ];
    in {
      interfaces-config = {
        interfaces = builtins.map (network: network.interface) subnets;
        service-sockets-retry-wait-time = 5000;
      };
      lease-database = {
        name = "/var/lib/kea/dhcp4.leases";
        persist = true;
        type = "memfile";
      };
      valid-lifetime = 600;
      max-valid-lifetime = 7200;
      option-data = [
        {
          name = "domain-name-servers";
          data = "${nets.lan.subnet}.1, 9.9.9.9";
        }
        {
          name = "subnet-mask";
          data = "255.255.255.0";
        }
      ];
      subnet4 = builtins.map (network: {
        subnet = "${network.subnet}.0/24";
        option-data = [
          {
            name = "broadcast-address";
            data = "${network.subnet}.255";
          }
          {
            name = "routers";
            data = network.machines.self.address;
          }
        ];
        inherit (network) interface;
        pools = [{ pool = "${network.subnet}.10 - ${network.subnet}.99"; }];
      }) subnets;
    };
  };

  systemd.services.kea-dhcp4-server.after =
    builtins.map (subnet: "${subnet.interface}-netdev.service")
    (with nets; [ wan iot ]);
}