问题描述
更改主机名的 DNS A 记录后,dig
和 nslookup
显示不同的结果。当 dig 显示正确的 IP 时,nslookup 仍然显示旧的 IP。我在macos 11.2.3
我的域 nslookup
的 {{domainname}}
输出是(请注意,我用 xxx.old.ip.xxx 替换了生成的 ip 地址。
$ nslookup {{domainname}}
Server: 192.168.178.1
Address: 192.168.178.1#53
Non-authoritative answer:
Name: {{domainname}}
Address: xxx.old.ip.xxx
和 dig
输出(请注意,我用 yyy.new.ip.yyy
替换了生成的 IP,以表明它与 nslookup 的情况下的 IP 不同
$ dig {{domainname}}
; <<>> DiG 9.10.6 <<>> {{domainname}}
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY,status: NOERROR,id: 45116
;; flags: qr rd ra; QUERY: 1,ANSWER: 1,AUTHORITY: 0,ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0,flags:; udp: 512
;; QUESTION SECTION:
;{{domainname}}. IN A
;; ANSWER SECTION:
{{domainname}}. 1157 IN A yyy.new.ip.yyy
;; Query time: 70 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Fri Mar 12 18:29:03 CET 2021
;; MSG SIZE rcvd: 63
nslookup
出了什么问题?是DNS缓存吗?如果这是问题,我该怎么做才能强制 nslookup(和其他工具)刷新 DNS 缓存。
更新:大约 20 分钟后,nslookup 和 dig 显示相同的 IP,并且 ssh 正在使用 {{domainname}} 进行连接。
解决方法
响应都不是来自权威名称服务器,因此 DNS 响应来自解析器的缓存。在更改 DNS 资源记录之前,请记下 TTL 值。这是解析器删除缓存值之前等待的秒数。对于 dig
命令,缓存值上的 TTL 为下次刷新前的 1157 秒。