1. 程式人生 > >DNS服務原理及區域解析庫文件配置

DNS服務原理及區域解析庫文件配置

DNS原理 區域解析庫

一、DNS服務概述

DNS(Domain Name service或者Domain Name Server)中文名叫做域名服務或者域名服務器, 屬於應用層協議, 為C/S架構, 使用TCP/UDP的53號端口.

[root@docker-package ~]# cat /etc/services | grep "^domain\b"
domain          53/tcp                          # name-domain server
domain          53/udp

1.1 DNS服務架構概覽

DNS服務架構見下圖:
技術分享圖片
從圖中可以看出, DNS服務的架構是一個分布式的架構, 最頂層是根域服務器, 中間是頂級域名服務器, 接著是二級域名和三級域名服務器.

每一個域名服務器都只負責解析本域內的名稱的主機. 根域服務器全球共有13組.

常用的頂級域名(TLD, Top Level Domain)有com, edu, mil, gov, net, org, int等, TLD分三類, 組織域、國家或地區域(.cn, .us, ...)和反向域.

1.2 DNS服務查詢類型

DNS服務查詢有兩種類型:

  • 遞歸查詢: 只發送一次查詢請求就能得到最終答案, 普通客戶端就是使用的遞歸查詢
  • 叠代查詢: 每次查詢的答案為參考答案, 必須進行下一次查詢, 通過1次或多次查詢得到最終答案, 緩存DNS服務器(一般由電信運營商提供)使用的就是叠代查詢

DNS查詢過程圖如下:

技術分享圖片

NOTE: 客戶端在查詢DNS服務器之前會先查詢本地的hosts(名稱解析配置文件)文件, hosts文件中沒有查詢到需要的信息才會去查詢DNS服務器.
hosts路徑:

  • linux: /etc/hosts
  • windows: %WINDOWS%/system32/drivers/etc/hosts
    # hosts格式:
    IP DomainName
    1.1.1.1 www.xxx.com
    2.2.2.2 www.yyy.com

一次完整的DNS查詢請求經過的流程:

# 1. 當你請求www.xxx.com這個域名時, 會先去查找本地hosts文件, 如果本地hosts文件中有結果, 則直接返回
# 2. 如果hosts文件中沒有結果, 則會請求DNS serveice, DNS service會先查找Local DNS Cache, 有結果則直接返回
# 3. 如果沒有結果, 就去會從根域服務器開始叠代查詢
# 4. 最後叠代查詢有結果就直接返回給客戶端

解析答案有四種類型:

  • 肯定答案
  • 否定答案: 請求的條目不出那種等原因導致無法返回結果
  • 權威答案
  • 非權威答案

1.3 DNS解析類型

DNS解析類型有兩種:

  • 正向解析: FQDN(Full Qualified Domain Name) --> IP
  • 反向解析: IP --> FQDN

FQDN的中文意思是完全限定域名, 例如: www.buyaoliandebaidu.com就是一個FQDN.
正向解析和反向解析各需要一個解析庫來進行解析, 稱之為正向區域和反向區域.

NOTE: 正反向解析是兩個不同的名稱空間, 是兩顆不同的解析樹.

1.4 DNS服務器類型

DNS服務器類型分為四類:

  • 主DNS服務器: 維護所負責解析的域內解析庫的服務器, 解析庫由管理員維護
  • 輔助DNS服務器: 從主服務器或其他從服務那裏“復制(區域傳送)”一份解析庫, 從服務器根據主服務器的序列號變化來更新解析庫
    • 序列號: 解析庫的版本號; 前提: 主服務器解析庫內容發生變化, 其序列號遞增
    • 刷新時間間隔: 從服務器從主服務器請求同步解析庫的時間間隔
    • 重試時間間隔: 從服務器從主服務器請求同步解析庫失敗時, 再次嘗試的時間間隔
    • 過期時長: 從服務器始終聯系不到主服務器時, 多久之後放棄從服務器角色並停止提供服務器
  • 緩存DNS服務器
  • 轉發器

區域傳送有兩種, 全量傳送(傳送整個解析庫)和增量傳送(傳送解析庫變化的那部分內容).

二、DNS的區域解析庫

