以下哪些DNS记录具有优先级?

以下哪些DNS记录具有优先级?,dns,Dns,假设我定义了这两个记录: *.example.com CNAME <some name> foo.example.com TXT <some text> 我希望得到上面在答案部分定义的TXT记录,因为它的定义更明确。但是,我从DNS提供商那里得到的是为通配符定义的CNAME 我已经向他们提出了这个问题,他们说他们正在遵循正确的行为。这就是他们给我的解释: 请参阅RFC1912中关于“常见DNS错误”的第2.4节。CNAME记录不允许与任何其他数据共存。换句话说,如果su

假设我定义了这两个记录:

*.example.com CNAME <some name>
foo.example.com TXT <some text>
我希望得到上面在答案部分定义的
TXT
记录,因为它的定义更明确。但是,我从DNS提供商那里得到的是为通配符定义的
CNAME

我已经向他们提出了这个问题,他们说他们正在遵循正确的行为。这就是他们给我的解释:

请参阅RFC1912中关于“常见DNS错误”的第2.4节。CNAME记录不允许与任何其他数据共存。换句话说,如果suzy.podunk.xx是sue.podunk.xx的别名,则suzy.podunk.edu的MX记录、A记录甚至TXT记录都不能存在

基本上,这意味着,如果为*.example.com添加CNAME记录,它将始终优先于任何其他记录,即使这些记录是为特定子域添加的,它们仍然会被忽略。在这种情况下我们无能为力。根据DNS标准,DNS应该是这样工作的

这是正确的吗?参考RFC中的章节是否涵盖通配符的情况?有谁能给我一个权威的答案并提供到源代码的链接吗?

的例子非常清楚(参见关于
host1.example

简而言之,只有在找不到“直接”全名时才使用通配符

您可以在第4.3.2节中找到所有解释,特别是第3.a点和第3.c点:

[……]

     c. If at some label, a match is impossible (i.e., the
        corresponding label does not exist), look to see if a
        the "*" label exists.
查看它如何具体地首先搜索全名,如果是CNAME,则附加条件,但如果查询TXT,则不是这样

在您的情况下,如果您专门查询TXT记录,那么应该返回该记录,而不考虑任何通配符。 事实上,
foo.example.com
上的
TXT
将隐藏任何其他类型,对它的
CNAME
请求不应返回通配符中的值,而是以
NOERROR NODATA
停止,这意味着该名称存在,而不是针对该类型。 这正是上面维基百科页面中的
host1.example
案例

事实上,这很容易尝试。 使用此分区文件:

$TTL 1
@ IN SOA localhost. root.localhost. (1 604800 86400 419200 604800)
  IN NS a.example.org.
  IN NS b.example.org.
  IN NS c.example.org.

*.example.com. IN CNAME foobar.example.net.
foobar.example.com. IN TXT "I am here." 
(开始只是让bind真正加载区域的样板)

如果执行
dig@127.0.0.1 foobar.example.com TXT
操作,您将获得预期的结果:

;; ANSWER SECTION:
foobar.example.com. 1 IN TXT "I am here."
如果您查询相同名称的任何其他记录类型,包括CNAME,您将得到
NOERROR
而没有任何
CNAME
的回复(通配符在zonefile中被显式名称隐藏,并且除了此名称上的
TXT
之外,您不会得到任何其他记录类型的错误数据,因为这是zonefile中唯一的记录类型)通配符适用于任何其他名称,如
dig@127.0.0.1 not-foobar.example.com TXT
给出:

;; ANSWER SECTION:
not-foobar.example.com. 1 IN CNAME foobar.example.net.
您给出的解释不正确,不适用于您的用例。报价仅适用于此类(无效)配置:

*.example.com. CNAME <some name>
*.example.com. TXT <some text>
*.example.com。CNAME
*.example.com。文本
但这与通配符无关,以下配置也会出现相同的问题,任何兼容名称服务器都会拒绝这些配置:

foobar.example.com. CNAME <some name>
foobar.example.com. TXT <some text>
foobar.example.com。CNAME
foobar.example.com。文本
顺便说一句,AWS Route53不会以这种方式运行。正如我所期望的那样,它给了我TXT记录。
*.example.com. CNAME <some name>
*.example.com. TXT <some text>
foobar.example.com. CNAME <some name>
foobar.example.com. TXT <some text>