一、DNS域名解析原理
DNS,Domain Name System,域名系統:在互聯網中由大量域名解析服務器共同提供的一整套關于“域名?<--> IP地址”信息查詢的數據系統
????!!!! C/S架構:DNS服務端監聽UDP 53端口(處理客戶端查詢),也監聽TCP 53端口(主-輔同步)
????!!!!?客戶機向DNS服務器提問:xx域名的IP地址是多少?
####?如何通過域名找到一個站點
????FQDN,Full Qualified Domain Name,完全限定域名(站點名+域名) ,比如:servera.lab.example.com、www.stu.cn
####?分層次管理(域名體系結構):
????根域?=》.
????頂級域/一級域?=》.com、.cn
????二級域 (最常見)=》?.example.com、.stu.cn
????三級域(比較少)?=》?lab.example.com、……
????站點(使用DNS名稱的各服務器)=》?www、mail、ftp、game、news、……
####?分布式部署(域名服務器):
????每個權威DNS服務器只負責分擔自己管轄的一個或多個域,提供這個域內的名稱解析服務
????每個權威DNS服務器可以代客戶端查詢管轄范圍外的域名(問其他DNS服務器)
????每個權威DNS服務器可以授權某個子域DNS服務器,告知客戶端自己去找子域DNS服務器繼續查詢
????比如,IANA管理根域(.)的DNS服務器、CNNIC管理一級域.cn的DNS服務器、stu管理二級域.stu.cn的DNS服務器
#### DNS服務器的類型
????權威DNS:需由IANA統一授權管理,管理一個或更多個DNS區域,有公網IP地址
????緩存DNS:運行商或企業自行架設、自行管理,主要面向客戶端提供代理查詢服務,提高客戶體驗(緩存加速),無需管理任何區域
####?域名查詢的主要方式
????!!!!?按問題內容分 ——
???????正向查詢:根據已知的域名查詢這個域名的IP地址,比如“域名www.baidu.com的IP地址是多少?”
???????反向查詢:根據已知的IP地址查詢這個IP地址的域名,比如“IP地址39.156.66.18對應的域名是什么?”
????!!!!?按服務方式分 ——
???????遞歸查詢:為客戶機查詢非本DNS服務器管轄的解析記錄,主要出現在“客戶機?->?緩存DNS服務器”場景;客戶端只發送一次查詢請求,剩下的都交給DNS服務器
???????迭代查詢:告知客戶機子域DNS服務器的地址,讓客戶機自己去找子域DNS查詢,主要出現在“緩存DNS ->?權威DNS服務器”場景;客戶端需要發送多次查詢請求,依次詢問根DNS、一級DNS、二級DNS、……
####?域名解析條目的類型
????TTL:設置解析記錄的默認超時時間(缺省單位為秒,可以添加?H/D/W表示小時/天/周)
????SOA:設置區域授權記錄(建議參考/var/named/named.localhost范本文件) ——?@ IN??SOA???@??admin.@??(??.. .. )
????NS:域名服務器
????MX:郵件服務器記錄
????CNAME:域名別名記錄
????A:正向解析記錄(域名->IPv4地址)
????AAAA:正向解析記錄(域名->IPv6地址)
????PTR:反向解析記錄(IP地址->域名)
???
二、域名查詢(host/nslookup/dig)
軟件包bind-utils提供以下域名查詢工具:
????host:簡單查詢工具,用法:host????域名或IP地址???DNS服務器地址
????nslookup:交互式查詢工具,用法:nslookup????域名或IP地址???DNS服務器地址
????dig:深度挖掘查詢工具,用法:dig??@DNS服務器地址????域名或IP地址???[-t??資源類型]
[root@work?~]# yum???-y???install???bind-utils???????//安裝域名查詢工具包
!!!!?使用上述工具時,需要有可用的DNS服務器
!!!!?如果還沒有配置DNS服務器,也可以找一臺能上網的主機,練習host/nslookup/dig命令
!!!!?在Windows系統中,自帶nslookup命令,也可以向DNS查詢域名
練習:查詢域名
1)直接查詢(向本機設置的默認DNS服務器查詢)www.12306.cn的IP地址
C:\Users\TsengYia>nslookup??www.12306.com
服務器:??public1.114dns.com
Address:??172.50.163.10
非權威應答:
名稱:????www.12306.com
Address:??112.74.143.83
2)向DNS服務器8.8.8.8查詢www.12306.cn的IP地址
C:\Users\TsengYia>nslookup??www.12306.com??8.8.8.8
服務器:??dns.google
Address:??8.8.8.8
非權威應答:
名稱:????www.12306.com
Address:??112.74.143.83
3)向8.8.8.8查詢IP地址114.114.114.114的域名是多少(注意:大多數IP地址是查不到反向結果的)
C:\Users\TsengYia>nslookup??114.114.114.114??8.8.8.8
服務器:??dns.google
Address:??8.8.8.8
名稱:????public1.114dns.com
Address:??114.114.114.114
三、權威DNS服務器-bind正向域設置
BIND,Berkeley Internet Name Domain,伯克利互聯網名稱服務器
servera(權威DNS服務器,servera.lab.example.com的IP地址是多少)
????1)裝包?bind
????2)配置 (主配置、地址庫)
????3)起服務??named
???
獲取BIND配置幫助:
# man??named.conf
# firefox??file:///usr/share/doc/bind/Bv9ARM.html
???
####?主配置文件/etc/named.conf,設置DNS全局參數、管理哪些區域(用哪一個地址庫)、安全控制、……
# vim??/etc/named.conf
options??{
????listen-on port 53 {?本機的IPv4監聽地址; };
????listen-on-v6 port 53 {?本機?ky的IPv6監聽地址; };
????directory???????"/var/named";??????????//指定地址庫文件的默認存放目錄
????allow-query?????{?客戶機的網段或IP地址; };
????recursion yes;???????????//是否允許提供遞歸查詢服務
????dnssec-enable yes;???????//啟用DNS安全
????dnssec-validation yes;??????//啟用DNS安全校驗
};
zone??"區域名"??IN??{
????type??master;????????????//設置區域類型(master、hint、slave、forward)
????file??地址庫文件名或者絕對路徑;
};
include???xxxx文件;?????//需要在主配置文件中包含xxxx文件
# named-checkconf??//查錯工具
TTL,Time To Live,存活時間(DNS解析記錄的有效期)
SOA,Start Of Authority,授權記錄的開始(管理的區域的信息,以及提供給從DNS服務器用的一些參數)
####?地址庫文件?/var/named/*,設置具體的地址記錄(域名->IP地址)
# vim??/var/named/地址庫文件名
$TTL???有效記錄的生存時間
@??IN??SOA??區域名????管理郵箱地址.??(
????序列號???????????????//十位以內的整數
????刷新時間
????重試時間
????過期時間
????無效記錄的生存時間
)
@??????NS?????當前區域的DNS服務器的域名.
???????????MX???優先級???當前區域的郵件服務器的域名.
www?A??????IP地址
mail???A??????IP地址
servera???????A??????IP地址
.. ..
# named-checkzone???區域名????地址庫文件的路徑和名稱???????????//查錯
work(客戶機)?==》servera(權威DNS)
實驗拓撲:
????servera.lab.example.com,權威DNS,提供域名解析服務(正向域lab.example.com)
????work(客戶機):向servera查詢域名serverc.lab.example.com的IP地址
1)安裝bind包
[root@servera ~]# yum??-y??install??bind
2)調整配置
[root@servera ~]# vim??/etc/named.conf????????//修改主配置文件
options {
????????listen-on port 53 { any; };???????????//在本機所有IPv4接口監聽
????????listen-on-v6 port 53 { any; };????????//在本機所有IPv6接口監聽
???????directory???????"/var/named";??????????//zone地址庫文件的默認存放路徑
???????allow-query?????{ localhost; 172.25.250.0/24; };????????//允許哪些客戶機查詢
???????.. ..
};
???????zone "lab.example.com" {???????????????//定義DNS區域
???????????type master;?????????//類型為主區域
???????????file "lab.example.com.zone";???????//指定地址庫文件名
???????};
[root@servera ~]# named-checkconf?????????//檢查主配置文件(無輸出即無錯)
[root@servera ~]#
[root@servera ~]# vim??/var/named/lab.example.com.zone??????//創建正向區域地址庫文件
$TTL 1D
@??IN??SOA??@?????root.lab.example.com. (
????????????????????????????????????????0???????; serial
????????????????????????????????????????1D??????; refresh
????????????????????????????????????????1H??????; retry
????????????????????????????????????????1W??????; expire
????????????????????????????????????????3H )????; minimum
@???????NS??????servera.lab.example.com.
servera???????A???????172.25.250.10
serverb???????A???????172.25.250.11
serverc???????A???????172.25.250.12
serverd???????A???????172.25.250.13
[root@servera ~]# chmod??640??/var/named/lab.example.com.zone
[root@servera ~]# chown??:named??/var/named/lab.example.com.zone
[root@servera ~]# named-checkzone??lab.example.com??/var/named/lab.example.com.zone??//檢查區域地址文件(OK即無錯)
.. ..
OK
3)啟動named服務
[root@servera ~]# firewall-cmd??--permanent??--add-service=dns????????//開放DNS訪問
[root@servera ~]# firewall-cmd??--reload??????//重載防火墻
[root@servera ~]# systemctl??enable??named??--now???????//啟用named服務
4)域名查詢測試 —— 向servera查詢serverc的IP地址
[root@work?~]# host??serverc.lab.example.com??servera?
Using domain server:
Name: servera
Address: 172.25.250.10#53
Aliases:
serverc.lab.example.com has address 172.25.250.12
四、權威DNS服務器-bind反向域設置
針對網段172.25.250/24,
對應的反向區域的名稱?250.25.172.in-addr.arpa
然后在主配置文件中也需要定義也這個區域,并且提供相應的地址庫文件
對應的反向地址記錄:
12?????PTR???????????完整的域名.
work(客戶機)?==》servera(權威DNS)
實驗拓撲:
????servera.lab.example.com,權威DNS,提供域名解析服務(正向域lab.example.com、反向域250.25.172.in-addr.arpa)
????work(客戶機):向servera查詢域名serverc.lab.example.com的IP地址、查詢IP地址172.25.250.12的域名
1)修改主配置文件,添加反向域設置
[root@servera ~]# cp??-p??/etc/named.conf{,.bak}?????//備份主配置文件
[root@servera ~]# vim??/etc/named.conf
?.. ..
????zone "250.25.172.in-addr.arpa" IN {???????//注意反向區域名中網段的倒序寫法
????????type master;
????????file "172.25.250.zone";
????};
2)創建反向區域地址庫文件
[root@servera ~]# vim??/var/named/172.25.250.zone
$TTL 300
@???????IN SOA??@????root.example.com. (
????????????????????????????????????????0???????; serial
????????????????????????????????????????1D??????; refresh
????????????????????????????????????????1H??????; retry
????????????????????????????????????????1W??????; expire
????????????????????????????????????????3H )????; minimum
@????????NS??????servera.lab.example.com.
10??????PTR?????servera.backend.lab.example.com.
11??????PTR?????serverb.backend.lab.example.com.
12??????PTR?????serverc.backend.lab.example.com.
13??????PTR?????serverd.backend.lab.example.com.
[root@servera ~]# chmod??640??/var/named/172.25.250.zone
[root@servera ~]# chown??:named??/var/named/172.25.250.zone
[root@servera ~]# named-checkzone??250.25.172.in-addr.arpa /var/named/172.25.250.zone??//檢查反向區域地址文件(OK即無錯)
.. ..
OK
3)重啟named服務
[root@servera ~]# systemctl??restart??named
4)域名查詢測試 —— 向servera查詢IP地址172.25.250.12的域名
[root@work?~]# host??172.25.250.12??servera?
Using domain server:
Name: servera
Address: 172.25.250.10#53
Aliases:
12.250.25.172.in-addr.arpa domain name pointer serverc.lab.example.com.
擴展小知識(解析庫的應用) ——
DNS解析記錄的輪詢(負載均衡,一個站點對應多個IP地址):
serverd???????A???????172.25.250.13
serverd???????A???????72.25.250.13
別名解析記錄的設置(一個IP對應多個站點):
servera???????A???????172.25.250.10
www???????????????CNAME???servera
泛域名解析記錄的設置(只查詢域名或錯誤的站點名,也能有結果):
@???????NS??????servera.lab.example.com.
???????????A???????172.25.250.10
*??????????A???????172.25.250.10
五、緩存DNS服務器-unbound緩存/轉發設置
work(客戶機)?==》serverb(緩存DNS)?==》servera(權威DNS)
實驗拓撲:
????servera.lab.example.com,權威DNS,提供域名解析服務(正向域lab.example.com、反向域250.25.172.in-addr.arpa)
????serverb.lab.example.com,緩存DNS,代理客戶端查詢,將來自客戶端的所有查詢請求轉發給servera
????work(客戶機):向serverb查詢域名serverc.lab.example.com的IP地址、查詢IP地址172.25.250.12的域名
1)安裝unbound包
[root@serverb ~]# yum??-y??install??unbound
2)調整配置
[root@serverb ~]# cp??-p??/etc/unbound/unbound.conf{,.bak}?????//備份主配置文件
[root@serverb ~]# vim??/etc/unbound/unbound.conf????????//修改主配置文件
server:
???????.. ..
???????interface: 172.25.250.11????????//在指定接口(可以是0.0.0.0,表示本機所有IP地址)提供監聽
????????access-control: 172.25.250.0/24 allow????//允許哪些網段的客戶機使用(可以配置多行),缺省為refuse拒絕
???????access-control: 127.0.0.0/8 allow
???????domain-insecure:??"lab.example.com"???????????//標記不安全區域(允許轉發查詢,避免對客戶端做DNSSEC安全驗證)
???????unblock-lan-zones: yes??//允許查詢本地區域
???????insecure-lan-zones: yes?????//允許查詢不安全的本地區域
forward-zone:
???????name: "lab.example.com"????????????//將針對xx區域的查詢轉發給指定DNS(其余區域走auth-zone上游DNS服務器)
???????forward-addr: 172.25.250.10????????//指定另一臺DNS服務器的IP地址
forward-zone:
????????name: "250.25.172.in-addr.arpa"???????//將針對xx反向區域的查詢轉發給指定DNS
????????forward-addr: 172.25.250.10
auth-zone:
???????name: "."?????????//對于未設置轉發的其他?區域,默認從根域開始查詢
???????for-downstream: no
???????for-upstream: yes
???????fallback-enabled: yes
???????master: b.root-servers.net
???????master: c.root-servers.net
???????.. ..
[root@serverb ~]# unbound-checkconf???????//檢查配置文件
unbound-checkconf: no errors in /etc/unbound/unbound.conf
[root@serverb ~]# unbound-control-setup??//首次起服務前,執行此命令生成密鑰文件
.. ..
3)啟動unbound服務
[root@serverb ~]# firewall-cmd??--permanent??--add-service=dns????????//開放DNS訪問
[root@serverb ~]# firewall-cmd??--reload??????//重載防火墻
[root@serverb ~]# systemctl??enable??unbound??--now?????????//啟用unbound服務
4)客戶端查詢DNS記錄
[student@work?~]$ host??serverc.lab.example.com??serverb??//向serverb查詢serverc的IP地址
.. ..
serverc.lab.example.com has address 172.25.250.12
5)管理緩存的DNS數據
[root@serverb ~]# unbound-control???dump_cache???????//查看緩存的解析記錄
[root@serverb ~]# unbound-control??flush??work.lab.example.com??//清除緩存的某個域名的解析記錄
[root@serverb ~]# unbound-control??flush??lab.example.com??//清除緩存的某個區域的所有解析記錄