{"record":{"id":"fced586fee759ac2","repo":"TechnitiumSoftware/DnsServer","slug":"port-53-cannot-be-used-for-dns-over-quic-service","errorCode":null,"errorMessage":"Port 53 cannot be used for DNS-over-QUIC service. Please use a different port.","messagePattern":"Port 53 cannot be used for DNS-over-QUIC service\\. Please use a different port\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7807,"sourceCode":"                    throw new ArgumentOutOfRangeException(nameof(DnsOverHttpsPort), \"Port 53 cannot be used for DNS-over-HTTPS service. Please use a different port.\");\n\n                if (value == 853)\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverHttpsPort), \"Port 853 is reserved for DNS-over-TLS service. Please use a different port for DNS-over-HTTPS service.\");\n\n                _dnsOverHttpsPort = value;\n            }\n        }\n\n        public int DnsOverQuicPort\n        {\n            get { return _dnsOverQuicPort; }\n            set\n            {\n                if ((value < ushort.MinValue) || (value > ushort.MaxValue))\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverQuicPort), \"Port number valid range is from 0 to 65535.\");\n\n                if (value == 53)\n                    throw new ArgumentOutOfRangeException(nameof(DnsOverQuicPort), \"Port 53 cannot be used for DNS-over-QUIC service. Please use a different port.\");\n\n                _dnsOverQuicPort = value;\n            }\n        }\n\n        public IReadOnlyCollection<NetworkAccessControl> DnsReverseProxyNetworkACL\n        {\n            get { return _dnsReverseProxyNetworkACL; }\n            set\n            {\n                if ((value is null) || (value.Count == 0))\n                    _dnsReverseProxyNetworkACL = null;\n                else if (value.Count > byte.MaxValue)\n                    throw new ArgumentOutOfRangeException(nameof(DnsReverseProxyNetworkACL), \"Network Access Control List cannot have more than 255 entries.\");\n                else\n                    _dnsReverseProxyNetworkACL = value;\n            }\n        }","sourceCodeStart":7789,"sourceCodeEnd":7825,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7789-L7825","documentation":"Thrown by the DnsOverQuicPort setter when value == 53, after the range check (317) passes. Port 53 is reserved for plain DNS; DNS-over-QUIC must use a different port (853 by convention).","triggerScenarios":"Assigning DnsServer.DnsOverQuicPort = 53 via the settings API or config restore. Range guard passes; this dedicated guard fires.","commonSituations":"Assuming QUIC-based DNS can share port 53 with plain DNS. Config migration leaving DoQ at 53. UI confusion between the plain DNS port and the DoQ port.","solutions":["Use the conventional DoQ port 853 (or another non-53 port).","Keep plain DNS on 53 and run DoQ on a dedicated port.","Pre-validate the DoQ port is not 53 before assigning.","Re-submit a corrected value via the settings API."],"exampleFix":"// before\n_dnsServer.DnsOverQuicPort = 53;  // throws: 53 reserved for plain DNS\n\n// after\n_dnsServer.DnsOverQuicPort = 853;  // conventional DoQ port","handlingStrategy":"validation","validationCode":"if (parsed == 53) parsed = 853; // 53 reserved for plain DNS\n_dnsServer.DnsOverQuicPort = parsed;","typeGuard":"static bool IsAcceptableDoQPort(int value) => value != 53 && value >= 0 && value <= 65535;","tryCatchPattern":"try { _dnsServer.DnsOverQuicPort = parsed; }\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == nameof(DnsServer.DnsOverQuicPort) && parsed == 53)\n{ _dnsServer.DnsOverQuicPort = 853; }","preventionTips":["Never use 53 for DoQ.","Default migrated 53 values to 853.","Reserve 53 for the plain DNS listener."],"tags":["dns","network","port","dnsoverquic","reserved-port","configuration","argumentoutofrange"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}