TechnitiumSoftware/DnsServer · error · ArgumentException

EDNS Client Subnet IPv6 Override must be an IPv6 network add

Error message

EDNS Client Subnet IPv6 Override must be an IPv6 network address.

What it means

Thrown by the EDnsClientSubnetIpv6Override property setter when the provided NetworkAddress has AddressFamily != InterNetworkV6 (i.e. it is not an IPv6 address). A valid IPv6 host address is automatically converted to a network address using the current IPv6 prefix length.

Source

Thrown at DnsServerCore/Dns/DnsServer.cs:7390

                        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));

                    if (value.IsHostAddress)
                        value = new NetworkAddress(value.Address, _eDnsClientSubnetIPv6PrefixLength);
                }

                _eDnsClientSubnetIpv6Override = value;
            }
        }

        public IReadOnlyDictionary<int, (int, int)> QpmPrefixLimitsIPv4
        {
            get { return _qpmPrefixLimitsIPv4; }
            set
            {
                if (value is null)
                {
                    _qpmPrefixLimitsIPv4 = new Dictionary<int, (int, int)>();
                }

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. Provide an IPv6 NetworkAddress (AddressFamily.InterNetworkV6).
  2. Use EDnsClientSubnetIpv4Override for IPv4 addresses.
  3. Check AddressFamily before assignment.

Example fix

// before
server.EDnsClientSubnetIpv6Override =
    new NetworkAddress(IPAddress.Parse("203.0.113.5"), 56); // throws

// after
server.EDnsClientSubnetIpv6Override =
    new NetworkAddress(IPAddress.Parse("2001:db8::1"), 56);
Defensive patterns

Strategy: type-guard

Validate before calling

if (overrideAddr is not null && overrideAddr.AddressFamily != AddressFamily.InterNetworkV6)
    throw new InvalidOperationException("IPv6 override must be an IPv6 address.");
server.EDnsClientSubnetIpv6Override = overrideAddr;

Type guard

static bool IsIpv6NetworkAddress(NetworkAddress n) =>
    n is null || n.AddressFamily == AddressFamily.InterNetworkV6;

Try / catch

try { server.EDnsClientSubnetIpv6Override = addr; }
catch (ArgumentException) { addr = new NetworkAddress(IPAddress.IPv6Any, prefix); server.EDnsClientSubnetIpv6Override = addr; }

Prevention

When it happens

Trigger: Setting server.EDnsClientSubnetIpv6Override to a NetworkAddress wrapping an IPv4 address (AddressFamily.InterNetwork).

Common situations: Passing an IPv4 address into the IPv6 override slot; reusing one variable for both; config file field mapping error.

Related errors


AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13). Data as JSON: /api/errors/8418f40320c0f624. Report an issue: GitHub.