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

zde*_*nis 21 domain-name-system cname-record

我们设置了一个通配符来处理“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。

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

vor*_*aq7 18

答案通常是“否”——更具体的记录应该获胜,所以这应该像你描述/预期的那样工作。我的猜测是您将通配符 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.
Run Code Online (Sandbox Code Playgroud)

解决如下:

% 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
Run Code Online (Sandbox Code Playgroud)

(返回 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
Run Code Online (Sandbox Code Playgroud)

(返回通配符 A 记录)


nic*_*rim 7

根据你对这个问题的评论:

当运行 dig -t ANY new-staging.example.com 我们得到:new-staging.example.com。82880 在 CNAME proxy.heroku.com.example.com 中。proxy.heroku.com.example.com。86400 中 10.10.10.10

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