DNS 缓存未清除 Mac OSX

DNS 缓存未清除 Mac OSX

我的机器上发生了一些奇怪的事情。我正在等待域名传播。我在 Chrome 中访问该页面,但它还没有出现。但如果我在另一台机器上、在另一个 ISP 上查看它,它就在那里。

dscacheutil -flushcache我尝试用和刷新缓存sudo killall -HUP mDNSResponder但仍然没有出现。

如果我使用dig,我会得到这个,它有不正确的 DNS 条目:

; <<>> DiG 9.8.3-P1 <<>> http://www.xxx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 37789
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;http://www.xxx.com.    IN  A

;; AUTHORITY SECTION:
xxx.com.    3174    IN  SOA dns1.registrar-servers.com. hostmaster.registrar-servers.com. 2014090300 3600 1801 604800 3601

;; Query time: 31 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Fri Oct 17 09:26:21 2014
;; MSG SIZE  rcvd: 119

如果我使用dig +trace,最后两个步骤将显示正确的 DNS 条目:

;; Received 448 bytes from 000.0.00.00#53(000.0.00.00) in 79 ms

xxx.com.    86400   IN  NS  ns1.correctns.com.
000.0.00.00.    86400   IN  NS  ns2.correctns.com.
;; Received 96 bytes from 1000.0.00.00#53(1000.0.00.00) in 78 ms

000.0.00.00.    86400   IN  SOA ns1.correctns.com. ns2.correctns.com. 2014101603 86400 7200 3600000 86400
;; Received 138 bytes from 66.117.5.83#53(66.117.5.83) in 68 ms

老实说,我不知道我在这里看的是什么,但它似乎缓存了错误的信息,然后总是引用它而不是运行中的新信息+trace

我经常遇到这种情况。有什么方法可以强制它在正确的位置显示吗?

答案1

听起来它被 10.0.0.1 的 DNS 服务器缓存了(可能是您的路由器)。涉及两个潜在的缓存级别,刷新其中一个不会影响另一个。让我来看看这些选项:

  • dig +trace domainname.com通过权威服务器跟踪 DNS 查询,在您的情况下从 66.117.5.83 获取最终答案。

  • dig domainname.com只是将查询发送到网络设置中配置的 DNS 服务器(在您的例子中为 10.0.0.1)。这通常只是一个缓存服务器,它会记住之前查找的结果,并发出相同的答案,直到其生存时间到期(在 中xxx.com. 3174 IN SOA dns1.registrar-servers.com...,它还有 3174 秒的时间)。

  • 使用域名与普通(非面向 DNS)程序(如 Chrome)一起通过 OS X 的解析器,它会检查其缓存(这里适用相同的 TTL 策略),如果不存在,则检查配置的 DNS 服务器(请记住那可能是缓存服务器)。

重置 OS X 缓存不会影响 DNS 服务器上的缓存。另外,请注意,即使您重置 DNS 服务器(例如通过重新启动路由器),整个网络中的其他 DNS 服务器可能仍会缓存旧信息。一般来说,当您进行 DNS 更改时,您必须等待 TTL 过期,然后才能假定新信息在所有地方都可用。

(实际上,您还需要担心另一个层面——您的辅助 DNS 服务器仅定期检查主服务器的更新,因此您必须等待辅助服务器更新,然后等待 TTL 使各种缓存中的所有旧信息过期……)

答案2

据我所知,一切运行正常。域名 xxx.com 似乎已同步,运行正常。还注意到您使用了dig http://www.xxx.com。Dig 不理解 URL,请尝试仅使用域名部分, dig www.xxx.com这样您就会得到正确的响应。

$ dig www.xxx.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> www.xxx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45553
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.xxx.com.                   IN      A

;; ANSWER SECTION:
www.xxx.com.            86331   IN      A       141.0.173.173

;; Query time: 0 msec
;; SERVER: 
;; WHEN: Sun Oct 19 16:44:50 MDT 2014
;; MSG SIZE  rcvd: 56

这是名称服务器的详细信息。

$ checksoa xxx.com

     Serial #   RTT(ms)  Version                       Nameservers (name, IP, SOA mname field) for xxx.com

    2014040205      80   not currently available       ns4.serverstack.com       69.55.56.130                       SOA: ns1.serverstack.com
    2014040205     111   not currently available       ns1.serverstack.com       69.55.62.180                       SOA: ns1.serverstack.com
    2014040205     185   not currently available       ns2.serverstack.com       141.0.173.228                      SOA: ns1.serverstack.com
    2014040205     174   not currently available       ns3.serverstack.com       87.233.226.25                      SOA: ns1.serverstack.com

如果未刷新,您可能需要清除本地 DNS 缓存。负缓存 TTL 会让您获得新添加的记录。在本例中,xxx.com 的负 TTL 为 1800 秒,因此您只需等待 30 分钟,它就会自动清除。

这是一个常见问题。您更改 DNS 以添加新记录,然后立即查找该名称,而此时该名称还没有几分钟时间传播到所有名称服务器,因此您会在名称生效之前收到负面缓存条目,因此必须等待整整一段时间(30 分钟),或者刷新本地 DNS 缓存才能使其正常工作。

附言:对于那些因为我相信 xxx.com 是真实域名而责备我的人,请不要介意。我知道这是假的,但我的观点是保留真实域名,否则帮助是有限的。我和其他人一样讨厌猜测。大家使用真实域名吧。

相关内容