友情提示:文中實驗平臺vmware 10 + Centos6.6 X86_64,涉及的命令只爲實現工作模型,不做爲生產服務器配置依據。
內容概括:
1.DNS的工作模型
2.DNS正反解析實現
3.DNS主從同步
4.DNS子域授權和簡單的安全機制
5.DNS中view的使用
一.DNS細微知識點
1.1)DNS: Domain Name Service,是個應用層協議,做域名與IP地址之間互相解析。
使用UDP53做DNS查詢應答
使用TCP53做DNS服務器間區域文件傳送。
1.2)域名的結構示意圖:
1.3)主機做域名查找的流程:
Client-->本地host文件---->Local Cache--->(recursion遞歸)網絡運營商DNS Server----->Server Cache ---->(iteration迭代)internet DNS domain name server
*任一環節找到後停止後面位置查找
Centos 6.6上 host文件位置:/etc/hosts
windows上host位置:%WINDOWS%/system32/drivers/etc/hosts
1.4)查找的方式:
遞歸查找:recursion,發起域名查找後,必會得到一個明確的答案。
迭代查找:iteration,發起域名查找後,得到的是個參考答案,還需根據參考答案,查詢別的服務器。
主機和本地運營商提供的DNS服務器之間是 遞歸查詢,一次查詢請求發出,得到明確答案。
運營商DNS代替客戶端去查詢地址時,先搜索根區域,從全球13臺根服務器中選一個最快的,進程查詢,例如查找www.51cto.com, 先查找根服務器,根服務器迴應讓去找.com域名服務器和.com服務器的地址, 運營商DNS再去找.com域名服務器,.com服務器迴應讓去查找51cto.com域名服務器和51cto.com.域名服務器地址,運營商DNS再去找51cto.com域名服務器,取得www.51cto.com對應的ip地址,並返回給客戶端,這就是 迭代查詢。
1.5)域名服務器的合法化
假設 jx.santan.com 爲santan.com域內的一臺dns服務器,它若想合法化:
(1)有個本地互聯網運用商提供的可路由的ip地址
(2)正常工作的提供域名查詢的軟件和santan.com域的資源文件。
(3)在上級域名.com服務器中有關於santan.com域的NS記錄和A記錄(見下面的“DNS子域授權”)。
1.6)DNS服務器的類型:
主DNS服務器:維護所負責解析的域內解析庫服務器,庫文件由管理員維護的。
輔助DNS服務器:從主DNS服務器或其他的從DNS服務器那裏“區域傳送”解析庫
緩存DNS服務器:帶局域網內主機做DNS查詢,將結果暫存在緩存中,便於下次快速查找。
1.7)DNS服務器維護的資源記錄類型:
資源記錄:Resource Record, RR
記錄類型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,而必須爲解析庫的第一條記錄;
A:internet Address,標明:FQDN對應的IP地址。
AAAA: 標明:FQDN對應的IPV6地址
PTR: PoinTeR,反向記錄,標明:IP地址對應的FQDN
NS: Name Server,標明當前區域的DNS服務器
CNAME:Canonical Name,別名記錄
MX: Mail eXchanger,郵件交換記錄,定義區域內的郵件服務器。
1.8)提供DNS服務的軟件
軟件:bind,
二.DNS正反解析模型的實現
* 請關閉防火牆和selinux,以下配置僅做爲實現DNS工作模型,你不要想的太多。
Test01.lijun.com上配置:
2.1)安裝bind軟件:
建議使用yum安裝,bind,bind-libs,bind-utils這三個包是必裝的。bind-chroot在實驗環境下建議不安裝。
2.2)配置文件的設定:
DNS的配置文件分爲主配置文件和區域配置文件,其中主配置文件在/etc/named.conf其中最少應該包含三段信息,分別爲根、local和127.0.0.1的配置,區域配置文件存放在/var/name的路徑下,每個文件用於指定一個區域,名稱要同在/etc/named.conf中配置的一致。
bind軟件運行後的進程名爲named,進程屬主爲named,所以請注意建立的區域文件的權限和所有組的設定。
[root@Test01 named]# vim lijun.com.zone 該文件是lijun.com域的正向解析文件
[root@Test01 named]# vim 192.168.100.zone 該文件是lijun.com域的反向解析文件
反向解析文件中存在SOA,NS和PTR記錄
2.4)啓動服務
啓動服務前,請使用自帶的named-checkzone檢查區域文件,使用named-checkconf檢查bind的配置文件。
2.5)驗證配置
三.DNS主從同步模型的實現
注意: 每個域之能有一臺主DNS服務器,從DNS服務器可有多臺。
主DNS服務器的區域文件由管理員手工維護,從DNS服務器的區域文件從主DNS服務器上通過區域傳送過來。當然也可從DNS服務器通過區域傳送同步給從DNS服務器。
從DNS服務器bind的配置文件中指定的區域文件的名稱一定要同主DNS服務器上設定的區域文件的名稱一致。
* 請關閉防火牆和selinux,以下配置僅做爲實現DNS工作模型,你不要想的太多。
3.1)主DNS服務器上添加關於輔助dns服務器的NS和A記錄
[root@Test01 named]# vim /var/named/lijun.com.zone
[root@Test01 named]# vim /var/named/192.168.100.zone
3.2)輔助DNS的設定
安裝bind程序包:
[root@Test02 ~]# yum install bind -y
編寫bind主配置文件:
3.3)測試下輔助DNS的解析
3.5)修改主DNS服務器中設定,觀察主輔DNS服務器間傳送
四.DNS子域授權和簡單的安全機制
在DNS管理方面,通過子域授權,分離父域的工作負擔,將子域的工作交給子域DNS服務器去維護,這樣可減輕父DNS的壓力,同時實現分佈式部署DNS,避免因父域DNS服務器或網絡故障導致整個域名下DNS的解析故障。
這裏實現的是DNS正向解析的子區授權,反向解析的子域授權沒做成功。
實現步驟:
1)在父域的主DNS服務器上添加關於子域的NS記錄和A記錄。
2)在子域DNS服務器上做好本區域的區域解析
默認情況下:父域知道子域DNS服務器位置,而子域DNS服務器不知道父域DNS服務器。可以在子域DNS服務器上指定轉發的方式,解決這種默認動作。
3)子域DNS服務器上配置關於父域的指定轉發。
格式:
zone "ZONE_NAME" IN {
type forward;
forward only | first ;
//在only 和 first中選一個,only表示爲只發給下面的forwarders 後的地址,不管它理不理
//first表示先發給下面forwarders 後的地址,它不理我,在去找根迭代解析
forwarders { father-zone-name-ns-ip; };
// 這是指明父域ns的IP地址
};
4)本次實驗中添加DNS簡單的安全機制
allow-query {}; //指明解釋查詢的地址範圍,這是個白名單
allow-transfer {}:允許區域傳送的主機,也就是填寫從DNS地址的;白名單;
allow-recursion {}: 允許遞歸的主機,DNS服務器應對所屬區域下的主機做遞歸查詢,其它的不做遞歸詢;
allow-update {}: 允許更新區域數據庫中的內容,這個不應允許任何的主機做該操作;
5)DNS中做地址範圍匹配,定義好後在配置文件中可被多次調用:
注意:只能先定義後使用,一般在配置文件最開始的地方,一般放置在option中。
格式:
acl acl_name {
ip;
ip;
net/prelen;
};
例如:
acl dg {
192.168.100.0/24;
127.0.0.0/8;
};
bind有四個內置的acl:
none: 沒有一個主機;
any: 任意主機;
local: 本機;
localnet: 本機的IP同掩碼運算後得到的網絡地址;
實驗場景:L公司的lijun.com.域下,建立zhuzao.lijun.com.子域名給下屬分公司使用,要求:父域服務器可對子域內主機域名的解析,子域DNS服務器可解析父域內主機域名的解析。
* 請關閉防火牆和selinux,以下配置僅做爲實現DNS工作模型,你不要想的太多。
父域主DNS服務器Test01上:
1)yum安裝bind程序包,見上,再次不重複。
2)設定配置文件和區域解析文件
[root@Test01 named]# vim lijun.com.zone
子域主DNS服務器Test02上:
1)yum 安裝bind略
2)配置主配置文件/etc/named.conf
3)建立區域解析文件:
在父區域上測試對子區域的解析:
五:DNS中view的使用:
大家都知道在我們天朝,網絡運營商是各自爲營的,雖有中間的互通網絡,但是面對洶涌的用戶數據流,那點中間網絡帶寬瞬時會被佔滿,帶來就是用戶體驗的不好,尤其是遊戲運營,電商特注意用戶體驗。
解決方式:1)在不同省份不同的運營商機房中分別配置服務器。2)將服務器放置於雙線機房。使用智能DNS,根據用戶來源網絡運營商地址的不同,對相同域名的解析給出各自運營商網絡主機的地址。 借用下面的圖:都是對WWW.XBAO.COM這個域名的請求,因客戶來源不同的運營商,那麼中間的DNS主機,會智能進行判斷,X信的用戶給予的解析地址爲10.100.100.1,而X通的用戶得到的解析地址爲192.168.1.100,雖然客戶請求解析的地址都是www.xbao.com。
當然要保證各個運營商服務器上網站內容一致性還需使用CDN技術,這就超出本文的內容範圍。
中間DNS服務器要達到上述的效果可以使用bind的view技術來實現,下面就是實驗過程。
view要點:
1)一個bind服務器可定義多個view,每個view中可定義一個或多個zone;
2)每個view用acl定義的地址來匹配一組客戶端;
3)多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件;
4) 一旦啓用了view,所有的zone都只能定義在view中;
5)只在匹配允許遞歸請求的客戶所在view中定義根區域;
6)客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表;先匹配的先處理,後續的就停止不再做匹配動作。
view格式:
view VIEW_NAME {
match-clients { ACL-NAME };
zone "zone-name" IN {
....
};
....
};
* 請關閉防火牆和selinux,以下配置僅做爲實現DNS工作模型,你不要想的太多。
1)中間DNS服務器配置網絡和安裝BIND軟件:
2)安裝bind並配置文件:
主配置文件:/etc/named.conf
局部配置文件:/etc/named.rfc1912.zones
3)定義區域解析文件:
4)測試機測試:
另一臺測試機地址
終於寫完了!!