DNS域名解析

語言: CN / TW / HK

theme: awesome-green

DNS

概念

域名系統(英文:Domain Name System,縮寫:DNS),使用應用層協議,是網際網路的一項服務。 它作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。

簡單來說就是:把域名轉換成網路可以識別的ip地址,再通過IP地址訪問主機。 這種由文字組成的名稱,顯而易見要更容易記憶。

每一臺 DNS 伺服器都只負責管理一個有限範圍(一個或幾個域)內的主機域 名和 IP 地址的對應關係,這些特定的 DNS 域或 IP 地址段稱為 zone(區域)。 當前,對於每一級域名長度的限制是63個字元,域名總長度則不能超過253個字元。

預設埠: - 連線DNS伺服器,使用TCP協議的53埠。 - DNS伺服器進行解析,使用UDP協議的53埠。

DNS分散式資料結構

cf3f016815d66691b7c8bfd90fa9ce4.png 域名級數是指一個域名由多少級組成,域名的各個級別被“.”分開,最右邊的"."就是根域名,通常省略不寫。

頂級域名,又稱一級域名,常見的有".com"、".org"、".net"、".cn"等。

二級域名,就是在一級域名前再加一級,如"baidu.com"。

所有的域名必須以點(.)結尾 根域名伺服器:

  • IPv4的根名稱伺服器: 全世界只有13臺IPv4根域名伺服器。1個為主根伺服器在美國。其餘12個均為輔根伺服器,其中9臺在美國,歐洲2個(位於英國和瑞典),亞洲1個位於日本。
  • IPv6的根名稱伺服器:全球共25臺,中國1主3從,美國1主2從。
  • 根域名伺服器一旦有任何異常對整個網際網路影響都非常大。目前全球有了許多的根域名伺服器映象伺服器,這點增加了容錯率。

一級DNS伺服器: 專門負責一級域名(頂級域名)的解析

通用頂級域名:

| 一級域名 | 說明 | | ---- | ------------- | | .com | 商業機構,但個人也可以註冊 | | .net | 網路服務機構 | | .edu | 教育機構 | | .int | 國際機構 | | .org | 非營利性組織 | | .gov | 政府機構 | | .mil | 軍事機構 |

國家頂級域名:以地理域名命名的頂級域名 。

| 一級域名 | 說明 | | ---- | -------- | | .cn | China,中國 | | .jp | Japan,日本 | | .uk | 英國 | | .us | 美國 |

二級DNS伺服器:專門負責二級域名的解析

| 二級域名 | 說明 | | ------- | ------- | | .com.cn | 中國商業組織 | | .edu.cn | 中國教育機構 | | .org.cn | 中國非盈利組織 | | .net.cn | 中國運營商 |

子域名伺服器: 專門負責子域名的解析(三級及以下域名都叫子域名)。

| 三級域名 | 說明 | | --------------- | ---- | | sina.com.cn | 新浪 | | pku.edu.cn | 北京大學 | | tsinghua.edu.cn | 清華大學 |

常用主機名

| 主機名 | | ---- | | www | | mail | | news |

注:

  • 114.114.114.114是國內移動、電信和聯通通用的DNS伺服器,解析成功率相對來說更高,國內使用者使用的比較多,速度相對快、穩定,是國內使用者上網常用的DNS。
  • 8.8.8.8是GOOGLE公司提供的DNS伺服器,該地址是全球通用的,相對來說,更適合國外以及訪問國外網站的使用者使用。

DNS系統型別

快取域名伺服器

  • 也稱為DNS快取記憶體伺服器
  • 通過向其他域名伺服器查詢獲得域名-->IP地址記錄
  • 將域名查詢結果快取到本地,提高重複查詢時的速度

主域名伺服器

  • 特定DNS區域的權威伺服器,具有唯一性
  • 負責維護該區域內所有域名-->IP地址的對映記錄
  • 需要自行建立所負責區域的地址資料檔案

從域名伺服器

  • 也稱為輔助域名伺服器,是對主域名伺服器的熱備份
  • 其維護的域名-->IP地址記錄來源於主域名伺服器
  • 需要從主域名伺服器自動同步區域地址資料庫

