我想知道是否可以在 MX 查找中发布(和接收)格式错误的主机名(例如以数字或连字符开头的主机名等)? DNS 服务器通常在接受 MX 记录之前验证它们吗?
例如,
0mx.example.com
-host.domain.com
host. domain.com
即使不允许,我们也假设以某种方式发布了格式错误的主机名。我是否可以假设“良好”的 DNS 服务器(例如 Google DNS)不会在 MX 查找中转发此类格式错误的主机名?
我正在实现一些相关的东西,需要知道我是否可以“信任”MX 查找始终返回格式良好的主机名。
答案1
根据 [RFC 2181]“11. 名称语法”,DNS 允许出现“任何二进制字符串”:
DNS 本身仅对可用于标识资源记录的特定标签施加一项限制。这一限制与标签的长度和全名有关。任何一个标签的长度限制在 1 到 63 个八位位组之间。完整域名的长度限制为 255 个八位字节(包括分隔符)。零长度全名被定义为代表 DNS 树的根,并且通常书写和显示为“.”。除了这些限制之外,任何二进制字符串都可以用作任何资源记录的标签。类似地,任何二进制字符串都可以用作任何记录的值,其中包含域名作为其部分或全部值(SOA、NS、MX、PTR、CNAME 以及可能添加的任何其他值)。
因此,需要测试您的 DNS 服务器、客户端和邮件传输软件如何处理此类数据。
答案2
没有什么可以阻止您创建非验证 DNS 服务器。不过,我认为这里的任何人都无法在不尝试的情况下就 Google 的 DNS 服务器处理此类记录的方式给出明确的答案。
答案3
DNS 服务器软件是否会检查 MX 主机名的语法是否存在非法字符?有些会有些不会。
充当缓存 DNS 解析器的软件是否会对从权威 DNS 服务器接收到的主机名执行有效性检查?我对此表示怀疑。
是否有 DNS 软件会检查 MX 记录中指定为目标的主机是否正在侦听有效的 SMTP 端口?不,我从未在 DNS 服务器中遇到过任何此类验证,尽管可以想象有人可以编写这样的验证。
您是否担心在域区域中创建的 DNS 记录可能有错误?我建议您创建具有较短 TTL(生存时间)的此类记录,然后对其进行测试。验证新的 DNS 记录良好后,您可以将其 TTL 更改为正常时间长度。 (短 TTL 意味着损坏的记录在被您的修复替换之前不会长时间缓存)