TechnitiumSoftware/DnsServer · error · InvalidOperationException
Local end point group map contains an invalid end point: {lo
Error message
Local end point group map contains an invalid end point: {localEP} What it means
Thrown while parsing the AdvancedBlockingApp 'localEndPointGroupMap' JSON object in the app config. Each map key is passed to EndPointExtensions.TryParse (expects an IP:port endpoint like '192.168.1.5:53'); when parsing fails the key is rejected as invalid. The error is an InvalidOperationException raised during app initialization, so the app fails to load the config.
Source
Thrown at Apps/AdvancedBlockingApp/App.cs:370
throw new InvalidOperationException();
Directory.CreateDirectory(Path.Combine(_dnsServer.ApplicationFolder, "blocklists"));
using JsonDocument jsonDocument = JsonDocument.Parse(config, _jsonParseOptions);
JsonElement jsonConfig = jsonDocument.RootElement;
_enableBlocking = jsonConfig.GetPropertyValue("enableBlocking", true);
_blockingAnswerTtl = jsonConfig.GetPropertyValue("blockingAnswerTtl", 30u);
_blockListUrlUpdateIntervalHours = jsonConfig.GetPropertyValue("blockListUrlUpdateIntervalHours", 24);
_blockListUrlUpdateIntervalMinutes = jsonConfig.GetPropertyValue("blockListUrlUpdateIntervalMinutes", 0);
_soaRecord = new DnsSOARecordData(_dnsServer.ServerDomain, _dnsServer.ResponsiblePerson.Address, 1, 14400, 3600, 604800, _blockingAnswerTtl);
_nsRecord = new DnsNSRecordData(_dnsServer.ServerDomain);
if (jsonConfig.TryReadObjectAsMap("localEndPointGroupMap",
delegate (string localEP, JsonElement jsonGroup)
{
if (!EndPointExtensions.TryParse(localEP, out EndPoint ep))
throw new InvalidOperationException("Local end point group map contains an invalid end point: " + localEP);
return new Tuple<EndPoint, string>(ep, jsonGroup.GetString() ?? "");
},
out Dictionary<EndPoint, string>? localEndPointGroupMap))
{
_localEndPointGroupMap = localEndPointGroupMap;
}
_networkGroupMap = jsonConfig.ReadObjectAsMap("networkGroupMap", delegate (string network, JsonElement jsonGroup)
{
if (!NetworkAddress.TryParse(network, out NetworkAddress networkAddress))
throw new InvalidOperationException("Network group map contains an invalid network address: " + network);
return new Tuple<NetworkAddress, string>(networkAddress, jsonGroup.GetString() ?? "");
});
{
Dictionary<Uri, BlockList> allAllowListZones = new Dictionary<Uri, BlockList>(0);View on GitHub (pinned to d0484b6c1e)
Solutions
- Open dnsApp.config and fix the offending 'localEndPointGroupMap' key so it is a valid IP endpoint with a port (e.g. change '192.168.1.10' to '192.168.1.10:53').
- Verify the key matches the client's local source endpoint as the server observes it; for IPv6 use bracketed form like '[fe80::1]:53'.
- If you intended a subnet-based group, move that entry into 'networkGroupMap' instead, which accepts CIDR notation.
Example fix
// before (dnsApp.config)
"localEndPointGroupMap": { "192.168.1.10": "groupA" }
// after
"localEndPointGroupMap": { "192.168.1.10:53": "groupA" } Defensive patterns
Strategy: validation
Validate before calling
// Validate every 'localEndPointGroupMap' key is a parseable endpoint before applying config.
foreach (string key in localEndPointGroupMapKeys)
{
if (!EndPointExtensions.TryParse(key, out EndPoint _))
throw new FormatException($"'localEndPointGroupMap' key '{key}' is not a valid IP:port endpoint. Expected e.g. '192.168.1.10:53'.");
} Type guard
static bool IsValidLocalEndPointKey(string key) => EndPointExtensions.TryParse(key, out EndPoint _);
Prevention
- Always include the ':port' (typically ':53') on localEndPointGroupMap keys.
- Keep CIDR subnets in networkGroupMap, never in localEndPointGroupMap.
- Validate the JSON config with a schema/linter before deploying.
When it happens
Trigger: Calling the AdvancedBlockingApp initializer with a 'localEndPointGroupMap' whose key string is not a parseable endpoint (e.g. a bare IP without a port, a hostname, '0.0.0.0', or a malformed address like '999.1.1.1:53'). EndPointExtensions.TryParse returns false for that key.
Common situations: Copying a subnet value from 'networkGroupMap' into 'localEndPointGroupMap' (CIDR notation like '10.0.0.0/24' is rejected because endpoints require a port); forgetting the ':53' port; pasting a hostname instead of an IP.
Related errors
- Network group map contains an invalid network address: {netw
- Unexpected URL format: {jsonUrl.ValueKind}
- Network group map contains an invalid network address: {netw
- Groups array was not defined.
- Forwarder was not defined: {forwarderName}
AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13).
Data as JSON: /api/errors/9a2d99d02d01e65f.
Report an issue: GitHub.