{"record":{"id":"86b82025171bb55e","repo":"TechnitiumSoftware/DnsServer","slug":"edns-client-subnet-ipv4-override-must-be-an-ipv4-n","errorCode":null,"errorMessage":"EDNS Client Subnet IPv4 Override must be an IPv4 network address.","messagePattern":"EDNS Client Subnet IPv4 Override must be an IPv4 network address\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7372,"sourceCode":"            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                }\n\n                _eDnsClientSubnetIpv4Override = value;\n            }\n        }\n\n        public NetworkAddress EDnsClientSubnetIpv6Override\n        {\n            get { return _eDnsClientSubnetIpv6Override; }\n            set\n            {\n                if (value is not null)\n                {\n                    if (value.AddressFamily != AddressFamily.InterNetworkV6)\n                        throw new ArgumentException(\"EDNS Client Subnet IPv6 Override must be an IPv6 network address.\", nameof(EDnsClientSubnetIpv6Override));","sourceCodeStart":7354,"sourceCodeEnd":7390,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7354-L7390","documentation":"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.","triggerScenarios":"Setting server.EDnsClientSubnetIpv4Override to a NetworkAddress wrapping an IPv6 address (AddressFamily.InterNetworkV6).","commonSituations":"Passing an IPAddress.Parse result of an IPv6 string into the IPv4 override; reusing a single override variable for both families; config file mislabeling.","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."],"exampleFix":"// before\nserver.EDnsClientSubnetIpv4Override =\n    new NetworkAddress(IPAddress.Parse(\"2001:db8::1\"), 24); // throws\n\n// after\nserver.EDnsClientSubnetIpv4Override =\n    new NetworkAddress(IPAddress.Parse(\"203.0.113.5\"), 24);","handlingStrategy":"type-guard","validationCode":"if (overrideAddr is not null && overrideAddr.AddressFamily != AddressFamily.InterNetwork)\n    throw new InvalidOperationException(\"IPv4 override must be an IPv4 address.\");\nserver.EDnsClientSubnetIpv4Override = overrideAddr;","typeGuard":"static bool IsIpv4NetworkAddress(NetworkAddress n) =>\n    n is null || n.AddressFamily == AddressFamily.InterNetwork;","tryCatchPattern":"try { server.EDnsClientSubnetIpv4Override = addr; }\ncatch (ArgumentException) { addr = new NetworkAddress(IPAddress.Any, prefix); server.EDnsClientSubnetIpv4Override = addr; }","preventionTips":["Always check AddressFamily before assigning to family-specific override properties.","Keep IPv4 and IPv6 override variables separate in your config layer."],"tags":["dns","edns","ecs","ipv4","configuration"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}