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服務


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

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

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

zone "domain_name" IN {        type forward;        forwarders only | first;        forwarders { ip_addr;ip_addr,......};        };

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

zone "Domain_Name"  IN {      type "master";      file "path";           allow-query { addr_match_list; };      allow-transfer { my_slave ; };      allow-update { add_match_list; };     .......... };

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

zone "Domain_Name" IN  {      type slave;      file "slave/path";      masters {  ip_addr; };      allow-transfer { addr_match_list; };      .......};

 VIEW語句的介紹:

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

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

$TTL time(默認爲秒)  @       IN      SOA     ns1.example.com.    admin.example.com. (                          序列號                          更新時間                          重試時間                          過期時間                          非權威相應TTL時間 )              IN  NS      ns1              IN  MX  5   mail  ns1         IN  A       172.16.88.1  www         IN  A       172.16.88.1  mail        IN  A       172.16.88.5

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

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

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

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

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

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

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

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

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


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

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

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

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

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

# vim /var/named/fin.example.com.zone  $TTL 86400  @       IN      SOA     ns.fin.example.com.     admin.fin.example.com. (                          2013041201                          1H                          5M                          7D                          3D )              IN  NS      ns              IN  MX 5    mail  ns          IN  A       172.16.88.20  www         IN  A       172.16.88.20  mail        IN  A       172.16.88.21  ftp         IN  A       172.16.88.22  注:因爲在這裏我們採用的是手動配置區域數據文件,所以別忘記更改屬組爲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地址:

# vim /etc/named.conf  options {      directory "/var/named";  };   acl internal {            ##定義acl列表,當來自172.16.0.0/16和127.0.0.0/8的網段均爲內網用戶      172.16.0.0/16;      127.0.0.0/8;  };      view "internal" {                          ##定義內網主機所使用的解析區域文件          match-clients { internal; };          recurion yes;          zone "example.com" IN {              type masters;              file "internal.example.com.zone";          };      };            view "external" {                           ##定義外網主機所使用的解析區域文件          match-clients { any; };          recurion yes;          zone "example.com";              type master;              file "external.example.com.zone";          };      };

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

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

# vim  /var/named/internal.example.com.zone  $TTL  86400  @   IN  SOA ns1.example.com.    admin.example.com. (              2013041201              1H              5M              7D              3D )          IN  NS  ns1          IN  MX  5   mail  ns1     IN  A   172.16.88.1  mail    IN  A   172.16.88.5  www     IN  A   172.16.88.1

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

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

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

# chgrp named  internal.example.com.zone  external.example.com.zone  # 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網絡主機上進行測試:

本文出自 “See you next year CA” 博客,請務必保留此出處http://guodayong.blog.51cto.com/263451/1177295

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