{"record":{"id":"333f0e015e70a120","repo":"TechnitiumSoftware/DnsServer","slug":"port-53-cannot-be-used-for-dns-over-http-service","errorCode":null,"errorMessage":"Port 53 cannot be used for DNS-over-HTTP service. Please use a different port.","messagePattern":"Port 53 cannot be used for DNS-over-HTTP service\\. Please use a different port\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7732,"sourceCode":"            set\n            {\n                if ((value < ushort.MinValue) || (value > ushort.MaxValue))\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverTcpProxyPort), \"Port number valid range is from 0 to 65535.\");\n\n                _dnsOverTcpProxyPort = value;\n            }\n        }\n\n        public int DnsOverHttpPort\n        {\n            get { return _dnsOverHttpPort; }\n            set\n            {\n                if ((value < ushort.MinValue) || (value > ushort.MaxValue))\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverHttpPort), \"Port number valid range is from 0 to 65535.\");\n\n                if (value == 53)\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverHttpPort), \"Port 53 cannot be used for DNS-over-HTTP service. Please use a different port.\");\n\n                if (value == 853)\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverHttpPort), \"Port 853 is reserved for DNS-over-TLS service. Please use a different port for DNS-over-HTTP service.\");\n\n                _dnsOverHttpPort = value;\n            }\n        }\n\n        public string DnsOverHttpUnixSocket\n        {\n            get { return _dnsOverHttpUnixSocket; }\n            set\n            {\n                if (string.IsNullOrWhiteSpace(value))\n                    value = null;\n\n                _dnsOverHttpUnixSocket = value;\n            }","sourceCodeStart":7714,"sourceCodeEnd":7750,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7714-L7750","documentation":"Thrown by the DnsOverHttpPort setter after the range check passes, specifically when value == 53. Port 53 is the standard DNS port and is reserved for plain DNS; the server forbids hosting DNS-over-HTTP on it to avoid ambiguity with the normal DNS listener.","triggerScenarios":"Assigning DnsServer.DnsOverHttpPort = 53 via the settings API (WebServiceSettingsApi.cs:1195) or config load. The range guard at 309 passes (53 is in range), then this dedicated guard fires.","commonSituations":"Assuming DoH can reuse the standard DNS port 53. Copying a config that defaulted the DoH port to 53. UI confusion between the plain-DNS listener port and the DoH port.","solutions":["Pick a different port for DoH, e.g. 8053, 443, or 3000.","Leave plain DNS on 53 and host DoH on a dedicated port.","Validate before assignment that the DoH port is not 53 (nor 853 — see 311).","Correct the settings API payload and re-submit."],"exampleFix":"// before\n_dnsServer.DnsOverHttpPort = 53;  // throws: 53 reserved for plain DNS\n\n// after\n_dnsServer.DnsOverHttpPort = 8053; // dedicated DoH port","handlingStrategy":"validation","validationCode":"if (parsed == 53) parsed = 8053; // port 53 reserved for plain DNS\n_dnsServer.DnsOverHttpPort = parsed;","typeGuard":"static bool IsAcceptableDohPort(int value) => value != 53 && value != 853 && value >= 0 && value <= 65535;","tryCatchPattern":"try { _dnsServer.DnsOverHttpPort = parsed; }\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == nameof(DnsServer.DnsOverHttpPort) && parsed == 53)\n{ _dnsServer.DnsOverHttpPort = 8053; }","preventionTips":["Never reuse 53 for DoH; reserve it for plain DNS.","Map any 53 from migrated config to a safe default before assignment.","Pre-validate against the reserved-port list."],"tags":["dns","network","port","dnsoverhttp","reserved-port","configuration","argumentoutofrange"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}