www.baidu.com的全稱域名FQDN實際上是www.baidu.com.即後面實際上省略了點,其中,www往往是某主機的別名,.baidu.com.是域名的全路徑,路徑中列出了各級域。
域名的分層結構如圖:
DNS服務器能夠將域名解析爲ip,以實現主機間通信。下面將介紹各級服務器的搭建,並模擬客戶端查詢某域名的完整解析過程:
根域的DNS服務器:172.18.0.107 centos7.3 綠色提示符
com域的DNS服務器:172.18.0.109 centos7.3 紫色提示符
magedu.com域的主DNS服務器:172.18.250.110 centos7.4 白色提示符root@localhost
magedu.com域的從DNS服務器:172.18.22.200 centos7.3 藍色提示符
運營商的DNS服務器:172.18.0.106 centos6 ×××提示符 ,用作轉發服務器
客戶端:172.18.18.5 rhel5 白色提示符root@rhel5
一 搭建magedu.com域的主DNS服務器(172.18.250.110)
1 檢查SELINUX
當前SELINUX的狀態爲Enforcing
打開SELINUX配置文件
將其修改爲disabled或permissive,即禁用SELINUX,保存退出
但是上面對配置文件的修改需重啓後才能生效,可以用setenforce 0臨時禁用SELINUX
2 檢查防火牆
查看防火牆狀態
當前防火牆的狀態爲開啓
systemctl disable firewalld.service開機時禁用防火牆
systemctl stop firewalld.service臨時禁用防火牆
3 開啓DNS服務
臨時啓用DNS服務
將DNS服務設爲開機啓用
4 配置DNS
打開DNS總配置文件
假設本機ip爲127.0.0.1 192.168.25.107 172.18.0.107
listen-on定義當前DNS服務器監聽的端口,選項有
本機某個ip:只監聽本機某個ip的3306端口
localhost:本機所有ip,即監聽本機所有ip的3306端口
any:監聽所有網段的ip的3306端口,實際上這個選項對listen-on來說,相當於localhost,註釋listen-on時相當於any
allow-query定義當前DNS服務器爲哪些主機提供查詢服務,選項有
本機某個ip:本機某個ip,即只允許本機的某個ip查詢,只爲本機某個ip提供查詢服務。此時本機既是客戶端又是服務器。
某個網段ip:某個網段ip,即只允許某個網段ip查詢,只爲某個網段ip提供查詢服務,例如172.18.0.0/16
localhost:本機所有ip,即只允許本機的所有ip查詢,只爲本機所有ip提供查詢服務,此時本機既是客戶端又是服務器。
any:所有網段的ip,即允許所有網段的ip查詢,爲所有網段的ip提供查詢服務,註釋allow-query時相當於any
圖中表示監聽本機所有ip,爲所有網段的ip提供查詢服務
之所以所有的DNS服務器都知道根,是因爲在每個DNS服務器上都默認定義了一個根域,根域的數據庫文件/var/named/named.ca中指定了根域的DNS服務器,即互聯網上的13組DNS服務器。DNS服務器上對根域的定義與其他域的定義不同,其他域在其數據庫文件中將DNS服務器指向當前DNS服務器。
打開根域的數據庫文件/var/named/named.ca
NS記錄表示出了爲本域及本域的子域提供名字解析服務的所有DNS服務器,NS記錄定義了DNS服務器的名稱,A記錄定義了與某個DNS服務器相對應的ip
如圖表示互聯網上的根域有一一臺DNS服務器的ip爲199.7.91.3
所以,將/var/named/named.ca的內容改成上圖所示後,172.18.250.110就會認爲根是172.18.0.107
實驗中除了客戶端和72.18.0.107之外的所有主機都需要將根指向172.18.0.107,可以用scp命令將改好的/var/named/named.ca文件拷貝到各主機,也可直接修改相應主機上的/var/named/named.ca,
172.18.22.200將根指向172.18.0.107
172.18.0.106將根指向172.18.0.107
打開172.18.0.108上根域的數據庫文件,將根指向172.18.0.107
打開區域數據庫配置文件
建立magedu.com域:
雙引號內爲域名;
類型爲master,表示主DNS服務器;
file指定區域解析數據庫文件的相對路徑(相對於/var/named)和名稱,即爲/var/named/magedu.com.zone
打開並建立區域解析數據庫文件/var/named/magedu.com.zone
區域解析庫:由衆多資源記錄組成,記錄類型包括A、 SOA、NS、CNAME等
資源記錄定義的格式:
語法:name [TTL] IN rr_type value
名字 生命期 關鍵字 記錄類型 值
下面以上圖爲例介紹區域解析庫的使用:
(1)
TTL是記錄緩存的有效期, 默認以s爲單位
圖中$TTKL爲全局TTL,對下面的每條記錄都有效,每條記錄也可以單獨定義局部TTL,只對當前記錄有效。
(2)SOA記錄:
@即名字,表示本域的域名,也可以寫成magedu.com.
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲SOA
SOA記錄的第一個值是主DNS服務器(有且僅有一個)的名稱,不一定與DNS服務器的主機名保持一致,只要與下面的A記錄匹配,即能夠將該名稱解析成ip地址即可
SOA記錄的第二個值是DNS服務器管理員的郵箱地址,郵箱地址本來應該寫成[email protected].但@有特殊含義,所以將@換成點
SOA記錄的第三個值由一系列定義組成
其中,
區域數據庫的版本號,一旦數據庫發生更改,就需要手動增大該序列號。
主從複製時,系統判斷區域數據庫文件的內容是否發生變化時並不是真正去檢查區域數據庫文件的內容,而是看序列號是否增大,也就是說即使區域數據庫文件的內容未發生變化,只要序列號增大,系統就認爲區域數據庫文件的內容發生了變化。
每個域可能有多臺DNS服務器,其中有且僅有一臺主DNS服務器,主DNS服務器的數據庫可讀可寫,從DNS服務器的數據庫只能讀,即只能供用戶查詢。從DNS服務器數據庫的內容來自於主DNS服務器數據庫, 主從DNS服務器數據庫的同步(即主從複製)機制有pull和push兩種:
push:主DNS數據庫重啓服務時,會檢查序列號。當序列號變化,即區域數據庫文件的內容發生變化,主DNS數據庫就會將新版數據庫push至從DNS數據庫,否則不執行push動作。
pull:從DNS數據庫會週期性的到主DNS數據庫檢查序列號。當序列號變化,即區域數據庫文件的內容發生變化,從DNS數據庫就會將新版數據庫pull至自己的數據庫,否則不執行pull動作。
refresh定義了主從複製時每個週期的長度,默認以秒爲單位
若因爲網絡原因,導致pull動作失敗,則從DNS服務器過一段時間後會再去嘗試。retry定義了這段時間的長度,默認以秒爲單位
若主從DNS服務器的數據庫超過expire時間仍未同步,則從DNS服務器數據庫中的內容將過期
若用戶查詢DNS服務器時輸入錯誤,如寫成wwwwww.magedu.com,DNS服務器查不到該條記錄,用戶的機器上就會緩存該錯誤查詢結果,下次再輸成該錯誤結果時,就不用到DNS服務器上再去查詢。miminum定義錯誤查詢結果的緩存時間
(3)NS記錄
NS記錄表示出了爲本域及本域的子域提供名字解析服務的所有DNS服務器
NS記錄的名字爲空時,會默認其名字爲本域的域名,即magedu.com
也可以寫成magedu.com.或@
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲NS
在本例中,NS記錄的值是當前域DNS服務器的名稱,不一定與DNS服務器的主機名保持一致,只要與下面的A記錄匹配,即能夠將該名稱解析成ip地址即可
(4)A記錄
DNS服務器的A記錄
在本例中,A記錄的名字爲dns1,系統會默認將其補全爲dns1.magedu.com.
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲A
值爲192.168.25.107,與上面的NS記錄匹配,將DNS服務器名稱解析成ip地址,即當前域DNS服務器的ip爲192.168.25.107
主機的A記錄
在本例中,A記錄的名字爲websrv,系統會默認將其補全爲websrv.magedu.com.
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲A
值爲192.168.25.66,即主機websrv.magedu.com.的ip爲192.168.25.66
(5)別名記錄
在本例中,別名記錄的名字爲www,系統會默認將其補全爲www.magedu.com.
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲A
值爲websrv,系統會默認將其補全爲websrv.magedu.com. 即www.magedu.com.是主機websrv.magedu.com.的別名,然後配合上面的A記錄,可知ip爲192.168.25.66。當客戶端請求解析www.magedu.com這個別名對應的ip時,首先由別名記錄得到websrv.magedu.com. 然後由A記錄得到ip
172.18.18.5客戶端直接請求172.18.250.110解析www.magedu.com,因爲172.18.250.110有magedu.com域,在該域的數據庫文件中有www.magedu.com的主機記錄,即可解析爲ip
二 搭建magedu.com域的從DNS服務器(172.18.22.200)
1 檢查SELINUX
當前SELINUX的狀態爲Permissive,即已禁用
2 檢查防火牆
當前防火牆的狀態爲已禁用
3 配置DNS
打開總配置文件
圖中表示監聽本機所有ip,爲所有網段的ip提供查詢服務
建立magedu.com域:
雙引號內爲域名,注意從服務器的域名仍爲magedu.com;
類型爲slave,表示從DNS服務器;
file指定區域解析數據庫文件的相對路徑(相對於/var/named)和名稱,即爲/var/named/slaves/magedu.com.zone,從DNS服務器的區域解析數據庫文件放在/var/named/slaves下
重啓服務後主從DNS服務器的數據庫文件自動同步
172.18.18.5客戶端直接請求172.18.22.200解析www.magedu.com,因爲172.18.22.200是172.18.250.110的從DNS服務器,所以其數據庫文件與主DNS服務器上數據庫文件的內容相同,雖然沒有magedu.com域,但有該域的數據庫文件,即有www.magedu.com的主機記錄,就可解析爲ip
三 搭建com域的DNS服務器(172.18.0.109 )
1 檢查SELINUX和防火牆
檢查設置方式可以參考上面,此處不再贅述
2 DNS設置
打開區域數據庫配置文件
建立com域:
雙引號內爲域名;
類型爲master,表示主DNS服務器;
file指定區域解析數據庫文件的相對路徑(相對於/var/named)和名稱,即爲/var/named/com.zone
進入/var/named目錄
打開並建立區域解析數據庫文件com.zone
NS記錄表示出了爲本域及本域的子域提供名字解析服務的所有DNS服務器
NS記錄的名字爲magedu,系統會默認補上本域的域名,即magedu.com.表示爲本域的子域magedu.com提供名字解析服務的DNS服務器
不可以寫成@,因爲@表示本域域名
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲NS
在本例中,NS記錄的值是本域的子域的DNS服務器的名稱,不一定與DNS服務器的主機名保持一致,只要與下面的A記錄匹配,即能夠將該名稱解析成ip地址即可
DNS服務器的A記錄
在本例中,A記錄的名字爲dns1,系統會默認將其補全爲dns1.magedu.com.
TTL爲空,表示繼承全局TTL,即生命期爲86400s
關鍵字IN
記錄類型爲A
值爲172.18.250.46,與上面的NS記錄匹配,將DNS服務器名稱解析成ip地址,即本域的子域的DNS服務器的ip爲192.168.25.107
本例中,com域將其子域magedu.com的DNS服務器委派給172.18.250.46
重啓服務
客戶端請求172.18.0.109將www.magedu.com解析成ip地址,172.18.0.109只有com域,而com域的子域是magedu.com域,根據區域數據庫文件得到magedu.com域的DNS服務器爲172.18.250.46,172.18.250.46就有www.magedu.com的主機記錄,即可解析爲ip
四 搭建根域的DNS服務器(172.18.0.107)
1 檢查SELINUX和防火牆
檢查設置方式可以參考上面,此處不再贅述
2 DNS設置
打開區域數據庫配置文件
建立根域:
雙引號內爲域名;
類型爲master,表示主DNS服務器;
file指定區域解析數據庫文件的相對路徑(相對於/var/named)和名稱,即爲/var/named/root.zone
打開總配置文件
圖中表示監聽本機所有ip,爲所有網段的ip提供查詢服務
因爲172.18.0.107要當根,刪掉真正的根的定義
打開並建立區域解析數據庫文件/var/named/root.zone
根域將其子域com的DNS服務器委派給172.18.0.109
重啓服務
客戶端請求172.18.0.107將www.magedu.com解析成ip地址,172.18.0.107只有根域,根域的子域是com域,根據區域數據庫文件得到com域的DNS服務器爲172.18.0.109,172.18.0.109只有com域,com域的子域是magedu.com域,根據區域數據庫文件得到magedu.com域的DNS服務器爲172.18.250.110,172.18.250.110就有www.magedu.com的主機記錄,即可解析爲ip
五 搭建運營商的DNS服務器(172.18.0.106 )
172.18.0.106用作轉發服務器
當DNS服務器上沒有某域,且未專門設置轉發時,默認將請求轉發至根域DNS服務器;當DNS服務器上沒有某域,且專門設置了轉發時,轉發方式有全局轉發和特定區域轉發兩種類型:
全局轉發:
將轉發語句寫在option中,表示全局轉發,即客戶端向DNS服務器A提出解析請求後,
若DNS服務器A上有相應的域,則由DNS服務器A進行解析,並將解析後的結果返回給客戶端;
若DNS服務器A上沒有相應的域,則全部轉發到option中指定的DNS服務器B上:
(1)若設置轉發規則爲first,則將請求轉發給DNS服務器B後,B未找到,則DNS服務器A會採用默認的轉發路徑,即將請求轉發至根域DNS服務器
(2)若設置轉發規則爲only,則將請求轉發給DNS服務器B後,B未找到),則DNS服務器A直接將解析失敗的結果返回給客戶端
示例:
圖中表示若當前DNS服務器上沒有相應的域,則全部轉發到option中指定的DNS服務器:192.168.25.108
特定區域轉發:
將轉發語句寫在zone中,表示特定區域轉發,即客戶端向DNS服務器A提出解析請求後,
若DNS服務器A上有相應的域,則由DNS服務器A進行解析,並將解析後的結果返回給客戶端;
若DNS服務器A上沒有相應的域,且該域未設置轉發,則DNS服務器A會採用默認的轉發路徑,即將請求轉發至根域DNS服務器
若DNS服務器A上沒有相應的域,且該域設置了轉發(即存在一個類型爲forward、域名與要解析的域相同的域)則轉發到zone中指定的DNS服務器B上:
(1)若設置轉發規則爲first,則將請求轉發給DNS服務器B後,B未找到,則DNS服務器A會採用默認的轉發路徑,即將請求轉發至根域DNS服務器
(2)若設置轉發規則爲only,則將請求轉發給DNS服務器B後,B未找到,則DNS服務器A直接將解析失敗的結果返回給客戶端
示例:
vim /etc/named/rfc1912.zones
圖中表示若當前DNS服務器上沒有wang.com域,且爲wang.com設置了轉發,即將請求轉發到192.168.25.108
在本實驗中,172.18.0.106用作轉發服務器,並未專門設置轉發,直接採用的是默認的轉發路徑,即將請求轉發至根域DNS服務器:
vim /etc/named.conf
實際上定義了一種特殊的特定區域轉發,即當前DNS服務器要查詢根域時,會讀該語句塊,將請求轉發至該語句塊中定義的DNS服務器:在/var/named/named.ca中定義了該DNS服務器的ip
172.18.0.106已將根指向172.18.0.107
重啓服務
客戶端請求172.18.0.106將www.magedu.com解析成ip地址失敗
客戶端請求172.18.0.106將www.magedu.com解析成ip地址,172.18.0.106上沒有與該主機相關的任何信息,則會將請求轉發到根,即172.18.0.107。172.18.0.107只有根域,根域的子域是com域,根據區域數據庫文件得到com域的DNS服務器爲172.18.0.109,172.18.0.109只有com域,com域的子域是magedu.com域,根據區域數據庫文件得到magedu.com域的DNS服務器爲172.18.250.110,172.18.250.110就有www.magedu.com的主機記錄,即可解析爲ip