您才刚将域名连结上您的网站,或是一个全新的电子信箱服务,又或是另外一项需要更新您的 DNS 区域档的操作,但是…就是无法正常运作吗?

将电脑丢出窗外之前,先深吸一口气,再确认一下 DNS 常见的失效原因的清单。以下为五大因素:

1. DNS 缓存

您可以对 DNS 进行变更但却没有立即看到它生效的最常见和最容易被误解的原因之一就是缓存。

先不深入探讨究竟整个域名系统是如何运作的细节,我们可以说是一个分散式的分层系统,其设计坚固耐用您的电脑可以在这个系统中称为解析器的伺服器(此解析一般为您的网路服务供应商管理)请求回应 DNS 查询,若解析在缓存中已经有相关纪录,直接回应您的电脑,不需要一路向答案源头查询—其前提为缓存未「过期」。

这意思是,若您您的电脑开启您的域名,更新 DNS 纪录域名指向一个不同 IP 位址的新网站,接着在同一部电脑上再次开启您的域名,您很可能会因为缓存的关係而仍旧连上原先的旧网站。

一旦缓存到期,您的域名就会连上新的网站。但也因为缓存到期要看见新的 DNS 纪录所需时间会出现「延迟」。

「 DNS 传播」导致延迟是一个常见的误解其指的是 DNS 主动将其更新内容「传送」至世界各地的伺服器,个说法是不正确且具有误导性的。

事实上 DNS 纪录因之前已被查询过而存在于解析器中的缓存。

关于 DNS 缓存,您可以做什麽呢?

1. 等待

如果你不赶时间,您可以直接等待缓存失效。若您知道关于您所更新的旧 DNS 纪录的一项关键数据将会更有帮助:那就是生存时间(以下简称 TTL)。它会 DNS 解析器指要将纪录保留缓存中的时间。在 DNS 纪录中,TTL 是以秒计算。但有一个问题是,解析并不会一直遵守 TTL 所规范的时间。也就是说,即使 TTL 的时间较短您还是有可能需要等待 3 到 24 小时的时间能看到您更新 DNS 纪录。如果您没有时间等待,那可以…

2. 尝试使用不同的网路

由于使用的 DNS 解析器是与您的网路服务供应商相连结, 如果您尝试关闭您的智慧型手机上的 WiFi 来开启您的域名,您应该就能够看到新的 DNS 纪录(前提是您近期没有在您的手机上开启您的域名)。

3. 直接从终端机查询伺服器

若您知道如何透过终端机「查询 ( dig ) 」,您可以直接加上「@」以及您的其中一个名称伺服器来直接查询名称伺服器,例如:
$dig example.com @ns1.example.com
如果您可以排除缓存这个原因的话,也可能会是其的问题,像是…

2. 多个 A 纪录

A 纪录是用来指向与您的网站相连的 IP 位址 CNAME 纪录相反,CNAME 纪录会将您的域名映射到另外一个域名。这两项纪录的差别在于您只能在特定的子域名上拥有一个 CNAME 记录(事实上如果您的子域名上已经有一个 CNAME 纪录,您就无法在该子域名使用其它类型的纪录),但您却可以 A 纪录。

有可能的情况是,您的 DNS 更新内容涉及 A 记录的更新,您实际上只添加了一个新的 A 记录并将旧的记录留在原处

让这个错误更加难以判断的原因是,有时候您电脑查询时会得到一个 A 纪录的回,而有时候则得到另外一个 A 纪录的回如果不同的 IP 位址服务于不同的网站,就会發生有时候指向其中一个网站,有时候指向另外一个网站的情况

还有另外一个转折IP 位址系统正在由版本 4 ( v4 ) 移转至版本 6 ( v6 ) 的过程中。 问题在于 v4 的 IP 位址(又称为 IPv4 )太小而且数量不够。而 IPv6 相对。DNS 的问题在于您不能使用使用带有 IPv6 位址的常规 A 记录

就是因为这个原因,您需要使用 AAAA 纪录。

这也就是为什麽此项错误较难排除的原因。如果您只有更新  A 纪录而未更新  AAAA 纪录的话,很显然地您的更新无法成功运作。

3. 您更新了错误的 DNS 伺服器

无论是与您的基础设施团队在沟通有误会、出于习惯,或是单纯健忘,您都有可能在错误的 DNS 伺服器上更新您的 DNS 纪录。

也许不久前移了域名但没有一併向您的新的域名註册商更新您的名称伺服器,或是您意外地更新了名称伺服器。

也有可能您使用像是 CloudFlare 的 DNS 服务,但却在您的域名註册商或以前合作过 DNS 供应商那裡更新您的 DNS 伺服器,反之亦然。

可能就会导致您的修改于网路中消失

您的域名註册商域名管理介面确认使用的是哪种名称伺服器,以确保您在正确的位置进行更新。 

4. 您忘记结尾处加上一个

DNS 纪录的一个微妙之处在于它们的特语法。而该特定语法产生的许多问题大多能安全地自动校正,但有一个问题除外,就是必须在 CNAME 纪录指向的域名结尾处上一个点。

这是因为一个 CNAME 纪录能够将您的域名映射至一个内部域名(同样于您的域名上)或是一个外部域名(或是完全不同的域名上)。

考虑到这点,如果一个 CNAME 纪录是指向外部域名,CNAME 纪录的域名值就必须以一个点作为结尾。若没有在 CNAME 纪录的结尾处加上一个点, DNS 系统就会理解成您的域名的其馀部分才是结尾

举例来说:

www 300 IN CNAME foo.example.net.

会将 example.com 指向至 foo.example.net.

但如果您入的内容为:

www 300 IN CNAME foo.example.net

此 example.com 域名则会指向 foo.example.net.example.com.

5. 域名已经过期或是被停用

最后,您的 DNS 无法运作的最后一个可能原因是您的域名已经期了。这会导致您的域名无法正常解析(换句话说,您会看到的是一个错误讯息,而不是原本的网站)。

而另一个可能原因是您的域名被停用了,例如该域名牵涉法律相关问题

若是域名已经期了,您可以在域名管理介面中确认。而若您的域名被停用,唯一确认其是否为造成您的 DNS 无法运作的原因就是透过 Whois 查询服务来确认「域名状态」是否为「 clientHold 」或是「serverHold」,并联繫您的域名註册商来解决问题。

结语

如果您更新了 DNS 纪录却没有正常运作,在您大發雷霆之前先确认上述五项常见的 DNS 问题吧。当然,如果您的域名是在 Gandi 註册,您可以随时与我们的技术客服联繫,他们将协助您解决问题。您只需要在 help.gandi.net 中开立客服单即可。