當前位置:
首頁 > 最新 > Linux DNS 查詢剖析 Linux 中國

Linux DNS 查詢剖析 Linux 中國

在第二部分中,我將介紹 resolv.conf 的更新機制、systemctl restart networking 命令的運行機制 ,以及 dhclient 是如何參與其中。

-- Zwischenzugs

致謝

編譯自 |

https://zwischenzugs.com/2018/06/18/anatomy-of-a-linux-dns-lookup-part-ii/

作者 | Zwischenzugs

譯者 | Andy Song (pinewall) 共計翻譯:32篇 貢獻時間:151 天

在Linux DNS 查詢剖析 - 第一部分

[1]

中,我介紹了:

?

?

?

? 與 查詢方式對比

並且發現大多數程序選擇要查詢的 DNS 伺服器時會參考 配置文件。

這種方式在 Linux 上比較普遍1。雖然我使用了特定的發行版 Ubuntu,但背後的原理與 Debian 甚至是那些基於 CentOS 的發行版有相通的地方;當然,與更低或更高的 Ubuntu 版本相比,差異還是存在的。

也就是說,接下來,你主機上的行為很可能與我描述的不一致。

在第二部分中,我將介紹 的更新機制、 命令的運行機制 ,以及 是如何參與其中。

1) 手動更新 /etc/resolv.conf

我們知道 (有極大的可能性)被用到,故你自然可以通過該文件增加一個 ,那麼主機也將會(與已有的 一起)使用新加入的 吧?

你可以嘗試如下:

看上去新的 已經加入:

但主機網路服務重啟後問題出現了:

我們的 的 不見了!

在上一篇文章中我們忽略了這一點,本文進行補充說明。

2) resolvconf

你在 文件中看到 片語了吧?這就是我們的線索。

如果深入研究 命令,你會發現它做了很多事情,結束時調用了 腳本。在該腳本中,可以發現一次對 命令的調用:

稍微研究一下 man 手冊,發現 參數允許我們:

(增加或覆蓋 IFACE.PROG 記錄,如果開啟更新選項,則運行更新腳本)

故而也許我們可以直接調用該命令增加 :

測試表明確實可以!

是否已經找到答案,這就是 更新的邏輯?調用 將 添加到某個地方的資料庫,然後(「如果配置了更新」,先不管具體什麼含義)更新 文件。

並非如此。

呃!(網路服務重啟後)新增的 再次消失了。

可見, 不僅僅運行了 ,還在其它地方獲取 信息。具體是哪裡呢?

3) ifup/ifdown

繼續深入研究 ,發現它完成了一系列工作:

首先,網路服務的重啟實質是運行一個單觸發oneshot的腳本,腳本包含如下命令:

第一行使用 關閉全部的網路介面,但本地迴環local, lo介面除外。2

(LCTT 譯註:其實這是因為很快就又啟動了介面,間隔的時間沒有超過 TCP 連接的超時時間,有人在評論中也做了類似回復)

第二行用於確認系統已經完成關閉網路介面相關的全部工作,以便下一步使用 啟動介面。這也讓我們了解到,網路服務實質運行的就是 和 。

文檔中沒有找到 參數的說明,該參數為 正常工作所需。很多人以文檔不完善為由不喜歡 。

很好。那麼 (和其成對出現的 ) 到底做了哪些工作呢?長話短說,它運行了 和 目錄下的全部腳本;期間,這些腳本也可能會調用另外的腳本,依此類推。

其中一件工作就是運行了 ,但我還不完全確定具體的機理,也許 參與其中。

4) dhclient

是一個程序,用於與 DHCP 伺服器協商對應網路介面應該使用的 IP 地址的詳細信息。同時,它也可以獲取可用的 DNS 伺服器並將其替換到 中。

讓我們開始跟蹤並模擬它的行為,但僅在我實驗虛擬機的 介面上。事先已經刪除 文件中的 nameserver 配置:

可見這就是 的來源。

但稍等一下,命令中的 是哪個文件,不應該是 嗎?

事實上, 並不一定只是一個普通文本文件。

在我的虛擬機上,它是一個軟鏈接,指向位於 目錄下的「真實文件」。這也暗示了我們,該文件是在系統啟動時生成的;同時,這也是該文件注釋告訴我們不要直接修改該文件的原因。

(LCTT 譯註:在 CentOS 7 中,沒有 命令, 也不是軟鏈接)

假如上面命令中 命令直接處理 文件,效果是不同的,會有警告消息告知待操作的文件不能是軟鏈接( 無法很好的處理軟鏈接,它只會創建一個新文件)。

(LCTT 譯註:CentOS 7 測試時, 命令操作軟鏈接並沒有警告,但確實創建了新文件取代軟鏈接)

如果你繼續深入查看配置文件 的 部分,你會發現 可以覆蓋 DHCP 提供的 DNS 伺服器。

(大致)準確的關係圖

第二部分的結束語

第二部分到此結束。信不信由你,這是一個某種程度上簡化的流程版本,但我盡量保留重要和值得了解的部分,讓你不會感到無趣。大部分內容都是圍繞實際腳本的運行展開的。

但我們的工作還沒有結束,在第三部分,我們會介紹這些之上的更多層次。

讓我們簡要列出我們已經介紹過的內容:

?

?

?

?

? 和網路服務

? 和

?

?

1.事實上,這是相對於 POSIX 標準的,故不限於 Linux (我從上一篇文章的一條極好的回復

[2]

中了解到這一點)?

2.我不明白為何這沒有導致我例子中的 vagrant 會話中斷 (有誰明白嗎?)。?

via:https://zwischenzugs.com/2018/06/18/anatomy-of-a-linux-dns-lookup-part-ii/

作者:ZWISCHENZUGS

[4]

譯者:pinewall

校對:wxy

本文由LCTT原創編譯,Linux中國榮譽推出


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux中國 的精彩文章:

獻給寫作者的 Linux 工具
精心布局的開源

TAG:Linux中國 |