2018/09/19

[程式設計] Vultr 完全解決DNS無法解析的問題(Ubuntu)

用Vultr的VPS大約有3年了,最近常常出現DNS無法解析的問題,經過與Vultr官方一番論戰之後,還是打死不承認,以下我提供一個一勞永逸的方法。

上圖就是用MTR測試工具,對我的網站測試,屢屢出現失敗

[root@localhost ~]# mtr google.com

Failed to resolve host: Name or service not known

 

[root@localhost ~]# curl http://google.com

curl: (6) Could not resolve host: google.com; Name or service not known

 

[root@localhost ~]# ping google.com

ping: google.com: Name or service not known


當然這個狀況並非每次都會出現,所以我會建議你在測試的時候可以多測試幾個Domain,循環測試,只要解析出IP位址(IPv4 or IPv6)的時間超過1秒,就表示有問題囉,因為DNS Server全球的回應速度都小於10ms,正常解析出IP位置的時間大概就是這個速度!

例如:

[root@localhost ~]# ping google.com

[root@localhost ~]# ping www.google.com

[root@localhost ~]# ping facebook.com

[root@localhost ~]# ping www.facebook.com

[root@localhost ~]# ping m.me

[root@localhost ~]# ping fb.com

先說明一下怎麼發現這個問題,最近我寫的PHP程式對接一些有用到API的服務時,常常出現timeout(超時)的問題,但有時候又很正常,但大約每3次就會有1次失敗,例如LINE通知的API、Google Auth、Facebook API...等等都有這個問題,甚至金流系統、開發票系統也跟著受影響,對於我這種重度用戶,17台VPS,這幾天光是處理這些問題就弄到焦頭爛額了,畢竟誰會想到DNS會無法resolve。

先說明一下,這次說明的這台主機是Ubuntu的,如果有不太一樣的指令請自己Google看看;我第一個想到的方法就是去改 /etc/resolvconf/resolv.conf.d/head, 加入Google的DNS服務試試看

[root@localhost ~]# sudo vim    /etc/resolvconf/resolv.conf.d/head

nameserver 8.8.8.8
nameserver 8.8.4.4

[root@localhost ~]# sudo resolvconf -u

[root@localhost ~]# cat  /etc/resolv.conf

最後一行指令是看看resolv.conf這個檔案有沒有被修正成我改的,但我在中發現一件事,就是不管怎麼改,裡面最前面優先續都是127.0.0.53

這個就弔詭了,那到底127.0.0.53是指向哪邊呢?乍看起來是本機端另外有一個解DNS的服務?循著DNS解的線索,發現最終都會使用 108.61.10.10  這台Vultr內部預設使用的DNS NameServer....

Vultr官方給我的回信,建議我使用 108.61.10.10 這台DNS服務器,我現在卻認的是,不管我怎麼改,DNS解析服務都還是指向它,所以問題根本就是他們的問題吧!

回歸問題,我發現127.0.0.53指向   systemd-resolve 這個系統服務,那太好了,如果能夠改他的設定,我就能夠改用其他DNS了吧?

[root@localhost ~]# sudo vim    /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4

[root@localhost ~]# sudo service systemd-resolved restart

[root@localhost ~]# systemd-resolve --status

改這個設定的時候我發現,原本DNS這個欄位是被#(槓)起來的,也就是說根本沒被啟用,那為何會被強制指向108.61.10.10呢?

還是把他設定成 8.8.8.8 8.8.4.4 兩組Google的DNS比較穩定,重新啟動   systemd-resolve 這個服務就解決了這陣子DNS老是無法解析的問題了。

 

以下再提供一個 CentOS的修改方法

修改/etc/sysconfig/network-scripts/ifcfg-eth0

裡面修改

DNS1=8.8.8.8
DNS2=8.8.4.4
DNS3=1.1.1.1

 

最後總結,雖然Vultr很便宜,對我們這種重度使用者來說穩定度仍不及格,很多時候出問題都要靠自己發現,並且解決問題,官方幫不了什麼忙。

如果你跟我一樣能夠有獨立解決問題的精神,歡迎加入吧,從下面連結申請帳號將可以得到10美金的試用金,還是很值得使用!尤其是他提供日本的機房,對台灣的連線速度及品質真的非常棒!

沒有留言:

張貼留言