feat: Allow network devices to define DNS resolvable names

This commit is contained in:
Giulio De Pasquale (aider) 2025-06-05 12:42:14 +01:00
parent 9e8e7169d3
commit 44af2887a5
2 changed files with 40 additions and 1 deletions

View File

@ -117,8 +117,41 @@ in
allDomains = config.pepe.core.vhost.hosts // cfg.extraDomains;
in
let
# Function to generate DNS records for individual devices based on dnsResolvableName
generateDeviceHostRecords =
let
generateRecordsForInterface = ifaceName: ifaceConfig:
lib.concatStringsSep "\n" (lib.mapAttrsToList (deviceName: deviceConfig:
if deviceConfig.dnsResolvableName != null then
let
serverIP = deviceConfig.address;
interfaceNet = ifaceConfig.net;
domain = deviceConfig.dnsResolvableName;
in
''
${domain} {
view ${ifaceName} {
expr incidr(client_ip(), '${interfaceNet}')
}
template IN A ${domain} {
answer "${domain}. 60 IN A ${serverIP}"
}
cache
log
}
''
else ""
) ifaceConfig.devices);
in
lib.concatStringsSep "\n" (lib.mapAttrsToList generateRecordsForInterface config.pepe.core.network.interfaces);
in
''
${generateCoreDNSConfig allDomains}
${generateDeviceHostRecords}
${allDeviceViews}

View File

@ -41,7 +41,13 @@ in
type = types.bool;
default = false;
description = "Whether this device serves as a DNS endpoint for this interface.";
};
};
dnsResolvableName = mkOption {
type = types.nullOr types.str;
default = null;
description = "The fully qualified domain name that should resolve to this device's IP address. e.g., my-device.lan.example.com";
};
};
});
default = { };