注:理論很重要,所以筆者希望博友能把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網絡主機上進行測試: