DNS高級配置原理及配置、子域授權、view智能解析(二)

注:理論很重要,所以筆者希望博友能把DNS的工作原理理解清楚,這樣才能夠真正理解DNS是什麼?理論雖然枯燥,但很重要,配置很簡單,好了,廢話少說,書歸正傳:
       相信大家通過筆者關於“互聯網域名解析系統DNS的工作原理及相關服務配置”基本瞭解了DNS工作原理和簡單的配置,下面將介紹高級配置,在配置之前我們
來回顧下關於DNS一些常識及一些文件的配置格式。

       DNS所使用的協議及端口:TCP/53  UDP/53
DNS域名服務器主要用於解析FQDN和IP地址之間的轉換;

       FQDN-IP:正向解析(A記錄)
       IP-FQDN:反向解析(PTR指針)
rndc的controls語句

 

  1.    controls語句限定了rndc和正在運行的named進程之間如何進行交互,系統管理員可以用rndc向named進程發送信號並控制它。  
  2. rndc可以連接並控制啓動和停止named進程、轉儲named狀態、將named轉入調試模式。rndc是一個網絡程序,如果配置不當或不正確,來自互聯網上的用  
  3. 都可以連接並控制DNS服務,所以在配置rndc時,一定要謹慎!!  
  4. controls語法:  
  5.     controls {  
  6.         inet ip_addr port ip-port allow { address_match_list } keys { key_list };  
  7.     };  
  8. rndc用來於named通信的端口默認爲953, 
  9. 下面我們會通過rndc-confgen命令生成rndc和named之間使用驗證配置rndc,實現遠程控制DNS服務


如何設置根服務器的線索呢,格式爲:

  1. zone "." IN {  
  2.     type hint;  
  3.     file "path"      ##path指根服務器的區域文件,默認爲"/var/named/named.ca" 
  4. };  
  5. ”hint(線索)“是一個列出根域(".")服務器的DNS記錄的集合.需要用它們爲一個遞歸的、有緩存的named提供一個位置,從這個位置開始搜索其他站點的域  
  6. 信息。沒有根搜索,named只知道自己所屬的域,還有這個域的子域。 

如何設置一個轉發區呢,格式爲:

  1. zone "domain_name" IN {  
  2.       type forward;  
  3.       forwarders only | first;  
  4.       forwarders { ip_addr;ip_addr,......};  
  5.       }; 

我們知道如何配置一個區的主服務器的格式:

  1. zone "Domain_Name"  IN {  
  2.     type "master";  
  3.     file "path";       
  4.     allow-query { addr_match_list; };  
  5.     allow-transfer { my_slave ; };  
  6.     allow-update { add_match_list; };
  7. .......... 
  8. }; 

那如何配置一個區的從服務器的格式呢,是這個樣子滴:

  1. zone "Domain_Name" IN  {  
  2.     type slave;  
  3.     file "slave/path";  
  4.     masters {  ip_addr; };  
  5.     allow-transfer { addr_match_list; };  
  6.   .......
  7. };   

 VIEW語句的介紹:

  1. 通過view語句可以完成DNS的智能解析功能,並且靈活控制哪些客戶機能看到哪個view視圖的訪問控制列表。語法:  
  2.     view view-name {  
  3.         match-clients { address_match_list };  
  4.         match-destinations { address_match_list };  
  5.         match-recursive-only yes|no 
  6.         view_option;...  
  7.         zone_statement;...  
  8.     };  
  9. 其實說白了,view視圖是根據match_clients提供的查詢報文的IP地址進行過濾,一般用於讓一個站點的DNS數據分爲內外不同的結果,下面  
  10. 我們會通過模擬外網和內網實現view,並讓DNS提供智能解析。  

那麼接下來不就是配置正向區域文件及反向區域文件對吧,格式還記得嗎?
正向(A)解析區域文件格式:

  1. $TTL time(默認爲秒)  
  2. @       IN      SOA     ns1.example.com.    admin.example.com. (  
  3.                         序列號  
  4.                         更新時間  
  5.                         重試時間  
  6.                         過期時間  
  7.                         非權威相應TTL時間 )  
  8.             IN  NS      ns1  
  9.             IN  MX  5   mail  
  10. ns1         IN  A       172.16.88.1  
  11. www         IN  A       172.16.88.1  
  12. mail        IN  A       172.16.88.5 

反向(PTR)區域配置文件格式

  1. $TTL time(默認爲秒)  
  2. @       IN      SOA     ns1.example.com.    admin.example.com. (  
  3.                         序列號  
  4.                         更新時間  
  5.                         重試時間  
  6.                         過期時間  
  7.                         非權威相應TTL時間 )  
  8.             IN  NS      ns1  
  9. 1           IN  PTR     ns1.example.com.  
  10. 1           IN  PTR     www.example.com.  
  11. 5           IN  PTR     mai.example.com. 

遞歸和非遞歸服務器的區別,來一塊來回想下它們之間的區別:

  1. 遞歸服務器工作模式:  
  2. 當客戶端發送DNS查詢請求時,遞歸服務器僅返回真實的答案或者錯誤消息(它自己跟蹤這些推薦的服務器,免除了客戶端這項任務)  
  3. 非遞歸服務器工作模式:  
  4. 當客戶端發送DNS查詢請求時,非遞歸服務器器會查詢緩存文件,如果有客戶端發送的請求結果,那麼就將結果返回給客戶端,否則,它並不直接返回答案給客戶端,  
  5. 而是推薦一個其他域的權威性服務器,所以發送請求的客戶端自己去查詢相應的域權威服務。 

下面就來介紹下關於子域授權的概念及如何實現子域的授權

  1. 我們知道DNS是以分佈式進行完成域名和IP地址解析的,進行子域授權其實就是在主域的基礎上劃分子域,並將權限賦予子域的某臺服務器,實現層次管理而已。  
  2. 創建子域,其實就是在原來權威結構(只是賦予給了本地例如"example.com")權威結構內:  
  3. 實現步驟如下:  
  4. 選擇本地環境中唯一的域名、確定兩臺或更多主機作爲新域的服務器、與父域(example.com)取得協調。  
  5. 注:父域在執行授權之前,應該覈查確定子域的域名服務器已啓動並正常運行。如果子域域名服務器沒有啓動,可能會造成父域在授權時產生"授權失敗等信息" 

下面就來配置如何實現子域授權:(example.com爲例實現子域授權)

  1. 域:example.com   
  2. 主DNS相關記錄信息:  
  3. 主DNS服務器:ns1.example.com(172.16.88.1/16)  
  4. www.example.com(172.16.88.1/16)   ##提供web服務器  
  5. mail.example.com(172.16.88.5/16) ##提供E-mail服務器  
  6.  
  7. 子域:fin.example.com   
  8. 子域DNS服務器:ns.fin.example.com(172.16.88.20/16)  
  9. 子域相關DNS記錄:  
  10. www.fin.example.com(172.16.88.20/16)     ##提供web服務器  
  11. mail.fin.example.com(172.16.88.21/16)    ##提供fin.example.com域內的E-mail電子郵件收發  
  12. ftp.fin.example.com(172.16.88.22/16)     ##提供FTP服務器,實現資源共享  

下面我們就來操作下如何在example.com域內實現子域授權:
查看當前系統是否安裝bind-libs和bind-utils軟件包,如果安裝則使用rpm -e卸載。這裏我們採用的是bind97版本,所以我使用yum來安裝。


Seq1:編輯正向區域文件,並添加如下內容並保存退出

  1. # vim /var/named/example.com.zone  
  2. $TTL time(默認爲秒)  
  3. @       IN      SOA     ns1.example.com.    admin.example.com. (  
  4.                         2013041201  
  5.                         1H  
  6.                         5M  
  7.                         7D  
  8.                         3D )  
  9.             IN  NS      ns1  
  10.             IN  MX  5   mail  
  11. ns1         IN  A       172.16.88.1  
  12. www         IN  A       172.16.88.1  
  13. mail        IN  A       172.16.88.5  
  14. fin         IN  NS      ns.fin     ##在這裏我們添加了一個子域(fin.example.com)並給出了相應的A記錄  
  15. ns.fin      IN  A       172.16.88.20 

Seq2:到172.16.88.20這臺主機上配置fin.example區域,並將DNS(/etc/resolv.conf)的nameserver改爲172.16.88.1即可

  1. # rpm -e bind-libs bind-utils  
  2. 這裏我們使用的bind97版本,所以在這裏我們將系統默認安裝bind-libs和bind-utils軟件包卸載,並通過YUM來安裝bind97版本的軟件包  
  3. # yum install bind97 bind-utils -y  
  4. # mv /etc/named.conf /etc/named.conf.bak  
  5. 這裏我們採用手動配置named.conf主配置文件,所以把bind97版軟件安裝所產生的配置文件給予重命名:  
  6. # vim /etc/named.conf  
  7. options {  
  8.         directory "/var/named" ;              ##指明區域文件保存的位置  
  9. };  
  10. zone "." IN                                   ##定義根區域文件名稱  
  11.         type hint;  
  12.         file "named.ca";                      ##默認存放在/var/named/named.ca  
  13. };  
  14. zone "localhost" IN {  
  15.         type master;  
  16.         file "named.localhost";                
  17. };  
  18. zone "0.0.127.in-addr.arpa" IN {  
  19.         type master;  
  20.         file "named.loopback";  
  21. };  
  22. zone "fin.example.com" IN {                       ##定義fin.example.com正向區域配置文件  
  23.         type master;                           ##類型爲master(主DNS)  
  24.         file "fin.example.com.zone";              ##fin.example.com域正向區域配置文件存放名稱(/var/named/fin.example.com.zone)  
  25. };  
  26. 注:然後執行將named.conf配置文件的屬組及權限分別更改爲named和640即可:  
  27. # chgrp named /etc/named.conf && chmod 640 /etc/named.conf 

