network/nix/nixos-module/container/dhcp-server.nix

39 lines
1.1 KiB
Nix

{ hostName, config, lib, ... }:
let
dhcpNets =
lib.filterAttrs (_: { dhcp, ... }:
dhcp != null &&
dhcp.server == hostName
) config.site.net;
enabled = builtins.length (builtins.attrNames dhcpNets) > 0;
in
{
services.dhcpd4 = lib.optionalAttrs enabled {
enable = true;
interfaces = builtins.attrNames dhcpNets;
extraConfig = ''
option domain-name-servers 172.20.73.8, 9.9.9.9;
${builtins.concatStringsSep "\n" (
builtins.attrValues (
builtins.mapAttrs (net: { dhcp, subnet4Net, subnet4Len, ...}:
''
subnet ${subnet4Net} netmask ${lib.netmasks.${toString subnet4Len}} {
range ${dhcp.start} ${dhcp.end};
default-lease-time ${toString dhcp.time};
max-lease-time ${toString dhcp.max-time};
option routers ${config.site.net.${net}.hosts4.${builtins.replaceStrings [".${net}"] [""] dhcp.router}};
option domain-name "${dhcp.domainName}";
}
''
) dhcpNets
)
)}
'';
# TODO: fixed-hosts
};
}