作者介紹:一位在簡歷上沒有標注精通的運維工程師。請點擊上方的藍色《運維小路》關注我,以下思維導圖展示了預計更新的內容和當前進度(不定時更新)。
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解析流程
-
用戶請求
用戶在應用程序(如瀏覽器、命令行等)中輸入域名,例如www.example.com。
-
查找本地緩存:
然而,這個緩存默認情況下是不可見的。我通過抓包測試連續兩次dns查詢,仍然需要向dns發出請求。因此,我對這個緩存一直持懷疑態度,但在實際運維中確實遇到過解析異常的情況。
-
查詢/etc/hosts文件:
如果本地緩存中找不到對應的IP地址,系統會檢查/etc/hosts文件。這個文件可以手動配置域名和IP地址的映射關系。如果在這里找到了,也會直接返回IP地址給應用程序。
-
向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地址。
-
DNS解析器查詢過程:
DNS服務器可以分為迭代和遞歸兩種:
迭代查詢:在迭代查詢中,當客戶端向DNS服務器查詢時,如果該服務器沒有存儲查詢的信息,它會將能夠提供信息的其他服務器的地址返回給客戶端,讓客戶端去那個服務器查找。也就是說,DNS服務器不會自己去查詢,而是告訴客戶端應該去哪里查找。
遞歸查詢:在遞歸查詢中,當客戶端向DNS服務器查詢時,如果該服務器沒有存儲查詢的信息,它會代表客戶端去其他服務器查詢,直到找到答案才返回給客戶端。在這個過程中,客戶端只需要等待最終結果,所有的查詢工作都由DNS服務器完成。
總結下來其實很簡單,迭代自己沒有答案,但是他會告訴你哪里有答案。遞歸他幫你去找到答案,然后告訴你答案。目前大部分dns都是遞歸。
-
解析結果返回:
DNS解析器將獲取到的IP地址返回給系統的resolver,并且緩存這個結果。同時,將IP地址返回給應用程序,應用程序可以繼續向該IP地址發送網絡請求。
-
應用程序通信:
應用程序拿到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是一個很核心的基礎服務,幾乎所有的業務請求都是通過域名來實現,這樣所有的請求都會通過dns才能正常使用。
-
有的程序并不會使用系統dns邏輯,而是程序自帶的dns邏輯,這樣就可能導致業務和實際預期不一樣的情況。