<code id="8ka2b"></code>
<th id="8ka2b"></th>
<em id="8ka2b"></em>

<li id="8ka2b"><acronym id="8ka2b"><kbd id="8ka2b"></kbd></acronym></li>
    <dd id="8ka2b"><pre id="8ka2b"></pre></dd>
    1. <dd id="8ka2b"></dd>

        <ol id="8ka2b"><object id="8ka2b"><blockquote id="8ka2b"></blockquote></object></ol>

        千鋒教育-做有情懷、有良心、有品質的職業教育機構

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領取全套視頻
        千鋒教育

        關注千鋒學習站小程序
        隨時隨地免費學習課程

        【熱點話題】 零基礎學IT IT學習教程 IT學習筆記 IT技術干貨 IT培訓機構 IT應聘面試 IT職場就業 Java培訓機構哪些好
        當前位置:首頁  >  關于學院  >  技術干貨  > DNS故障診斷及問題分析示例

        DNS故障診斷及問題分析示例

        來源:千鋒教育
        發布人:wjy
        時間: 2023-01-11 10:36:48 1673404608

          1、DNS基礎知識

          互聯網基于 TCP/IP 協議。為了方便管理網絡內的主機,整個互聯網分為若干個域 (domain),每 個域又可以再分為若干個子域,例如,.com,.org,.edu 都是頂級域,而 google.com 是.com 下面的子域。

          網絡中的任意一臺主機(host)都會屬于某個域,并且有自己的名字,稱為主機名( hostname)。例如 example.com 就是.com 域中一臺主機名為 example.com(或 example,hostname 和 domain name 的區別,見這里 )的主機。

          域名/主機名是為了方便人記憶,而機器之間通信最終用的還是 IP 地址,因此需要一個將主 機名(域名)轉換成 IP 地址的服務。域名服務系統(DNS, domain name system)做的就是 這個事情,對應的服務器稱為域名服務器(Domain Name Server)。

          例如,當通過瀏覽器訪問 example.com,瀏覽器會首先訪問 DNS 服務器,查找 example.com 對應的 IP 地址,然后和這個 IP 建立 TCP 連接,接下來才發起 HTTP 請求。一個域名可以對應一個 IP 地址,也可以對應多個。對于后者,DNS 服務算法會從中選擇一個 地址返回。大部分網絡服務為了實現高可用,都是對應多個地址,我們后面會看到, baidu.com 就對應多個 IP。

          有一些場景會導致訪問 DNS 服務不穩定,例如 DNS 服務器的設置有問題、網絡有丟包、主機 DNS 配置錯誤等等。我們接下來查看幾種 case。

          2、準備測試環境

          為方便大家跟著上手練習,本文將搭建一個容器環境。

          Pull Docker 鏡像:

        DNS故障診斷及問題分析示例1

          運行容器,注意這里一定要帶--privileged 參數 [2],否則后面的部分 tc 命令無法執行:

        DNS故障診斷及問題分析示例2

          進入容器:

        DNS故障診斷及問題分析示例3

          查看容器網絡信息:

        DNS故障診斷及問題分析示例4

          3、DNS配置

          3.1 查看 DNS 配置

          Linux 上的 DNS 配置在/etc/resolv.conf 里面。我們先來查看容器的配置:

        DNS故障診斷及問題分析示例5

          這其實是繼承了宿主機的 DNS 配置,在宿主機上執行 cat /etc/resolv.conf 會看到一樣的 結果。

          3.2 修改 DNS 配置

          可以通過修改/etc/resolv.conf 里面的 nameserver 來配置自己想用的 DNS 服務器。例如內網環境可能都會使用自己的 DNS 服務器,因為它除了 提供內網域名解析之外,公網域名解析也會比較快(相比于網絡供應商的公網 DNS 服務器)

          4、DNS問題排查

          本節模擬幾種導致 DNS 查詢變慢的場景,如果在實際環境中遇到類似現象,可以考慮往這些 方向排查。

          4.1 機器未配置 DNS 導致域名查找失敗

          現象:網絡是通的(例如 ping IP 通),但是 DNS 查詢總是失敗

          可能的原因:機器沒有配置 DNS 服務器

          解決辦法:修改/etc/resolv.conf,給機器配置合適的 DNS 服務器 有時新啟動的機器(不管是物理機、虛擬機還是容器)沒有設置 DNS,導致訪問域名不通。我們來復現一下。

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

        DNS故障診斷及問題分析示例6

          可以看到,我們獲取到了該域名一個 IPv4 地址和一個 IPv6 地址。

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

          再次測試:

        DNS故障診斷及問題分析示例7

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

          4.2 DNS 服務太慢

          現象:DNS 查詢太慢

          可能的原因:配置的 DNS 服務器不合理

          解決辦法:修改/etc/resolv.conf,配置合適的 DNS 服務器

          每個公司一般都有自維護的 DNS 服務器,不僅用來解析內網 DNS,而且可以加速解析公網域名 。

          dig 是另外一個功能更強大的 DNS 查詢工具,安裝:

        DNS故障診斷及問題分析示例8

          首先查看使用內網 DNS,查詢域名的延遲:

        DNS故障診斷及問題分析示例9

          可以看到非???,在 1ms 以內。

          然后我們測試如果使用 Google 的公網 DNS 服務器 8.8.8.8 [1],延遲會是多少。

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

          再次測試:

        DNS故障診斷及問題分析示例10

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

          因此,對于 DNS 查詢特別慢的場景,首先要查看配置的 DNS 服務器是否合理。

          4.3 hardcode /etc/hosts 導致跳過 DNS 查詢

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

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

          解決辦法:修改/etc/hosts

          前面提到,大部分公網域名都對應多個 IP 地址,因此每次 DNS 查詢拿到的 IP 地址都可能不一 樣,我們用 ping 來測試一下:

        DNS故障診斷及問題分析示例11

          可以看到,兩次 ping 測試(內部首先查詢 baidu.com 對應的 IP 地址)拿到的 IP 地址是不一樣 的。用 nslookup 可以看到它們都是 baidu.com 對應的 IP 地址:

        DNS故障診斷及問題分析示例12

          /etc/hosts 里面可以直接 harcode 一個域名對應的 IP 地址,這會導致機器跳過 DNS 查詢,直接拿這個 IP 作 為該域名的 IP。我們來驗證一下。

          修改/etc/hosts,添加一行 123.125.115.110 baidu.com,再次 ping 測試

        DNS故障診斷及問題分析示例13

          這是不管執行多少次,baidu.com 對應的 IP 地址都不會變了。而實際上,這個 IP 地址并不一定是最優的 IP 地址,甚至有可能這 個 IP 不可用,導致訪問 baidu.com 失敗。因此,實際中要極力避免在/etc/hosts 中 hardcode。

          4.4 DNS 查詢不穩定

          現象:DNS 查詢不穩定,時快時慢

          可能的原因:機器上有 tc 或 iptables 規則,導致到 DNS 服務器的 packet 變慢或丟失

          解決辦法:修改或刪除 tc/iptables 規則

          我們用 tc 來模擬網絡延遲:

        DNS故障診斷及問題分析示例14

          首先查看有沒有 tc 規則:

        DNS故障診斷及問題分析示例15

          默認沒有任何規則。

          然后我們加一條:每個 packet 延遲 600ms:

        DNS故障診斷及問題分析示例16

          測試:

        DNS故障診斷及問題分析示例17

          可以看到,DNS 查詢變成了 600ms。

          這里我們測試的是固定延遲,這種問題很容易發現。我們還可以測試隨機延遲,或者按 比例延遲等 [2]:

        DNS故障診斷及問題分析示例18

          此類規則會導致 DNS 查詢速度更有隨機性。

          最后刪除 tc 規則:

        DNS故障診斷及問題分析示例19

          iptables 規則也會導致類似的問題。

          很多軟件在運行之后,會在宿主機上添加 tc 或 iptables 規則,例如 OpenStack,K8S 等等 。因此遇到這種隨機延遲問題,首先可以查看機器上是否有 tc 或 iptables 規則。

          4.5 DNS 反向查詢不穩定

          線上遇到過這樣一個問題:從一臺機器 ping 一個內網域名,每個 ping 包看起來都會卡 5 ~ 30s 不等,但是 CTL-C 關閉 ping 之后,打印出來的統計信息里,既沒有丟包,ping 的延遲也很低 (毫秒級),這就很奇怪。接下來:

          dig,很快,毫秒級,說明 DNS 查詢沒有問題

          dig 能看到域名對應的 IP,直接 ping 這個 IP,發現是沒有卡頓的

          仍然 ping 域名,用 tcpdump 抓包,tcpdump -i eth0 hostand icmp,發現 ping 包都是立即響應的,印證了統計信息里,ping 延遲很低的事實

          根據以上信息,說明 ping 卡頓的問題出在這臺機器,而且應該就是 ping 程序本身在做什么耗 時的操作。繼續:

          仍然 ping 域名,同時,用 ltrace -p跟蹤 ping 進程,發現卡在一個叫 gethostbyaddr()的函數

          查閱文檔,發現這個函數是根據 IP 反向查詢 hostname,需要和 DNS 交互

          到這里,基本確定了是 DNS 服務器反向查詢的問題,我們用另外幾個命令行工具驗證一下, 以下三個命令都是根據 IP 反查 hostname:

          nslookup

          host

          dig -x

          果然,以上三個命令都會卡住。修改/etc/resolv.conf,換一個 DNS 服務器之后,問題 消失了。接下來,就去查 DNS 服務器的問題吧。

        聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

        10年以上業內強師集結,手把手帶你蛻變精英

        請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通

        免費領取

        今日已有369人領取成功

        劉同學 138****2860 剛剛成功領取
        王同學 131****2015 剛剛成功領取
        張同學 133****4652 剛剛成功領取
        李同學 135****8607 剛剛成功領取
        楊同學 132****5667 剛剛成功領取
        岳同學 134****6652 剛剛成功領取
        梁同學 157****2950 剛剛成功領取
        劉同學 189****1015 剛剛成功領取
        張同學 155****4678 剛剛成功領取
        鄒同學 139****2907 剛剛成功領取
        董同學 138****2867 剛剛成功領取
        周同學 136****3602 剛剛成功領取

        猜你喜歡LIKE

        最新文章NEW

        相關推薦HOT

        更多>>

        ARM內核有多少個寄存器,請列舉出這些寄存器的名字

        未分組寄存器:R0-R7  分組寄存器 :R8-R14  程序計數器PC即R15寄存器  狀態寄存器CPSR  備份狀態寄存器SPSR  R13:SP棧指針寄存器,...詳情>>

        2023-01-20 19:57:50

        版本升級后,測試人有哪些工作要做?

        眾所周知,在軟件的生命周期中,只要軟件不被淘汰,測試的工作就要一直進行。很多時候一旦項目版本發布,大部分測試人員都會認為工作終于結束了...詳情>>

        2023-01-13 14:37:32

        發現一個寶藏Python庫,玩社區發現算法的不能錯過!

        網絡是由一些緊密相連的節點組成的,并且根據不同節點之間連接的緊密程度,網絡也可視為由不同簇組成。簇內的節點之間有著更為緊密的連接,不同...詳情>>

        2023-01-13 10:41:00

        數據科學使用Python時常見的9個錯誤

        通過應用軟件工程最佳實踐,可以交付質量更好數據科學的項目。更好的質量可能是更少的錯誤、可靠的結果和更高的編碼效率。最佳實踐都是從錯誤中...詳情>>

        2022-10-27 11:42:12

        Mac地址會重復嗎?Mac地址也會耗盡嗎?

        Mac地址有點像身份證號碼,而IP地址就像門牌號碼。在茫茫大海中僅憑一個身份證號碼找到一顆別樣的沙粒很難,但如果先找到具體的沙灘,沙灘劃分...詳情>>

        2022-10-20 18:01:25

        快速通道 更多>>

        開班信息
        北京校區
        • 北京校區
        • 大連校區
        • 廣州校區
        • 成都校區
        • 杭州校區
        • 長沙校區
        • 合肥校區
        • 南京校區
        • 上海校區
        • 深圳校區
        • 武漢校區
        • 鄭州校區
        • 西安校區
        • 青島校區
        • 重慶校區
        • 太原校區
        • 沈陽校區

        人人爽天天碰天天躁夜夜躁
        <code id="8ka2b"></code>
        <th id="8ka2b"></th>
        <em id="8ka2b"></em>

        <li id="8ka2b"><acronym id="8ka2b"><kbd id="8ka2b"></kbd></acronym></li>
          <dd id="8ka2b"><pre id="8ka2b"></pre></dd>
          1. <dd id="8ka2b"></dd>

              <ol id="8ka2b"><object id="8ka2b"><blockquote id="8ka2b"></blockquote></object></ol>