5種常見的 DNS 故障診斷及問題處理方法

本節(jié)模擬幾種導(dǎo)致 DNS 查詢變慢的場景,如果在實(shí)際環(huán)境中遇到類似現(xiàn)象,可以考慮往這些 方向排查汪诉。

1、機(jī)器未配置 DNS 導(dǎo)致域名查找失敗

現(xiàn)象:網(wǎng)絡(luò)是通的(例如 ping IP 通)谈秫,但是 DNS 查詢總是失敗

可能的原因:機(jī)器沒有配置 DNS 服務(wù)器

解決辦法:修改/etc/resolv.conf扒寄,給機(jī)器配置合適的 DNS 服務(wù)器 有時(shí)新啟動(dòng)的機(jī)器(不管是物理機(jī)、虛擬機(jī)還是容器)沒有設(shè)置 DNS拟烫,導(dǎo)致訪問域名不通该编。我們來復(fù)現(xiàn)一下。

在正常的容器里用 nslookup 工具查看域名對應(yīng)的 IP 地址:

/ # nslookup example.com

Name:? ? ? example.com

Address 1: 93.184.216.34

Address 2: 2606:2800:220:1:248:1893:25c8:1946

可以看到硕淑,我們獲取到了該域名一個(gè) IPv4 地址和一個(gè) IPv6 地址课竣。

將/etc/resolv.conf 里的 DNS 服務(wù)器列表用#注釋掉,模擬沒有配置 DNS 服務(wù)器的場景置媳。

再次測試:

/ # nslookup example.com

nslookup: can't resolve 'example.com': Try again

所以遇到這種問題于樟,可以先去排查/etc/resolv.conf 里面是否配置了 DNS 服務(wù)器。

2拇囊、DNS 服務(wù)太慢

現(xiàn)象:DNS 查詢太慢

可能的原因:配置的 DNS 服務(wù)器不合理

解決辦法:修改/etc/resolv.conf隔披,配置合適的 DNS 服務(wù)器

每個(gè)公司一般都有自維護(hù)的 DNS 服務(wù)器,不僅用來解析內(nèi)網(wǎng) DNS寂拆,而且可以加速解析公網(wǎng)域名 奢米。

dig 是另外一個(gè)功能更強(qiáng)大的 DNS 查詢工具,安裝:

/ # apk update && apk add bind-tools

首先查看使用內(nèi)網(wǎng) DNS纠永,查詢域名的延遲:

/ # dig example.com

...

example.com.? ? ? ? ? ? 15814? IN? ? ? A? ? ? 93.184.216.34

;; Query time: 0 msec

;; SERVER: 192.168.1.11#53(192.168.1.11)

可以看到非橱蕹ぃ快,在 1ms 以內(nèi)尝江。

然后我們測試如果使用 Google 的公網(wǎng) DNS 服務(wù)器 8.8.8.8 [1]涉波,延遲會(huì)是多少。

修改/etc/resolv.conf,將其他 nameserver 注釋掉啤覆,添加一行 nameserver 8.8.8.8苍日。

再次測試:

/ # dig example.com

...

example.com.? ? ? ? ? ? 15814? IN? ? ? A? ? ? 93.184.216.34

;; Query time: 150 msec

;; SERVER: 8.8.8.8#53(8.8.8.8)

延遲變成了 150ms,比原來大了 150 多倍窗声。

因此相恃,對于 DNS 查詢特別慢的場景,首先要查看配置的 DNS 服務(wù)器是否合理笨觅。

3拦耐、hardcode /etc/hosts 導(dǎo)致跳過 DNS 查詢

現(xiàn)象:某域名訪問太慢、某域名總是指向相同 IP(多 IP 情況下)见剩、特定機(jī)器不可訪問 某域名等等

可能的原因:/etc/hosts 有 hardcode 域名及 IP

解決辦法:修改/etc/hosts

前面提到杀糯,大部分公網(wǎng)域名都對應(yīng)多個(gè) IP 地址,因此每次 DNS 查詢拿到的 IP 地址都可能不一 樣苍苞,我們用 ping 來測試一下:

/ # ping baidu.com

PING baidu.com (220.181.57.216): 56 data bytes

