網站時好時壞並且出現找不到伺服器 IP 位址的分析方法

Network

上週小編在公司不是因為新服務上線遇到了 AWS ELB STICKY SESSIONS 的問題嗎?
結果在最近測試系統又遇到了問題了 QQ … (這服務上線怎麼這麼坎坷 …)

先來跟大家說說遇到了什麼問題,
首先是打開網頁的時候 “有機會” 出現如下畫面,
有時候又正常

如上圖,小編以一個一定錯誤的網站來舉例子。

這時候就覺得很奇怪,為什麼有時候正常有時候失敗,看系統的 Log 又沒有什麼異樣,就想到這個系統是使用客戶的 DNS Server,因此可能是 DNS Server 有問題,我的習慣我會先查詢一下 DNS 的狀態,以下以小編的 Blog 為例子 (現在應該是正常的拉!),模擬操作兩次卻拿到不依樣的結果,而且回應的 A 紀錄是空的:

clarence~: dig @8.8.8.8 blog.clarence.tw
; <<>> DiG 9.10.6 <<>> @8.8.8.8 blog.clarence.tw
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43396
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;blog.clarence.tw. IN A
;; ANSWER SECTION:
blog.clarence.tw. 299 IN A 104.31.80.250
blog.clarence.tw. 299 IN A 104.31.81.250
;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 20 00:00:00 CST 2019
;; MSG SIZE rcvd: 77
clarence~: dig @8.8.8.8 blog.clarence.tw
; <<>> DiG 9.10.6 <<>> @8.8.8.8 blog.clarence.tw
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27880
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;error.clarence.tw. IN A
;; AUTHORITY SECTION:
clarence.tw. 1799 IN SOA graham.ns.cloudflare.com. dns.cloudflare.com. 2030628787 10000 2400 604800 3600
;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 20 00:00:00 CST 2019
;; MSG SIZE rcvd: 110
view raw sample-1.sh hosted with ❤ by GitHub

這時候小編就覺得這個地方有問題,就去找這個 Domain 的 NS Server 位置,查詢的方法如:

clarence~: dig @8.8.8.8 ns clarence.tw
; <<>> DiG 9.10.6 <<>> @8.8.8.8 ns clarence.tw
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32983
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;clarence.tw. IN NS
;; ANSWER SECTION:
clarence.tw. 86400 IN NS graham.ns.cloudflare.com.
clarence.tw. 86400 IN NS ulla.ns.cloudflare.com.
;; Query time: 32 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 1 00:00:00 CST 2019
;; MSG SIZE rcvd: 97
view raw sample-2.sh hosted with ❤ by GitHub

由上可以看到小編的 NS Server 為:graham.ns.cloudflare.com 與 ulla.ns.cloudflare.com,通常來說都會有兩台以上的 NS Server,如果是自己架設的 DNS Server 可能就會是 ns1.domain.com 與 ns2.domain.com 是比較常見的架構,剛好小編遇到的客戶就是這種命名方法。

如 Google 的 DNS 位置就是以這種方法命名

clarence~: dig @8.8.8.8 ns google.com
; <<>> DiG 9.10.6 <<>> @8.8.8.8 ns google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1239
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com. IN NS
;; ANSWER SECTION:
google.com. 21599 IN NS ns2.google.com.
google.com. 21599 IN NS ns4.google.com.
google.com. 21599 IN NS ns1.google.com.
google.com. 21599 IN NS ns3.google.com.
;; Query time: 10 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 20 00:00:00 CST 2019
;; MSG SIZE rcvd: 111
view raw sample-3.sh hosted with ❤ by GitHub

這時候我們拿到了 NS Server 的位置後就可以直接去問他的 DNS Server 我們剛剛查詢不正常的 Domain 是發生什麼事情了,分為對兩台 DNS Server 發送我們目標 Domain 的請求,如下為請求方法:

clarence~: dig @graham.ns.cloudflare.com blog.clarence.tw
; <<>> DiG 9.10.6 <<>> @graham.ns.cloudflare.com blog.clarence.tw
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5440
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;blog.clarence.tw. IN A
;; ANSWER SECTION:
blog.clarence.tw. 300 IN A 104.31.81.250
blog.clarence.tw. 300 IN A 104.31.80.250
;; Query time: 7 msec
;; SERVER: 173.245.59.171#53(173.245.59.171)
;; WHEN: Sat Apr 20 21:18:10 CST 2019
;; MSG SIZE rcvd: 77
clarence~: dig @ulla.ns.cloudflare.com blog.clarence.tw
; <<>> DiG 9.10.6 <<>> @ulla.ns.cloudflare.com blog.clarence.tw
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27880
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;error.clarence.tw. IN A
;; AUTHORITY SECTION:
clarence.tw. 1799 IN SOA graham.ns.cloudflare.com. dns.cloudflare.com. 2030628787 10000 2400 604800 3600
;; Query time: 35 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 20 00:00:00 CST 2019
;; MSG SIZE rcvd: 110
view raw sample-4.sh hosted with ❤ by GitHub

由上可以看出我們用它的第二台 NS Server 問到的結果不如預期,因此可以猜測問題可能是 NS Server 不同步所以造成網站時好時壞。

以上只是以小編在公司發生網站時好時壞,並且瀏覽器又出現 “找不到伺服器 IP 位址” 情況的一個例子,小編當時花了點時間尋找這個問題的原因,所以就寫一篇 Blog 紀錄一下拉 ~