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服務的架構是一個分布式的架構, 最頂層是根域服務器, 中間是頂級域名服務器, 接著是二級域名和三級域名服務器.
常用的頂級域名(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服務原理及區域解析庫文件配置