您才剛將域名連結上您的網站,或是一個全新的電子信箱服務,又或者是另外一項需要更新您的 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 中開立客服單即可。
Tagged in DNS