当主机名存在 SRV 记录时,A/AAAA 不返回任何答案

当主机名存在 SRV 记录时,A/AAAA 不返回任何答案

我遇到了一个问题,在我为驻留在所述主机名上的服务添加记录后,A通常会通过*.fqdn开始返回来回答的 DNS 查询。NO ANSWERSRV

Example:

*.jozefmutis.com.                               3600  A    78.46.73.72
_factorio._udp.factorio-modded.jozefmutis.com.  3600  SRV  1  1  34199 primary.jozefmutis.com

现在dig factorio-modded.jozefmutis.com IN A不再返回答案factorio-modded.jozefmutis.com. 3600 IN A 78.46.73.72而是返回

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53115
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

,而dig factorio-modded2.jozef mutis.com IN A(在 SRV 和 A 中不存在)正确返回factorio-modded2.jozefmutis.com. 3600 IN A 78.46.73.72,被通配符 A 记录覆盖。

当主机名存在 SRV 时,A 失败的原因是什么?我在 RFC 中找不到任何提及的内容,但常识告诉我,SRV 记录中的服务标识符应该可以防止出现 Sinkhole,即使是 UDP 查找也是如此。添加专用的 A 记录会factorio-modded.jozefmutis.com. 3600 A 78.46.73.72导致为 A 查找返回正确的 IP4,尽管为每个 SRV 设置 A 记录似乎很愚蠢,但 * 应该可以解决这个问题。

答案1

仅当没有更具体的匹配项时,通配符才会匹配。

_factorio._udp.factorio-modded.jozefmutis.com.name 隐式定义了factorio-modded.jozefmutis.com.哪个节点成为 ENT 或空非终端,即树中存在的节点(由于下面的其他节点存在)但没有内容。这正是您得到NOERROR没有内容的原因:这不是错误,名称存在,但没有A记录。事实上它没有任何类型的记录,因为在该节点级别没有定义任何内容,只有“下面”。

此名称(factorio-modded.jozefmutis.com.)比通配符更具体,*.jozefmutis.com.因此对 的任何记录请求factorio-modded.jozefmutis.com.都将使用此名称上定义的内容来答复(什么都没有,因为它是一个 ENT),而不再使用通配符,因为这里不太具体,所以不予考虑。

查看 Wikipedia 页面,它正好有您的用例。https://en.wikipedia.org/wiki/Wildcard_DNS_record区域有:

*.example.               3600     TXT   "this is a wildcard"
*.example.               3600     MX    10 host1.example.
_ssh._tcp.host1.example.  3600     SRV   <SRV RDATA>
_ssh._tcp.host2.example.  3600     SRV   <SRV RDATA>

并且文本说,如果你查询host1.example MX记录,认为通配符会起作用,但事实并非如此:

由于 host1.example. 存在,因此不会匹配任何通配符。相反,您将得到“无错误,但无数据”的答案。通配符 MX 记录不会为存在的域提供 MX 记录。

相关内容