Linux基礎軟件-dns(一)

作者介紹:一位在簡歷上沒有標注精通的運維工程師。請點擊上方的藍色《運維小路》關注我,以下思維導圖展示了預計更新的內容和當前進度(不定時更新)。

Linux基礎軟件-dns(一)

linux進階部分包含多個小節,我們剛剛講解了Linux日常運維。這些內容都是系統自帶的,但作為服務器操作系統,Linux需要安裝運行軟件來滿足業務需求。本章將從以下幾個部分詳細講解基礎軟件:

Linux基礎軟件-軟件安裝

Linux基礎軟件-yum(一)

Linux基礎軟件-yum(二)

Linux基礎軟件-ntp

Linux基礎軟件-chrony

Linux基礎軟件-dns(一)(本節)

Linux基礎軟件-dns(二)

Linux基礎軟件-nfs

Linux基礎軟件-lvm

Linux基礎軟件-Selinux&庫文件&swap

在講解Linux運維-主機名&hosts時,我們提到可以通過hosts文件跳過dns解析。那么,什么是dns,為什么需要dns呢?本小節將詳細講解dns相關內容。

什么是dns?

DNS,全稱為“Domain Name System”或“域名系統”,是一種互聯網服務。它是一個分布式數據庫,用于將域名和IP地址相互映射,使人們更方便地訪問互聯網,而無需記住機器可識別的IP數字串。

為什么需要dns?

在互聯網上,每個連接網絡的設備都會被分配一個唯一的IP地址,可以將其視為互聯網上的電話號碼。當你想訪問一個網站時,實際上是向該網站服務器的IP地址發送請求。然而,IP地址是一串數字,對人類來說記憶困難。這時,DNS就發揮了作用,它將這些數字IP地址轉換為更易于記憶的域名,例如Linux默認情況下localhost代表本機IP地址。

例如,當你在瀏覽器中輸入www.qq.com時,你的計算機會首先詢問DNS服務器www.qq.com的IP地址,然后DNS服務器會返回對應的IP地址給你的計算機,之后你的計算機才能通過該IP地址訪問qq.com服務器。這個過程稱為DNS解析。

Linux的dns解析流程

  1. 用戶請求

    用戶在應用程序(如瀏覽器、命令行等)中輸入域名,例如www.example.com。

  2. 查找本地緩存:

    然而,這個緩存默認情況下是不可見的。我通過抓包測試連續兩次dns查詢,仍然需要向dns發出請求。因此,我對這個緩存一直持懷疑態度,但在實際運維中確實遇到過解析異常的情況。

  3. 查詢/etc/hosts文件:

    如果本地緩存中找不到對應的IP地址,系統會檢查/etc/hosts文件。這個文件可以手動配置域名和IP地址的映射關系。如果在這里找到了,也會直接返回IP地址給應用程序。

  4. 向DNS解析器發起查詢:

    如果本地緩存和/etc/hosts文件中都沒有找到對應的IP地址,系統會向預先配置的DNS解析器發起查詢請求。DNS解析器通常在/etc/resolv.conf文件中指定,例如:

    nameserver 223.5.5.5 nameserver 114.114.114.114

    這里的223.5.5.5和114.114.114.114是國內提供的公共dns,可以替換為其他DNS服務器的IP地址。

  5. DNS解析器查詢過程:

    DNS服務器可以分為迭代和遞歸兩種:

    迭代查詢:在迭代查詢中,當客戶端向DNS服務器查詢時,如果該服務器沒有存儲查詢的信息,它會將能夠提供信息的其他服務器的地址返回給客戶端,讓客戶端去那個服務器查找。也就是說,DNS服務器不會自己去查詢,而是告訴客戶端應該去哪里查找。

    遞歸查詢:在遞歸查詢中,當客戶端向DNS服務器查詢時,如果該服務器沒有存儲查詢的信息,它會代表客戶端去其他服務器查詢,直到找到答案才返回給客戶端。在這個過程中,客戶端只需要等待最終結果,所有的查詢工作都由DNS服務器完成。

    總結下來其實很簡單,迭代自己沒有答案,但是他會告訴你哪里有答案。遞歸他幫你去找到答案,然后告訴你答案。目前大部分dns都是遞歸。

  6. 解析結果返回:

    DNS解析器將獲取到的IP地址返回給系統的resolver,并且緩存這個結果。同時,將IP地址返回給應用程序,應用程序可以繼續向該IP地址發送網絡請求。

  7. 應用程序通信:

    應用程序拿到IP地址后,可以與目標服務器建立通信,發送http請求等操作。

Linux的dns配置文件

前面提到Linux的dns配置文件是/etc/resolv.conf,除了配置了dns服務器外,還有其他配置,它們分別是什么意思,如果遇到解析失敗會怎樣處理?

nameserver:就是dns服務器地址,最多可以寫3個。

search:搜索域,一般環境用不到,但在k8s中會在搜索svc時使用這個特性。大概意思是你查詢一個域名,如果沒查到解析,他再給你添加個后綴,再進行查詢。

options:

timeout:如果在設定時間未返回數據,則他會請求下一個dns服務器查詢。

attempts:如果所有dns都查詢了都失敗了,他在重復這個操作的次數。

如果你的dns解析很慢,可以注意看這2個參數。

Linux基礎軟件-dns(一)

總結

  1. Linux的dns是一個很核心的基礎服務,幾乎所有的業務請求都是通過域名來實現,這樣所有的請求都會通過dns才能正常使用。

  2. 有的程序并不會使用系統dns邏輯,而是程序自帶的dns邏輯,這樣就可能導致業務和實際預期不一樣的情況。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享