{"record":{"id":"9ae0d2de9a291d8d","repo":"TechnitiumSoftware/DnsServer","slug":"invalid-domain-name-value-ip-address-cannot-b","errorCode":null,"errorMessage":"Invalid domain name [{value}]: IP address cannot be used for DNS server domain name.","messagePattern":"Invalid domain name \\[(.+?)\\]: IP address cannot be used for DNS server domain name\\.","errorType":"exception","errorClass":"DnsServerException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7108,"sourceCode":"\n        #endregion\n\n        #region properties\n\n        public string ServerDomain\n        {\n            get { return _serverDomain; }\n            set\n            {\n                if (!_serverDomain.Equals(value, StringComparison.Ordinal))\n                {\n                    if (DnsClient.IsDomainNameUnicode(value))\n                        value = DnsClient.ConvertDomainNameToAscii(value);\n\n                    DnsClient.IsDomainNameValid(value, true);\n\n                    if (IPAddress.TryParse(value, out _))\n                        throw new DnsServerException(\"Invalid domain name [\" + value + \"]: IP address cannot be used for DNS server domain name.\");\n\n                    _serverDomain = value.ToLowerInvariant();\n                    _fallbackResponsiblePerson = new MailAddress(\"hostadmin@\" + _serverDomain);\n\n                    _authZoneManager.TriggerUpdateServerDomain();\n                    _allowedZoneManager.UpdateServerDomain();\n                    _blockedZoneManager.UpdateServerDomain();\n                    _blockListZoneManager.UpdateServerDomain();\n\n                    UpdateThisServer();\n                }\n            }\n        }\n\n        public string ConfigFolder\n        { get { return _configFolder; } }\n\n        public IReadOnlyList<IPEndPoint> LocalEndPoints","sourceCodeStart":7090,"sourceCodeEnd":7126,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7090-L7126","documentation":"Thrown by the ServerDomain setter when the (Unicode->IDNA-normalized) value parses successfully as an IPAddress. The DNS server's domain must be a domain NAME, not an IP; using an IP would break SOA records, responsible-person mail, and NS generation.","triggerScenarios":"Setting ServerDomain to a string that is a valid IP literal (e.g. \"192.168.1.1\" or \"::1\") after IDNA conversion. The setter first validates the domain name, then explicitly rejects IP-form values.","commonSituations":"Operator confuses the server domain with the bind/listen address; copy-paste from a connection string; automation reading the listen IP into the domain field; misconfigured env var (e.g. SERVER_DOMAIN=10.0.0.5).","solutions":["Set ServerDomain to an actual hostname (e.g. ns1.example.com), and set the listen address separately via localEndPoints.","If you have no domain, register one or use a dynamic-DNS hostname.","Fix the configuration source (env var/UI/config file) that is feeding an IP into the domain field.","Validate that IPAddress.TryParse(value) is false before assignment."],"exampleFix":"// before\nserver.ServerDomain = \"10.0.0.5\";\n\n// after\nserver.ServerDomain = \"ns1.example.com\";\nserver.LocalEndPoints = new[] { new IPEndPoint(IPAddress.Parse(\"10.0.0.5\"), 53) };","handlingStrategy":"validation","validationCode":"string SafeServerDomain(string value)\n{\n    if (DnsClient.IsDomainNameUnicode(value)) value = DnsClient.ConvertDomainNameToAscii(value);\n    DnsClient.IsDomainNameValid(value, true);\n    if (IPAddress.TryParse(value, out _)) throw new ArgumentException(\"Server domain must be a hostname, not an IP\");\n    return value.ToLowerInvariant();\n}","typeGuard":"static bool IsValidServerDomain(string value)\n{\n    if (string.IsNullOrWhiteSpace(value)) return false;\n    if (IPAddress.TryParse(value, out _)) return false;\n    try { DnsClient.IsDomainNameValid(value, true); return true; } catch { return false; }\n}","tryCatchPattern":"try { server.ServerDomain = value; }\ncatch (DnsServerException ex) when (ex.Message.Contains(\"IP address cannot be used\")) { return BadRequest(\"Provide a domain name, not an IP\"); }","preventionTips":["Distinguish server domain (hostname) from bind address (IP) in config.","Validate that the value is not an IP literal before assignment.","Use a real registered or dynamic-DNS hostname for ServerDomain."],"tags":["server-domain","config","validation","ip-misuse"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}