windows系統查詢DNS快取的命令:ipconfig/displaydns  windows系統清理DNS快取的命令:ipconfig/flushdns  ​  Linux系統清理DNS快取需要安裝nscd軟體,啟動、執行“nscd -i hosts”命令 複製程式碼

DNS的查詢方式(遞迴查詢和迭代查詢)

遞迴查詢

  • 主機向本地域名伺服器的查詢一般都是採用遞迴查詢。
  • 如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP地址,那麼本地域名伺服器就以DNS客戶的身份,向其它根域名伺服器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。在域名伺服器查詢期間,客戶機將完全處於等待狀態。
  • 因此,遞迴查詢只會返回兩種資訊:要麼是所要查詢的IP地址,要麼是查詢失敗。

迭代查詢

  • 本地域名伺服器向根域名伺服器的查詢是迭代查詢。
  • 當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報文後,要麼給出所要查詢的IP地址,要麼告訴本地伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。下一個伺服器收到請求後也是如此,要麼返回IP,要麼告訴本地域名伺服器下一步去找誰。 即本地域名伺服器按照提示的指引依次查詢, 直到返回查詢的結果為止 。

遞迴查詢和迭代查詢的特點:

  • 遞迴查詢:主機只發出一次請求,要求對方給出最終結果。返回的結果只有兩種:查詢成功或查詢失敗。
  • 迭代查詢:主機需要發起多次請求,返回的是所需IP地址或最佳查詢地址。

image.png

域名的解析過程

Client(客戶機)--> 查詢/etc/hosts檔案 --> Client DNS Service Local Cache ( 查詢DNS服務本機快取,只有Windows系統有)--> DNS Server(主機向本地域名伺服器請求,遞迴查詢)-->DNS Server Cache (本地域名伺服器查詢快取資訊)--> DNS iteration(本地域名伺服器進行迭代查詢)——>根域名伺服器)-->一級域名伺服器-->二級域名伺服器-->三級域名伺服器... - 客戶機先去查詢本機的/etc/hosts 檔案,看檔案中是否存在該域名和IP地址的對映記錄。如果有就呼叫,沒有就進行下一步。

  • 客戶機請求本地域名伺服器(LDNS)來解析這個域名,主機要求本地域名伺服器直接返回最終結果。在返回結果之前,客戶機將完全處於等待狀態,不再二次請求。統一由本地域名伺服器向各級域名伺服器轉發請求。

  • 本地域名伺服器收到客戶機的請求後,先查詢自己的快取資訊,如果有這個域名的對映記錄則返回結果,沒有則進行下一步。

  • 本地域名伺服器請求根域名伺服器解析這個域名,根域名告訴本地域名伺服器去找對應的一級域名伺服器。

  • 本地域名伺服器請求一級域名伺服器解析這個域名,一級域名伺服器告訴它去找對應的二級域名伺服器。

  • 本地域名伺服器請求二級域名伺服器解析這個域名,二級域名伺服器告訴它去找對應的子域名伺服器。

  • 本地域名伺服器請求子域名伺服器解析這個域名,子域名伺服器返回對應的IP地址。

  • 本地域名伺服器將IP地址記錄到快取中,並返回給客戶機。客戶機根據收到的IP地址訪問該網站。

bind

BIND配置檔案

  • 主配置檔案:  /etc/named.conf
  • 根域配置檔案: /var/named/named.ca
  • 區域配置檔案: /etc/named.rfc1912.zones
  • 儲存DNS解析記錄的資料檔案位於: /var/named/目錄下

BIND服務控制

  • systemctl [status|start|stop|restart] named.service

配置檔案(全域性配置檔案)

BIND服務的主配置檔案位於: /etc/named.conf

  • 設定DNS伺服器的全域性引數
  • 包括監聽地址和埠、區域資料檔案存放的目錄等
  • 使用 options{......}; 的配置段

image.png

區域配置檔案

區域配置檔案位於:/etc/named.rfc1912.zones。

  • 設定本伺服器提供域名解析的特定DNS區域
  • 包括域名、伺服器角色、資料檔名等
  • 使用 zone "區域名" IN{......}; 的配置段

image.png image.png

區域資料庫檔案(zone檔案)