DNS的區域解析庫中定義了資源記錄(Resource Record, RR), 資源記錄類型如下:

  • SOA(Start Of Authority): 起始授權記錄, 一個區域解析庫僅能有一個SOA記錄, 而且必須為解析庫的第一條記錄
  • A(Internet Address): 用於實現將FQDN解析為IP地址
  • AAAA: 用於IPv6, 將FQDN解析為IPv6地址
  • PTR(PonTeR): 將IP解析為FQDN
  • NS(Name Server): 專用於標明當前區域的DNS服務器
  • CNAME(Canonical Name): 別名記錄
  • MX(Mail eXchanger): 郵件交換器

2.1 資源記錄定義的格式

定義資源記錄的語法:

# 語法: name    [TTL]   IN  tt_type     value
# NOTE:
    # TTL可從全局繼承
    # “@”可用於引用當前區域的名字
    # 同一個名字可以通過多條記錄定義多個不同的值, 此時DNS服務器會以輪詢方式響應
    # 同一個值也可能有多個不同的定義名字, 通過多個不同的名字指向同一個值進行定義; 僅此表示通過多個不同的名字可以找到同一個主機而已

SOA記錄:

# name: 當前區域的名字, 例如: leistudy.com
# value: 有多部分組成
    # 當前主區域的DNS服務器的FQDN, 也可以使用當前區域的名字
    # 當前區域管理員的郵箱地址, 但地址中不能使用@符號, 一般用“.”代替, 例如linuxedu.magedu.com
    # 主從服務協調屬性的定義以及否定的答案的統一的TTL

# 示例:
leistudy.com.   86400   IN  SOA     ns.leistudy.com.    nsadmin.leistudy.com.   (
            2018022801  ;序列號
            2H          ;刷新時間
            10M         ;重試時間
            1W          ;過期時間
            1D          ;否定答案的TTL值
)

NS記錄:

# name: 當前區域的名字
# value: 當前區域的某DNS服務器的名字, 例如: ns.leistudy.com.
    # NOTE: 一個區域可以有多個NS記錄

# 示例:
leistudy.com.   IN  NS  ns1.leistudy.com.
leistudy.com.   IN  NS  ns2.leistudy.com.

NOTE1: 相鄰兩個資源記錄的name相同時, 後續可省略
NOTE2: 對NS記錄而言, 任何一個ns記錄後面的服務器名字, 都應該在後續有一個A記錄

MX記錄:

# name: 當前區域的名字
# value: 當前區域的某郵件服務器(smtp服務器)的主機名, 一個區域內, MX記錄可有多個; 但每個記錄的value之前應該有一個數字(0-99), 表示此服務器的優先級, 數字越小, 優先級越高

# 示例:
leistudy.com.   IN  MX  10  mx1.leistudy.com.
                IN  MX  20  mx2.leistudy.com.

# NOTE: 對MX記錄而言, 任何一個MX記錄後面的服務器名字, 都應該在後續有一個A記錄

A記錄:

# name: 某主機的FQDN, 例如www.leistudy.com.
# value: 主機名對應主機的IP地址

# 示例:
www.leistudy.com.   IN  A   1.1.1.1
www.leistudy.com.   IN  A   1.1.1.2
mx1.leistudy.com.   IN  A   1.1.1.3
mx2.leistudy.com.   IN  A   1.1.1.3

# NOTE: 避免用於寫錯名稱時給錯誤答案, 可通過泛域名解析進行解析至某特定地址
# 示例:
*.leistudy.com. IN  A   1.1.1.4
magedu.com. IN  A   1.1.1.4

AAAA記錄:

# name: FQDN
# value: IPv6

PTR記錄:

# name: IP, 有特定格式, 把IP地址反過來寫, 例如1.2.3.4要寫作4.3.2.1; 而且有特定後綴: in-addr.arpa; 所以完整寫法為“4.3.2.1.in-addr.arpa”
# value: FQDN

# 示例:
4.3.2.1.in-addr.arpa. IN    PTR www.leistudy.com

# 簡寫: 網絡地址及後綴可省略, 主機地址依然要反寫
4   IN  PTR     www.leistudy.com.

CNAME記錄:

# name: 別名的FQDN
# value: 真正名字的FQDN

# 示例:
web.leistudy.com.   IN  CNAME   www.leistudy.com.

NOTE: 配置示例請查看博客http://blog.51cto.com/13501622/2092851

DNS服務原理及區域解析庫文件配置