64 bytes from 220.181.57.216: seq=0 ttl=45 time=26.895 ms

64 bytes from 220.181.57.216: seq=1 ttl=45 time=26.701 ms

^C

/ # ping baidu.com

PING baidu.com (123.125.115.110): 56 data bytes

64 bytes from 123.125.115.110: seq=0 ttl=43 time=27.587 ms

64 bytes from 123.125.115.110: seq=1 ttl=43 time=27.757 ms

^C

可以看到固翰,兩次 ping 測試(內(nèi)部首先查詢?http://baidu.com?對應(yīng)的 IP 地址)拿到的 IP 地址是不一樣 的。用 nslookup 可以看到它們都是?http://baidu.com?對應(yīng)的 IP 地址:

/ # nslookup baidu.com

Name: baidu.com

Address: 220.181.57.216

Name: baidu.com

Address: 123.125.115.110

/etc/hosts 里面可以直接 harcode 一個(gè)域名對應(yīng)的 IP 地址羹呵,這會(huì)導(dǎo)致機(jī)器跳過 DNS 查詢倦挂,直接拿這個(gè) IP 作 為該域名的 IP。我們來驗(yàn)證一下担巩。

修改/etc/hosts方援,添加一行 123.125.115.110?http://baidu.com,再次 ping 測試

/ # ping baidu.com

PING baidu.com (123.125.115.110): 56 data bytes

64 bytes from 123.125.115.110: seq=0 ttl=43 time=27.861 ms

^C

--- baidu.com ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max = 27.861/27.861/27.861 ms

/ # ping baidu.com

PING baidu.com (123.125.115.110): 56 data bytes

64 bytes from 123.125.115.110: seq=0 ttl=43 time=27.614 ms

^C

這是不管執(zhí)行多少次涛癌,http://baidu.com?對應(yīng)的 IP 地址都不會(huì)變了犯戏。而實(shí)際上,這個(gè) IP 地址并不一定是最優(yōu)的 IP 地址拳话,甚至有可能這 個(gè) IP 不可用先匪,導(dǎo)致訪問?http://baidu.com?失敗。因此弃衍,實(shí)際中要極力避免在/etc/hosts 中 hardcode呀非。

4、DNS 查詢不穩(wěn)定

現(xiàn)象:DNS 查詢不穩(wěn)定镜盯,時(shí)快時(shí)慢

可能的原因:機(jī)器上有 tc 或 iptables 規(guī)則岸裙,導(dǎo)致到 DNS 服務(wù)器的 packet 變慢或丟失

解決辦法:修改或刪除 tc/iptables 規(guī)則

我們用 tc 來模擬網(wǎng)絡(luò)延遲:

/ # apk add iproute2

首先查看有沒有 tc 規(guī)則:

/ # tc -p qdisc ls dev eth0

默認(rèn)沒有任何規(guī)則。

然后我們加一條:每個(gè) packet 延遲 600ms:

/ # tc qdisc add dev eth0 root netem delay 600ms

/ # tc -p qdisc ls dev eth0

/ # qdisc netem 8001: root refcnt 2 limit 1000 delay 600.0ms

測試:

/ # dig example.com

...

example.com.? ? ? ? ? ? 15814? IN? ? ? A? ? ? 93.184.216.34

;; Query time: 600 msec

;; SERVER: 192.168.1.11#53(192.168.1.11)

可以看到速缆,DNS 查詢變成了 600ms降允。

這里我們測試的是固定延遲,這種問題很容易發(fā)現(xiàn)艺糜。我們還可以測試隨機(jī)延遲剧董,或者按 比例延遲等 [2]:

/ # tc qdisc change dev eth0 root netem delay 600ms 10ms 25%

/ # tc qdisc change dev eth0 root netem delay 600ms 20ms distribution normal

此類規(guī)則會(huì)導(dǎo)致 DNS 查詢速度更有隨機(jī)性幢尚。

最后刪除 tc 規(guī)則:

/ # tc qdisc del dev eth0 root

iptables 規(guī)則也會(huì)導(dǎo)致類似的問題。

很多軟件在運(yùn)行之后翅楼,會(huì)在宿主機(jī)上添加 tc 或 iptables 規(guī)則尉剩,例如 OpenStack,K8S 等等 毅臊。因此遇到這種隨機(jī)延遲問題理茎,首先可以查看機(jī)器上是否有 tc 或 iptables 規(guī)則。

5褂微、DNS 反向查詢不穩(wěn)定

線上遇到過這樣一個(gè)問題:從一臺(tái)機(jī)器 ping 一個(gè)內(nèi)網(wǎng)域名,每個(gè) ping 包看起來都會(huì)卡 5 ~ 30s 不等园爷,但是 CTL-C 關(guān)閉 ping 之后宠蚂,打印出來的統(tǒng)計(jì)信息里,既沒有丟包童社,ping 的延遲也很低 (毫秒級(jí))求厕,這就很奇怪。接下來:

dig扰楼,很快呀癣,毫秒級(jí),說明 DNS 查詢沒有問題

dig 能看到域名對應(yīng)的 IP弦赖,直接 ping 這個(gè) IP项栏,發(fā)現(xiàn)是沒有卡頓的

仍然 ping 域名,用 tcpdump 抓包蹬竖,tcpdump -i eth0 hostand icmp沼沈,發(fā)現(xiàn) ping 包都是立即響應(yīng)的,印證了統(tǒng)計(jì)信息里币厕,ping 延遲很低的事實(shí)

根據(jù)以上信息列另,說明 ping 卡頓的問題出在這臺(tái)機(jī)器,而且應(yīng)該就是 ping 程序本身在做什么耗 時(shí)的操作旦装。繼續(xù):

仍然 ping 域名页衙,同時(shí),用 ltrace -p跟蹤 ping 進(jìn)程阴绢,發(fā)現(xiàn)卡在一個(gè)叫 gethostbyaddr()的函數(shù)

查閱文檔店乐,發(fā)現(xiàn)這個(gè)函數(shù)是根據(jù) IP 反向查詢 hostname,需要和 DNS 交互

到這里呻袭,基本確定了是 DNS 服務(wù)器反向查詢的問題响巢,我們用另外幾個(gè)命令行工具驗(yàn)證一下, 以下三個(gè)命令都是根據(jù) IP 反查 hostname:

nslookup

host

dig -x

果然棒妨,以上三個(gè)命令都會(huì)卡住踪古。修改/etc/resolv.conf含长,換一個(gè) DNS 服務(wù)器之后,問題 消失了伏穆。接下來拘泞,就去查 DNS 服務(wù)器的問題吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枕扫,一起剝皮案震驚了整個(gè)濱河市陪腌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烟瞧,老刑警劉巖诗鸭,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異参滴,居然都是意外死亡强岸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門砾赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝌箍,“玉大人,你說我怎么就攤上這事暴心〖嗣ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵专普,是天一觀的道長悯衬。 經(jīng)常有香客問我,道長檀夹,這世上最難降的妖魔是什么甚亭? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮击胜,結(jié)果婚禮上亏狰,老公的妹妹穿的比我還像新娘。我一直安慰自己偶摔,他們只是感情好暇唾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辰斋,像睡著了一般策州。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宫仗,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天够挂,我揣著相機(jī)與錄音,去河邊找鬼藕夫。 笑死孽糖,一個(gè)胖子當(dāng)著我的面吹牛枯冈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播办悟,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼尘奏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了病蛉?” 一聲冷哼從身側(cè)響起炫加,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铺然,沒想到半個(gè)月后俗孝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魄健,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年赋铝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诀艰。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柬甥,死狀恐怖饮六,靈堂內(nèi)的尸體忽然破棺而出其垄,到底是詐尸還是另有隱情,我是刑警寧澤卤橄,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布绿满,位于F島的核電站,受9級(jí)特大地震影響窟扑,放射性物質(zhì)發(fā)生泄漏喇颁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一嚎货、第九天 我趴在偏房一處隱蔽的房頂上張望橘霎。 院中可真熱鬧,春花似錦殖属、人聲如沸姐叁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外潜。三九已至,卻和暖如春挠唆,著一層夾襖步出監(jiān)牢的瞬間处窥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工玄组, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滔驾,地道東北人谒麦。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像嵌灰,于是被迫代替她去往敵國和親弄匕。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容