BIND服務的區域資料庫檔案位於/var/named/ 目錄下,具體檔名由管理員定義。一般格式為/var/named/域名.zone,例如:/var/named/yuji.com.zone。 局TTL配置項及SOA記錄

  • $TTL(Time To Live,生存時間): 表示DNS記錄在DNS伺服器上的快取時間,預設單位秒。
  • @:表示當前域名。
  • IN:表示使用 Internet 協議。
  • SOA(Start Of Authority,授權資訊開始):表示解析方式。
  • 分號 ";" 開始的部分表示註釋資訊

image.png

2)正向解析記錄

  • NS記錄:域名伺服器記錄(Name Server)。
  • MX記錄:郵件交換記錄(Mail Exchange)。
  • A記錄:地址記錄(Address)。用來指定主機名(或域名)對應的IP地址記錄。用於正向解析。
  • CNANE:別名記錄。 這種記錄允許您將多個名字對映到同一臺計算機。

NS master                     //當前區域的DNS伺服器名稱        master IN   A     192.168.72.10     //記錄DNS伺服器master的IP地址             MX 10   mail.yuji.com     //MX為郵件交換記錄,數字越大優先順序越低             MX 20   mail2.yuji.com     //MX為郵件交換記錄,數字越大優先順序越低  mail   IN   A     192.168.72.103     //記錄正向解析mail.yuji.com對應的IP  mail2   IN   A     192.168.72.104     //記錄正向解析mail2.yuji.com對應的IP  www     IN   A     192.168.72.101     //記錄正向解析www.yuji.com對應的IP  ftp     IN   A     192.168.72.102     //記錄正向解析ftp.yuji.com對應的IP  web     IN   CNAME   WWW               //CNAME使用別名,web是www的別名  *       IN   A     192.168.72.100   //泛域名解析,*表示任意主機名。泛域名有優先順序,從上而下匹配。 複製程式碼

3)反向解析記錄

PTR: 指標記錄 (Pointer Record) ,用來指定IP地址對應的域名。用於反向解析。

記錄的如一列指定IP地址中的主機地址部分

NS       master         //當前區域的DNS伺服器名稱  master IN     A      192.168.72.10     //記錄DNS伺服器的IP地址  200     IN   PTR     www.nan.com       //記錄反向解析192.168.72.200對應的IP地址  201     IN   PTR     ftp.nan.com       //記錄反向解析192.168.72.201對應的IP地址 複製程式碼

小貼士: - TTL可從全域性繼承 - 使用 "@" 符號可用於引用當前區域的域名 - 同一個名字可以通過多條記錄定義多個不同的值;此時DNS伺服器會以輪詢方式響應。 - 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機。

區域資料庫檔案的特殊應用

基於域名解析的負載均衡

www IN A 192.168.19.10 www IN A 192.168.19.11 www IN A 192.168.19.12 - 同一域名對應到多個IP地址

泛域名解析 - 找不到精確對應的A記錄時,使用星號(*)進行匹配

* IN A 192.168.19.11

實驗

正向解析

實驗要求:

架設一臺DNS伺服器負責yuji.com域的域名解析工作。DNS伺服器的IP地址為192.168.72.10,域名為master.pp.com。要求為以下域名做正向解析工作。

www.pp.com 192.168.19.21 mail.pp.com 192.168.19.22 ftp.pp.com 192.168.19.23

實驗思路:

  1. 安裝bind軟體包
  2. 修改主配置檔案
  3. 修改區域配置檔案,新增正向區域配置
  4. 配置正向區域資料檔案
  5. 啟動服務,關閉防火牆
  6. 在客戶端的域名解析配置檔案中新增DNS伺服器地址
  7. 測試DNS解析,驗證實驗是否成功。

實驗步驟:

步驟一:

安裝bind軟體包

``` yum install -y bind //安裝bind軟體包 [root@localhost ~]# rpm -qc bind //查詢bind軟體配置檔案所在路徑 /etc/logrotate.d/named /etc/named.conf //主配置檔案 /etc/named.iscdlv.key /etc/named.rfc1912.zones //區域配置檔案 /etc/named.root.key /etc/rndc.conf /etc/rndc.key /etc/sysconfig/named /var/named/named.ca /var/named/named.empty /var/named/named.localhost //區域資料配置檔案 /var/named/named.loopback

```