Seq3:創建fin.example.comz正向區域配置文件

  1. # vim /var/named/fin.example.com.zone  
  2. $TTL 86400  
  3. @       IN      SOA     ns.fin.example.com.     admin.fin.example.com. (  
  4.                         2013041201  
  5.                         1H  
  6.                         5M  
  7.                         7D  
  8.                         3D )  
  9.             IN  NS      ns  
  10.             IN  MX 5    mail  
  11. ns          IN  A       172.16.88.20  
  12. www         IN  A       172.16.88.20  
  13. mail        IN  A       172.16.88.21  
  14. ftp         IN  A       172.16.88.22  
  15. 注:因爲在這裏我們採用的是手動配置區域數據文件,所以別忘記更改屬組爲named及權限爲640噢 

Seq4:這樣一個基於example.com域名授權的fin.example.com就完成,下面我們就可以進行測試:
在主DNS服務器上測試(172.16.88.1)

然後到子域fin.example.com查詢www.fin.example.com的A記錄

 
下面我們用windows分別使用主DNS和子域查詢www.fin.example.com的A記錄

下一個問題,如何同view視圖實現DNS智能解析:(內網和外網)
說明:將來自172.16.0.0/16和127.0.0.0/8的網段的IP爲內網的主機,其它網絡的IP或未知IP均爲外網的主機,所以我們使用acl來定義控制列表
在配置之前我們需要對eth0配置第二IP地址:

  1. # vim /etc/named.conf  
  2. options {  
  3.     directory "/var/named";  
  4. };  
  5.  
  6. acl internal {            ##定義acl列表,當來自172.16.0.0/16和127.0.0.0/8的網段均爲內網用戶  
  7.     172.16.0.0/16;  
  8.     127.0.0.0/8;  
  9. };  
  10.     view "internal" {                          ##定義內網主機所使用的解析區域文件  
  11.         match-clients { internal; };  
  12.         recurion yes;  
  13.         zone "example.com" IN {  
  14.             type masters;  
  15.             file "internal.example.com.zone";  
  16.         };  
  17.     };  
  18.       
  19.     view "external" {                           ##定義外網主機所使用的解析區域文件  
  20.         match-clients { any; };  
  21.         recurion yes;  
  22.         zone "example.com";  
  23.             type master;  
  24.             file "external.example.com.zone";  
  25.         };  
  26.     }; 

Seq2:使用named-checkconf來檢測主配置文件是否有存在語法錯誤
# named-checkconf  /etc/named.conf

Seq3:分別創建電信網和聯通網所需要的區域數據文件:
內網(internal)用戶訪問example.com域服務器所使用的正向解析區域文件:

  1. # vim  /var/named/internal.example.com.zone  
  2. $TTL  86400  
  3. @   IN  SOA ns1.example.com.    admin.example.com. (  
  4.             2013041201  
  5.             1H  
  6.             5M  
  7.             7D  
  8.             3D )  
  9.         IN  NS  ns1  
  10.         IN  MX  5   mail  
  11. ns1     IN  A   172.16.88.1  
  12. mail    IN  A   172.16.88.5  
  13. www     IN  A   172.16.88.1 

外網(external)用戶訪問example.com域服務器所使用的正向解析區域數據文件

  1. # vim  /var/named/external.example.com.zone  
  2. $TTL  86400  
  3. @       IN      SOA     ns1.example.com.        admin.example.com. (  
  4.                         2013041201  
  5.                         1H  
  6.                         5M  
  7.                         7D  
  8.                         3D )  
  9.         IN      NS      ns1  
  10.         IN      MX  5   mail  
  11. ns1     IN      A       172.16.88.1  
  12. www     IN      A       192.168.0.1  
  13. mail    IN      A       192.168.0.5 

Seq4:將internal和external所使用的解析區域數據文件的屬組及權限分別改爲named和640:

  1. # chgrp named  internal.example.com.zone  external.example.com.zone  
  2. # chmod 640  internal.example.com.zone  external.example.com.zone 

Seq5:使用named-checkzone分別檢測internal和external所使用的區域數據文件是否存在語法錯誤
# named-checkzone "example.com" /var/named/internal.example.com.zone
# named-checkzone "example.com" /var/named/external.example.com.zone

Seq6:使用named進程,並將執行開機自動啓動
# service named restart && chkconfig named on

Seq7:分別在172.16.0.0/16和192.168.0.0/24網段上進行測試,並查看結果
現在172.16.0.0/16主機進行測試:

 然後再192.168.0.0/24網絡主機上進行測試:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章