注:理論很重要,所以筆者希望博友能把DNS的工作原理理解清楚,這樣才能夠真正理解DNS是什麼?理論雖然枯燥,但很重要,配置很簡單,好了,廢話少說,書歸正傳:
相信大家通過筆者關於“互聯網域名解析系統DNS的工作原理及相關服務配置”基本瞭解了DNS工作原理和簡單的配置,下面將介紹高級配置,在配置之前我們
來回顧下關於DNS一些常識及一些文件的配置格式。
DNS所使用的協議及端口:TCP/53 UDP/53
DNS域名服務器主要用於解析FQDN和IP地址之間的轉換;
FQDN-IP:正向解析(A記錄)
IP-FQDN:反向解析(PTR指針)
rndc的controls語句
controls語句限定了rndc和正在運行的named進程之間如何進行交互,系統管理員可以用rndc向named進程發送信號並控制它。
rndc可以連接並控制啓動和停止named進程、轉儲named狀態、將named轉入調試模式。rndc是一個網絡程序,如果配置不當或不正確,來自互聯網上的用
都可以連接並控制DNS服務,所以在配置rndc時,一定要謹慎!!
controls語法:
controls {
inet ip_addr port ip-port allow { address_match_list } keys { key_list };
};
rndc用來於named通信的端口默認爲953,
下面我們會通過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來安裝。
# 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