From ce2317563647e4654da436631ec17981362b9df8 Mon Sep 17 00:00:00 2001 From: Ember 'n0emis' Keske Date: Fri, 11 Mar 2022 22:54:07 +0100 Subject: [PATCH] configure kea --- default.nix | 16 +++++++++++++--- modules/default.nix | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index 4388e13..9dbc68e 100644 --- a/default.nix +++ b/default.nix @@ -47,6 +47,10 @@ in }; addresses = mkOption { type = types.listOf types.str; + description = '' + Addresses to be configured on the bridge interface. + WARNING: the primary-ipv4-address to be send as a gateway address via DHCP has to be the first one. + ''; }; routingTable = mkOption { type = types.int; @@ -73,9 +77,15 @@ in default = ""; type = types.str; }; - searchDomains = mkOption { - default = []; - type = types.listOf types.str; + searchDomain = mkOption { + type = types.str; + }; + dhcpExtraConfig = mkOption { + description = '' + Additional config that will me merged with the kea-subnet4 config + ''; + default = {}; + type = (pkgs.formats.json {}).type; }; batmanAlgorithm = mkOption { default = "batman-iv"; diff --git a/modules/default.nix b/modules/default.nix index 77ed7db..567fa90 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -116,6 +116,31 @@ let RemainAfterExit = true; }; }; + + #### KEA / DHCPv4 #### + keaInterfaces = if (domCfg.dhcpRange == "") then [] else [ "${mkIfName "bridge"}" ]; + keaSubnet4 = mkIf (domCfg.dhcpRange != "") ([ ({ + subnet = domCfg.ipv4Prefix; + pools = [ + { + pool = domCfg.dhcpRange; + } + ]; + option-data = [ + { + name = "routers"; + data = head domCfg.addresses; + } + { + name = "domain-name-servers"; + data = head domCfg.addresses; + } + { + name = "domain-name"; + data = domCfg.searchDomain; + } + ]; + } // domCfg.dhcpExtraConfig) ]); }; domConfigs = map (key: getAttr key (mapAttrs mkDomain activeDomains)) (attrNames activeDomains); @@ -128,7 +153,19 @@ in systemd.network.netdevs = mergedConfigs.netdevs; systemd.network.networks = mergedConfigs.networks; systemd.network.links = mergedConfigs.links; + systemd.services = mergedConfigs.services; + ffnix.fastd.instances = mergedConfigs.fdInstances; + + services.kea.dhcp4 = mkIf (concatLists mergedConfigs.keaInterfaces.contents != []) { + enable = true; + settings = { + interfaces-config = { + interfaces = mergedConfigs.keaInterfaces; + }; + subnet4 = mergedConfigs.keaSubnet4; + }; + }; }; }