image.png

步驟二:

修改主配置檔案

``` options { listen-on port 53 { any; }; //允許DNS伺服器監聽所有IP地址 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; //允許所有客戶端查詢

```

image.png 步驟三:

修改區域配置檔案,新增正向區域配置

``` vim /etc/named.rfc1912.zones //編輯區域配置檔案

zone "pp.com" IN { //定義正向DNS區域 type master; //定義區域型別為master file "pp.com。zone"; //設定對應的正向解析資料庫檔案 allow-update { none; }; // }; ```

image.png

步驟四:

配置正向區域資料檔案

``` [root@localhost ~]# cd /var/named/ [root@localhost named]# ls data dynamic named.ca named.empty named.localhost named.loopback slaves [root@localhost named]# cp -p named.localhost pp.com.zone [root@localhost named]# vim pp.com.zone

$TTL 1D @ IN SOA pp.com. admin.pp.com.zone. ( 0 ; serial //更新序列號,可以是 10 位以內的整數 1D ; refresh //重新整理時間,重新下載地址資料的間隔 1H ; retry //重試延時,下載失敗後的重試間隔 1W ; expire //失效時間,超過該時間仍無法下載則放棄 3H ) ; minimum //無效解析記錄的生存週期 NS pp.com. A 192.168.19.20 www IN A 192.168.19.21 mail IN A 192.168.19.22 ftp IN A 192.168.19.23 * IN A 192.168.19.24

```

image.png

  • “@”這裡是一個變數,當前DNS區域名
  • SOA記錄中的更新序列號用於同步主、從伺服器的區域資料,當從伺服器判斷區域更新時,若發現主伺服器中的序列號與本地區域資料中的序列號相同,則不會進行下載。
  • “pp.com.”此為完全合格域名(FQDN),後面有個“.”不能漏掉
  • “admin.pp.com.”表示管理員郵箱,這裡的“@”符號已有其他含義,所以用“.”代替

步驟五:

啟動服務,關閉防火牆

[root@localhost named]# systemctl start named [root@localhost named]# systemctl stop firewalld [root@localhost named]# setenforce 0 image.png

  • 如果服務啟動失敗,可以檢視日誌檔案來排查錯誤
    tail -f /var/log/messages
  • 如果服務啟動卡住,可以執行下面命令解決
    rndc-confgen -r /dev/urandom -a

步驟六:

在客戶端的域名解析配置檔案中新增DNS伺服器地址

方法一:

``` [root@localhost named]# vim /etc/resolv.conf

Generated by NetworkManager

nameserver 192.168.19.20

nameserver 114.114.114.114

修改完立即生效

``` image.png

方法二:

```js [root@localhost named]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=34aeac22-1154-4c4b-a76c-55c5e7b81429 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.19.20 NETMASK=255.255.255.0 GATEWAY=192.168.19.2 DNS1=192.168,19,20

DNS2=114.114.114.114

[root@localhost named]# systemctl restart network

修改完後需要重啟網絡卡

```

image.png image.png 步驟七:

測試DNS解析,驗證實驗是否成功。

``` [root@localhost named]# host www.pp.com www.pp.com has address 192.168.19.21 [root@localhost named]# host ftp.pp.com ftp.pp.com has address 192.168.19.23

``` image.png

反向解析

實驗要求:

要求為以下IP地址做反向解析工作。

192.168.19.200     www.chc.com  192.168.72.201     ftp.chc.com

實驗思路:

  1. 修改區域配置檔案,新增反向區域配置
  2. 配置反向區域資料檔案
  3. 重啟服務進行測試

實驗步驟:

步驟一:

修改區域配置檔案,新增反向區域配置

``` [root@localhost named]# vim /etc/named.rfc1912.zones

zone "19.168.192.in-addr.arpa" IN { //反向解析的地址倒過來寫,代表解析192.168.19段的地址 type master; file "chc.com.zone"; //指定區域資料檔案為chc.com.zone allow-update { none; }; };

```

image.png

步驟二:

配置反向區域資料檔案

``` [root@localhost named]# cp -p named.localhost chc.com.zone [root@localhost named]# vim chc.com.zone

$TTL 1D @ IN SOA chc.com. admin.chc.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS chc.com. A 192.168.19.20 200 IN PTR www.chc.com 201 IN PTR mail.chc.com

PTR為反向指標

```

