我拥有一个域名,并通过 Digital Ocean DNS 服务进行配置——这重要吗?
*.my.domain
我有的CNAME ingress.my.domain
。
当我执行dig
命令时,我会得到不同的结果,例如:
➜ ~ dig abc.my.domain @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> abc.my.domain @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17257
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;abc.my.domain. IN A
;; ANSWER SECTION:
abc.my.domain. 21599 IN CNAME ingress.my.domain.
ingress.my.domain. 299 IN A <valid IP>
;; Query time: 198 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jan 03 08:48:15 CET 2020
;; MSG SIZE rcvd: 83
效果如预期。但我立即得到:
➜ ~ dig abc.my.domain @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> abc.my.domain @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60455
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;abc.my.domain. IN A
;; AUTHORITY SECTION:
my.domain. 449 IN SOA ns1.digitalocean.com. hostmaster.my.domain. 1577916425 10800 3600 604800 1800
;; Query time: 116 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jan 03 08:48:16 CET 2020
;; MSG SIZE rcvd: 112
我做错了什么吗?我是不是遇到了一些传播延迟问题?我该如何解决这些问题?
答案1
8.8.8.8(与许多公共解析器一样)不是单个服务器,而是一个大型集群。
后续查询(即使来自同一客户端的查询)也可能由不同的后端服务器处理,并且每个服务器可能具有不同的缓存记录
您通常可以通过 TTL 字段的波动(对于每个服务器,该字段都会稳步减少直至过期,但对于每个后端服务器,该字段的发生时间不同)或最近更新记录时完全不同的响应来观察到这一点,而以前的缓存结果仍然存在于其中一些后端服务器中。
更新 DNS 后,Google 允许你让解析器的所有缓存结果过期
答案2
TTL
在这种情况下, akaTime To Live
可能是一个问题,尤其是因为它设置得相当高abc.my.domain. 21599
。列出的值21559
是以秒为单位的时间。
TTL 表示 DNS 解析器被允许从缓存命中中响应请求的时间,而不是查询整个 DNS 服务器链。许多解析器都遵守 TTL,并且被调用链中的任何解析器都可以为您提供“旧”但“正确”的条目。
为了避免在测试/设置期间出现此类问题,使用+trace
dig 中的标志会很有帮助。这会强制将查询从根服务器解析到该区域的一个权威名称服务器(SOA 记录条目的一个服务器)。