DNS,A 记录通配符是否优先于更具体的 CNAME?

DNS,A 记录通配符是否优先于更具体的 CNAME?

我们设置了通配符来处理“example.com”的所有子域名

记录:*.example.com 指向 10.10.10.10

我们有一个更具体的 A 记录来处理特殊子域(这很好用):

A 记录:staging.example.com 指向 10.10.10.9

我们遇到的问题是我们正在将暂存区迁移到新的托管环境,并且我们被指示使用 CNAME:

CNAME:new-staging.example.com 指向 proxy.heroku.com

我们认为这可行。然而,new-staging.example.com 解析为顶级通配符 10.10.10.10,而不是指向 proxy.heroku.com。

我遗漏了什么?这不可能吗?或者这是不好的做法?谢谢,

答案1

答案通常是“否”——更具体的记录应该获胜,因此这应该如您所描述/预期的那样工作。我猜是您将通配符 A 记录缓存在某处,并且需要等待该缓存过期。

使用 BIND 9.6.2-P2/FreeBSD 8.1 进行快速测试:
包含以下记录的区域:

example.net.                IN      A      127.0.0.2
*.test.example.net.         IN      A      127.0.0.1
specific.test.example.net.  IN      CNAME  example.net.

决议如下:

% dig specific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> specific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17222
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;specific.test.example.net. IN  A

;; ANSWER SECTION:
specific.test.example.net. 3600 IN  CNAME   example.net.
example.net.               3600 IN  A   127.0.0.2

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.

;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(返回 CNAME)

% dig nonspecific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> nonspecific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26980
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;nonspecific.test.example.net.  IN  A

;; ANSWER SECTION:
nonspecific.test.example.net. 3600 IN   A   127.0.0.1

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.


;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(返回通配符A记录)

答案2

根据您对该问题的评论:

运行 dig -t ANY new-staging.example.com 时,我们得到:new-staging.example.com.82880 IN CNAME proxy.heroku.com.example.com.proxy.heroku.com.example.com.86400 IN A 10.10.10.10

...您的 DNS 配置错误。您需要将 CNAME 的目标设置为proxy.heroku.com.- 最后的句点很重要!如果没有它,您的 DNS 服务器会假设您指的是example.com区域内的主机 - proxy.heroku.com.example.com- 而这会被通配符记录捕获。

答案3

我偶然发现了这篇文章,它研究了如何在共享的 Plesk Linux 服务器上实现这一点。在他们的示例中,他们提到了 DNS / vhost.conf 组合解决方案,您必须同时添加 vhost.conf 并更新 DNS。

引用:“它必须是子域名列表中的最后一个,按字母顺序排列,因此其名称以“zz”开头。 http://kb.parallels.com/2239

我的猜测是,这与“正常” DNS 理论不同,后者将返回更具体的记录。

相关内容