image.png

步驟三:

重啟服務進行測試

js [root@localhost named]# host 192.168.19.200 200.19.168.192.in-addr.arpa domain name pointer www.chc.com.19.168.192.in-addr.arpa. [root@localhost named]# nslookup 192.168.19.201 201.19.168.192.in-addr.arpa name = mail.chc.com.19.168.192.in-addr.arpa.

image.png

構建主從域名伺服器

實驗:

實驗思路:

  1. 修改主域名伺服器的區域配置檔案,修改正、反向區域配置
  2. 修改從域名伺服器的主配置檔案
  3. 修改從域名伺服器區域配置檔案,新增正、反區域配置
  4. 主、從都重啟動服務,並檢視區域資料檔案是否已下載成功
  5. 在客戶端的域名解析配置檔案中新增從DNS伺服器地址;
    在服務端端的域名解析配置檔案中新增主DNS伺服器地址
  6. 測試

實驗步驟:

步驟一:

修改主域名伺服器的區域配置檔案,修改正、反向區域配置

```js [root@localhost ~]# vim /etc/named.rfc1912.zones

zone "jlx.com" IN { type master; //型別為主區域 file "jlx.com.zone"; allow-transfer { 192.168.19.10; }; //允許從伺服器下載正向區域資料,這裡添從伺服器的IP地址 };

zone "19.168.192.in-addr.arpa" IN { type master; file "jlx.com.zone.local"; allow-transfer {192.168.19.10; }; };: ``` 步驟二:

修改從域名伺服器的主配置檔案

``` [root@localhost ~]# vim /etc/named.conf

options { listen-on port 53 { 192.168.19.10; }; //監聽53埠,ip地址使用提供服務的本地IP即可,也可用any代表所有 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; //允許使用本DNS解析服務的網段,也可用any代表所有

```

image.png

步驟三:

修改從域名伺服器區域配置檔案,新增正、反區域配置

``` [root@localhost ~]# vim /etc/named.rfc1912.zones

zone "jlx.com" IN { type slave; file "slaves/jlx.com.zone"; //下載的區域資料檔案儲存到slaves/目錄下 masters { 192.168.19.20; }; //指定主伺服器的IP地址

zone "19.168.192.in-addr.arpa" IN { type slave; file "slaves/jlx.com.zone.local"; masters { 192.168.19.20; }; ``` 步驟四:

主、從都重啟動服務,並檢視區域資料檔案是否已下載成功

``` systemctl restart named [root@localhost ~]# ls -l /var/named/slaves/ 總用量 8 -rw-r--r--. 1 named named 252 8月 17 18:06 jlx.com.zone -rw-r--r--. 1 named named 400 8月 17 18:06 jlx.com.zone.local

```

image.png 步驟五: 在客戶端的域名解析配置檔案中新增從DNS伺服器地址

``` [root@localhost ~]# echo "nameserver 192.168.19.10">> /etc/resolv.conf [root@localhost ~]# cat /etc/resolv.conf

Generated by NetworkManager

nameserver 192.168.19.20 nameserver 192.168.19.10

```

image.png

在服務端端的域名解析配置檔案中新增主DNS伺服器地址

```js [root@localhost ~]# echo "nameserver 192.168.19.20">> /etc/resolv.conf [root@localhost ~]# cat /etc/resolv.conf

Generated by NetworkManager

nameserver 192.168.19.10 nameserver 192.168.19.20

```

image.png

步驟六:

測試

[root@localhost ~]# host 192.168.19.200 200.19.168.192.in-addr.arpa domain name pointer www.jlx.com.19.168.192.in-addr.arpa. [root@localhost ~]# nslookup 192.168.19.200 200.19.168.192.in-addr.arpa name = www.jlx.com.19.168.192.in-addr.arpa.

image.png

總結:

  • 一定要關閉防火牆和selinux。
  • 編輯配置檔案和區域資料庫檔案時,需要嚴格注意語法書寫,其格式非常嚴格。
  • ”@“是DNS記錄中的保留字,表示當前域名。
  • 修改配置檔案後,一定要重啟服務,之後才能生效。