TechnitiumSoftware/DnsServer · error · ArgumentException
EDNS Client Subnet IPv4 Override must be an IPv4 network add
Error message
EDNS Client Subnet IPv4 Override must be an IPv4 network address.
What it means
Thrown by the EDnsClientSubnetIpv4Override property setter when the provided NetworkAddress has AddressFamily != InterNetwork (i.e. it is not an IPv4 address). If a valid IPv4 host address is provided, it is automatically converted to a network address using the current IPv4 prefix length.
Source
Thrown at DnsServerCore/Dns/DnsServer.cs:7372
get { return _eDnsClientSubnetIPv6PrefixLength; }
set
{
if (value > 64)
throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv6PrefixLength), "EDNS Client Subnet IPv6 prefix length cannot be greater than 64.");
_eDnsClientSubnetIPv6PrefixLength = value;
}
}
public NetworkAddress EDnsClientSubnetIpv4Override
{
get { return _eDnsClientSubnetIpv4Override; }
set
{
if (value is not null)
{
if (value.AddressFamily != AddressFamily.InterNetwork)
throw new ArgumentException("EDNS Client Subnet IPv4 Override must be an IPv4 network address.", nameof(EDnsClientSubnetIpv4Override));
if (value.IsHostAddress)
value = new NetworkAddress(value.Address, _eDnsClientSubnetIPv4PrefixLength);
}
_eDnsClientSubnetIpv4Override = value;
}
}
public NetworkAddress EDnsClientSubnetIpv6Override
{
get { return _eDnsClientSubnetIpv6Override; }
set
{
if (value is not null)
{
if (value.AddressFamily != AddressFamily.InterNetworkV6)
throw new ArgumentException("EDNS Client Subnet IPv6 Override must be an IPv6 network address.", nameof(EDnsClientSubnetIpv6Override));View on GitHub (pinned to d0484b6c1e)
Solutions
- Provide an IPv4 NetworkAddress (e.g. from an IPAddress in InterNetwork family).
- Use the IPv6 override property (EDnsClientSubnetIpv6Override) for IPv6 addresses.
- Validate AddressFamily before assignment.
Example fix
// before
server.EDnsClientSubnetIpv4Override =
new NetworkAddress(IPAddress.Parse("2001:db8::1"), 24); // throws
// after
server.EDnsClientSubnetIpv4Override =
new NetworkAddress(IPAddress.Parse("203.0.113.5"), 24); Defensive patterns
Strategy: type-guard
Validate before calling
if (overrideAddr is not null && overrideAddr.AddressFamily != AddressFamily.InterNetwork)
throw new InvalidOperationException("IPv4 override must be an IPv4 address.");
server.EDnsClientSubnetIpv4Override = overrideAddr; Type guard
static bool IsIpv4NetworkAddress(NetworkAddress n) =>
n is null || n.AddressFamily == AddressFamily.InterNetwork; Try / catch
try { server.EDnsClientSubnetIpv4Override = addr; }
catch (ArgumentException) { addr = new NetworkAddress(IPAddress.Any, prefix); server.EDnsClientSubnetIpv4Override = addr; } Prevention
- Always check AddressFamily before assigning to family-specific override properties.
- Keep IPv4 and IPv6 override variables separate in your config layer.
When it happens
Trigger: Setting server.EDnsClientSubnetIpv4Override to a NetworkAddress wrapping an IPv6 address (AddressFamily.InterNetworkV6).
Common situations: Passing an IPAddress.Parse result of an IPv6 string into the IPv4 override; reusing a single override variable for both families; config file mislabeling.
Related errors
- EDNS Client Subnet IPv4 prefix length cannot be greater than
- EDNS Client Subnet IPv6 prefix length cannot be greater than
- EDNS Client Subnet IPv6 Override must be an IPv6 network add
- Invalid EDNS UDP payload size: valid range is 512-4096 bytes
- QPM Prefix Limits for IPv4 cannot have more than 255 entries
AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13).
Data as JSON: /api/errors/86b82025171bb55e.
Report an issue: GitHub.