/etc/resolv.conf 中的第二個名稱伺服器沒有被 wget 拾取
我的 resolv.conf 看起來像這樣:
; generated by /sbin/dhclient-script search mcdc nameserver 10.0.4.48 nameserver 8.8.8.8
如果我這樣做的
nslookup www.google.com
話nslookup www.google.com ;; Got SERVFAIL reply from 10.0.4.48, trying next server Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.google.com canonical name = www.l.google.com.
但是當我 curl www.google.com 時,它無法解析主機。
我嘗試在 strace 下執行 curl,發現 curl 只使用了 resolv.conf 中的第一個名稱伺服器,而不是第二個。如果我切換兩個名稱伺服器行,www.google.com 會解析,但內部 DNS 名稱不會,所以這不是一個好的解決方法。
如何修復 resolv.conf 以使用兩個名稱伺服器?
resolv.conf 和解析器的預設行為是按列出的順序嘗試伺服器。如果第一個名稱伺服器超時,解析器只會嘗試下一個名稱伺服器。resolv.conf 聯機幫助頁說:
名稱伺服器 名稱伺服器 IP 地址
解析器應查詢的名稱伺服器的 Internet 地址(以點表示法)。最多可以列出 MAXNS 個(目前為 3 個,請參閱 )名稱伺服器,每個關鍵字一個。 如果有多個伺服器,則解析器庫會按列出的順序查詢它們。
和:
(使用的算法是嘗試一個名稱伺服器,如果查詢超時,則嘗試下一個,直到名稱伺服器用完,然後重複嘗試所有名稱伺服器,直到達到最大重試次數。)
另請參閱resolver(5)手冊頁以獲取更多資訊。
您可以使用 更改解析器的行為
rotate
,這將按循環順序查詢名稱伺服器:rotate 在 _res.options 中設置 RES_ROTATE,這會導致從列出的名稱伺服器中循環選擇名稱伺服器。這具有在所有列出的伺服器之間分散查詢負載的效果,而不是讓所有客戶端每次都首先嘗試第一個列出的伺服器。
SERVFAIL
但是,如果 nslookup從第一個名稱伺服器接收到 a,它將使用第二個名稱伺服器。從nslookup 聯機幫助頁:$$ no $$失敗 如果名稱伺服器以 SERVFAIL 或引用 (nofail) 響應或在此類響應上終止查詢 (fail),請嘗試下一個名稱伺服器。 (預設 = 不失敗)