TechnitiumSoftware/DnsServer · error · ArgumentOutOfRangeException

EDNS Client Subnet IPv6 prefix length cannot be greater than

Error message

EDNS Client Subnet IPv6 prefix length cannot be greater than 64.

What it means

Thrown by the EDnsClientSubnetIPv6PrefixLength property setter when the byte value exceeds 64. An IPv6 prefix length cannot exceed 128 in theory, but this server caps ECS IPv6 prefix at 64 to protect client privacy and limit response specificity.

Source

Thrown at DnsServerCore/Dns/DnsServer.cs:7358

        public byte EDnsClientSubnetIPv4PrefixLength
        {
            get { return _eDnsClientSubnetIPv4PrefixLength; }
            set
            {
                if (value > 32)
                    throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv4PrefixLength), "EDNS Client Subnet IPv4 prefix length cannot be greater than 32.");

                _eDnsClientSubnetIPv4PrefixLength = value;
            }
        }

        public byte EDnsClientSubnetIPv6PrefixLength
        {
            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);
                }

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. Set the value to 64 or less (commonly /56 for ECS).
  2. If a longer prefix is needed, note this server intentionally caps at 64 for privacy.

Example fix

// before
server.EDnsClientSubnetIPv6PrefixLength = 128; // throws

// after
server.EDnsClientSubnetIPv6PrefixLength = 56;
Defensive patterns

Strategy: validation

Validate before calling

byte v6Prefix = (byte)Math.Min(value, 64);
server.EDnsClientSubnetIPv6PrefixLength = v6Prefix;

Type guard

static bool IsValidV6Prefix(byte p) => p <= 64;

Try / catch

try { server.EDnsClientSubnetIPv6PrefixLength = value; }
catch (ArgumentOutOfRangeException) { server.EDnsClientSubnetIPv6PrefixLength = 56; }

Prevention

When it happens

Trigger: Setting server.EDnsClientSubnetIPv6PrefixLength to a byte > 64.

Common situations: Setting a long prefix like /128 for full client identity; loading config with an overly-specific IPv6 ECS value; assuming the max is 128 like standard CIDR.

Related errors


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