{"record":{"id":"dcb76dfe72753517","repo":"TechnitiumSoftware/DnsServer","slug":"edns-client-subnet-ipv6-prefix-length-cannot-be-gr","errorCode":null,"errorMessage":"EDNS Client Subnet IPv6 prefix length cannot be greater than 64.","messagePattern":"EDNS Client Subnet IPv6 prefix length cannot be greater than 64\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7358,"sourceCode":"        public byte EDnsClientSubnetIPv4PrefixLength\n        {\n            get { return _eDnsClientSubnetIPv4PrefixLength; }\n            set\n            {\n                if (value > 32)\n                    throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv4PrefixLength), \"EDNS Client Subnet IPv4 prefix length cannot be greater than 32.\");\n\n                _eDnsClientSubnetIPv4PrefixLength = value;\n            }\n        }\n\n        public byte EDnsClientSubnetIPv6PrefixLength\n        {\n            get { return _eDnsClientSubnetIPv6PrefixLength; }\n            set\n            {\n                if (value > 64)\n                    throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv6PrefixLength), \"EDNS Client Subnet IPv6 prefix length cannot be greater than 64.\");\n\n                _eDnsClientSubnetIPv6PrefixLength = value;\n            }\n        }\n\n        public NetworkAddress EDnsClientSubnetIpv4Override\n        {\n            get { return _eDnsClientSubnetIpv4Override; }\n            set\n            {\n                if (value is not null)\n                {\n                    if (value.AddressFamily != AddressFamily.InterNetwork)\n                        throw new ArgumentException(\"EDNS Client Subnet IPv4 Override must be an IPv4 network address.\", nameof(EDnsClientSubnetIpv4Override));\n\n                    if (value.IsHostAddress)\n                        value = new NetworkAddress(value.Address, _eDnsClientSubnetIPv4PrefixLength);\n                }","sourceCodeStart":7340,"sourceCodeEnd":7376,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7340-L7376","documentation":"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.","triggerScenarios":"Setting server.EDnsClientSubnetIPv6PrefixLength to a byte > 64.","commonSituations":"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.","solutions":["Set the value to 64 or less (commonly /56 for ECS).","If a longer prefix is needed, note this server intentionally caps at 64 for privacy."],"exampleFix":"// before\nserver.EDnsClientSubnetIPv6PrefixLength = 128; // throws\n\n// after\nserver.EDnsClientSubnetIPv6PrefixLength = 56;","handlingStrategy":"validation","validationCode":"byte v6Prefix = (byte)Math.Min(value, 64);\nserver.EDnsClientSubnetIPv6PrefixLength = v6Prefix;","typeGuard":"static bool IsValidV6Prefix(byte p) => p <= 64;","tryCatchPattern":"try { server.EDnsClientSubnetIPv6PrefixLength = value; }\ncatch (ArgumentOutOfRangeException) { server.EDnsClientSubnetIPv6PrefixLength = 56; }","preventionTips":["This server caps IPv6 ECS at 64, not 128 — do not assume standard CIDR maxima.","Use /56 as a safe default for ECS privacy."],"tags":["dns","edns","ecs","ipv6","configuration"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}