1. 程式人生 > >CentOS DNS服務詳解與基於bind的智能DNS

CentOS DNS服務詳解與基於bind的智能DNS

cfa oba 主從 err 正向解析 程序 管理員 hint 查詢方式

Linux中通常使用bind來實現DNS服務器的架設

安裝bind

安裝DNS服務軟件Bind和相應工具包

#yum install bind bind-utils -y
#service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
資源記錄類型

起始授權結構(SOA):指出當前區域內誰是  主DNS服務器
主機(A):          將域名FQND映射到IP  正向解析
別名(CNAME):      將A記錄指向的域名 指向 另外一個域名
郵件交換器(MX):   指出當前區域內 SMTP郵件服務器IP
名稱服務器(NS):   指出當前區域內有幾個DNS服務器在提供服務
反向解析(PRT):      將IP解析為域名FQND

named.ca文件必須存在,否則不能啟動服務 。此文件是根服務器資源記錄。

bind主配置文件為/etc/named.conf

options {
        全局配置
       };

logging {
       日誌子系統配置
};

zone "." IN {
        區域定義:本機能夠為哪些zone進行解析,就要定義哪些zone
};

include "/etc/named.rfc1912.zones";  這是引入一個子配置文件,效果同等與在主配置文件上設置
include "/etc/named.root.key";
listen-on port 53 { 127.0.0.1; };#定義監聽IPV4端口及IP地址,如果是本機所有地址,填寫localhost
listen-on-v6 port 53 { ::1; };#定義監聽IPV6端口及IP地址,如果是本機所有地址,填寫localhost
 directory       "/var/named";#全局目錄
dump-file       "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     { any; };#允許查詢的IP地址,可以填寫網段192.168.4.0/24
allow-transfer  { none; };#允許哪些從DNS服務器IP進行復制,"none" 表示禁止區域傳輸
recursion yes;#是否允許遞歸查詢
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
 bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";

在named配置文件中,可以使用以下3種風格的註釋符號
       C style: /* */
       C++ style: // to end of line
       Unix style: # to end of line

主配置文件語法檢查命令

named-checkconf 或 service named configtest測試配置文件語法格式。沒有提示表示正確

以域名hunk.tech為例配置一個DNS服務器

正向區域

所謂的正向區域,指的是 FQDN > IP 轉換

創建正向區域步驟

1./etc/named.rfc1912.zones文件,添加一個區域

#vim /etc/named.rfc1912.zones
zone "hunk.tech" IN {
        type master;
        file "named.hunk.tech";
        allow-update { none; };
};

配置文件的格式是每行後面都必須加分號結束,並且有花括號的地方,花括號兩邊必須要有空格

type: 用於定義區域類型,此時只有一個DNS服務器,所以為master,type可選值為:hint(根)|master(主的)|slave(輔助的)|forward(轉發)
file:用於定義區域數據文件路徑,默認該文件保存在/var/named/目錄。

2.在主配置文件中定義的全局中directory設置參數的目錄中創建該區域數據庫文件

所屬組必須為named,且權限為640安全。所以建議復制一個原有的模板進行修改。
#cp -p named.localhost named.hunk.tech必須加-p保留原有權限屬性,
-rw-r-----. 1 root  named  152 Jun 21  2007 named.hunk.tech

3.在建該區域數據庫文件定義資源記錄

資源記錄的格式:
name        [ttl]      IN      RRtype      Value
資源記錄名  有效時間    IN       類型    資源記錄的值

文件內容如下:

$TTL 600
@       IN SOA  6-DNS-1 admin.hunk.tech. (
                    0       ; Serial版本號,RFC1912 2.2建議的格式為YYYYMMDDnn 其中nn為修訂號2018011801,不能超過10位。每次更改都要在原來的基礎上加上1
                    2H      ; 刷新時間,設置輔助 DNS多長時間與主 DNS進行Serial核對,此處為2小時。只通知給本區域解析庫文件中定義NS記錄的所有主機
                    10M     ; 重試時間,應該小於刷新時間,當輔助 DNS試圖獲取主 DNS Serial時,如果主 DNS未響應,多長時間重新進行檢查
                    1D      ; 決定輔助 DNS在沒有主 DNS的情況下權威地提供域名解析服務的時間長短
                    3H )    ; 在8.2版本之前,由於沒有獨立的 $TTL 指令,所以通過 SOA 最後一個字段來實現。但由於 BIND 8.2 後出現了 $TTL  指令,
                    該部分功能就不再由 SOA 的最後一個字段來負責,由 $TTL 全權負責,SOA 的最後一個字段專門負責 否定回答 ttl
@       IN      NS      6-DNS-1
@       IN      NS      6-DNS-2
6-DNS-1 IN      A       192.168.4.200
6-DNS-2 IN      A       192.168.4.201
6-WEB-1 IN      A       192.168.4.205
www     IN      CNAME   6-WEB-1
@       IN      MX      10      mail
mail    IN      A       192.168.4.205

解讀下:

$TTL 600 表示下面資源記錄ttl的值都為600秒。下面的每一條記錄都是可以繼承這行值的。
        不帶單位指的是秒,支持這些時間格式:D 天;H 小時;M 分鐘;

@       IN SOA  6-DNS-1 admin.hunk.tech
SOA: 只能有一個,而且必須是第一個資源記錄。SOA記錄定義了一個域內的主DNS是誰
         @: 通常可以簡寫為@,代表該區域名稱,
         6-DNS-1: 主DNS服務器的FQDN,這裏會自動補全此域後綴。第二種寫法6-DNS-1.hunk.tech.   註意最後這個點是必須加的。
         admin.hunk.tech:  此域的管理理郵件地址。@有特殊意義,所以用.表示

@
特殊字符“ @ ”,它就是 ORIGIN 的意思, $ORIGIN 後面定義的內容,如:$ORIGIN hunk.tech. 那之後使用 @ 來代替hunk.tech。
假如這個檔前面沒有定義 $ORIGIN 的話,那這個 @ 的值就以 named.conf 裏的 zone 為準。 

@  IN   NS      6-DNS-1
@  IN   NS      6-DNS-2
NS: 可以有多條,定義了這一個區域哪些是DNS服務器
對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄

6-DNS-1     IN    A       192.168.4.200
6-DNS-2     IN    A       192.168.4.201
6-WEB-1     IN    A       192.168.4.205

A: 只能定義在正向區域文件中
         一行記錄定義一臺主機對應的IP地址
         $GENERATE 1-9 HOST$ A 1.2.3.$  定義了一組數字範圍。$GENERATE 1-9定義了$的值為1-9,
                後面的$引用的就是的列表值,效果如下
                HOST1.hunk.tech.    600 IN  A   1.2.3.1
                HOST2.hunk.tech.    600 IN  A   1.2.3.2
                HOST3.hunk.tech.    600 IN  A   1.2.3.3
                HOST4.hunk.tech.    600 IN  A   1.2.3.4
                HOST5.hunk.tech.    600 IN  A   1.2.3.5
                HOST6.hunk.tech.    600 IN  A   1.2.3.6
                HOST7.hunk.tech.    600 IN  A   1.2.3.7
                HOST8.hunk.tech.    600 IN  A   1.2.3.8
                HOST9.hunk.tech.    600 IN  A   1.2.3.9

            *.hunk.tech. IN A 5.5.5.5  泛域名.可以用來防止用戶輸入錯誤的信息而能正確跳轉。
            比如說,wwwwwwww.hunk.tech 和www.hunk.tech 同樣是指向5.5.5.5

            多條A記錄指向不同的IP的話,等同使用DNS做負載均衡
            如:
            WEB     A   1.1.1.1
            WEB     A   2.2.2.2

6-WEB-1     IN    AAAA    1000::A:B:0:0
    AAAA:IPV6的資源記錄

@           IN    MX      10      mail
MX: 可以有多個
        用於標識smtp服務器
        包含優先級和FQDN。優先級:0-99,數字越小,級別越高;

www         IN    CNAME   6-WEB-1
CNAME:  可以有多個
        用於指定某臺主機的別名

每一臺主機都必須要有A記錄指向。

4.區域添加好後,使用區域庫命令檢查:

語法格式
named-checkzone "區域名稱" "區域文件"

#named-checkzone hunk.tech /var/named/named.hunk.tech 
zone hunk.tech/IN: loaded serial 0
OK

5.重新加載數據庫信息

rndc reload
使用rndc命令。請參考rndc命令。

反向區域

所謂的反向區域,指的是 IP > FQDN 轉換

專業名詞:PTR

創建反向區域步驟

1./etc/named.rfc1912.zones文件,添加一個PTR區域

區域名稱:網絡地址反寫.in-addr.arpa.
比如:
172.16.100. --> 100.16.172.in-addr.arpa.

zone "4.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.4";
        allow-update { none; };
};

2.在主配置文件中定義的全局設置中/var/named的目錄中創建該區域數據庫文件
所屬組必須為named,且權限為640安全。所以建議復制一個原有的模板進行修改。
#cp -p named.loopback named.192.168.4必須加-p保留原有權限屬性,
-rw-r-----. 1 root named 168 Dec 15 2009 named.192.168.4

3.在建該區域數據庫文件定義資源記錄

反向解析數據文件裏面只能有SOA、NS、PTR資源記錄,所有A記錄都要改為PTR記錄,
名稱為IP地址,IP地址可以寫全也可以簡寫,如果寫全則是IP地址反寫加上.in-addr.arpa.
例如:200.4.168.192.in-addr.arpa. PTR資源記錄的值為域名。
$TTL 600
@       IN SOA  6-DNS-1.hunk.tech. admin.hunk.tech. (
                                        0       ; serial   參考正向區域的說明
                                        600     ; refresh
                                        600     ; retry
                                        1D      ; expire
                                        3H )    ; minimum
        NS      6-DNS-1.hunk.tech.
        NS      6-DNS-2.hunk.tech.
200     PTR     6-DNS-1.hunk.tech.
201     PTR     6-DNS-2.hunk.tech.
205     PTR     6-WEB-1.hunk.tech.
206     PTR     7-WEB-2.hunk.tech.

格式上,註意是寫全域名哦,記得加上點.

4.區域添加好後,使用區域庫命令檢查:

語法格式
named-checkzone "區域名稱" "區域文件"

#named-checkzone 4.168.192.in-addr.arpa named.192.168.4
zone 4.168.192.in-addr.arpa/IN: loaded serial 0
OK

5.重新加載數據庫信息

rndc reload
使用rndc命令。請參考rndc命令。

通常在應用中,DNS的反向解析並不是很重要,可以不配置,當服務器中有域名作為郵件服務器時,此時可以配置反向解析,
因為郵件中過濾垃圾郵件的技術通常是解析郵箱地址,如果IP地址不能反解成一個域名則視為垃圾郵件。

測試工具與命令

rndc

語法格式:
rndc --> rndc (953/tcp)
rndc COMMAND

? COMMAND:
reload:             重載主配置文件和區域解析庫文件
reload zonename:    重載區域解析庫文件
retransfer zonename: 手動啟動區域傳送,而不管序列號是否增加
notify zonename:    重新對區域傳送發通知
reconfig:           重載主配置文件
querylog:           開啟或關閉查詢日誌文件/var/log/message.可以詳細到DNS查詢的細節。生產中不建議打開,除非用於排錯。
trace:              遞增debug一個級別
trace LEVEL:        指定使用的級別
notrace:           將調試級別設置為 0
flush:             清空DNS服務器的所有緩存記錄
freeze              關閉動態更新
thaw                啟用動態更新

dig

dig只用於測試dns系統,不會查詢hosts文件進行解析。
dig命令不會查緩存,而是直接查詢服務器
語法格式:

dig [-t type] name [@DNS服務器] [query options]

? 查詢選項:

+[no]trace:跟蹤解析過程 : dig magedu.com +trace

+[no]recurse:進行遞歸解析

測試反向解析:

dig -x IP        dig –t ptr reverseip.in-addr.arpa

#dig -x 192.168.4.205

<<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.4.205
global options: +cmd
Got answer:
 ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4233
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

 OPT PSEUDOSECTION:
 EDNS: version: 0, flags:; udp: 4096
 QUESTION SECTION:
205.4.168.192.in-addr.arpa. IN  PTR

 ANSWER SECTION:
205.4.168.192.in-addr.arpa. 600 IN  PTR 6-WEB-1.hunk.tech.
----------------------------------------------------------------------------

模擬區域傳送:
dig -t axfr ZONE_NAME @DNS服務器
dig -t axfr hunk.tech.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1

dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net

host

語法格式:
host [-t type] name [DNS服務器]

host –t NS hunk.tech 172.16.0.1
host –t soa hunk.tech
host –t mx hunk.tech
host –t axfr hunk.tech
host 1.2.3.4

#host -t A  6-WEB-1.hunk.tech 
6-WEB-1.hunk.tech has address 192.168.4.205

#host www.hunk.tech 192.168.4.200
Using domain server:
Name: 192.168.4.200
Address: 192.168.4.200#53
Aliases: 

www.hunk.tech is an alias for 6-WEB-1.hunk.tech.
6-WEB-1.hunk.tech has address 192.168.4.205

nslookup

語法格式:
nslookup [-option] [name | -] [DNS服務器]

? 交互式模式:
nslookup>
server IP: 指明使用哪個DNS server進行查詢
set q=RR_TYPE: 指明查詢的資源記錄類型
NAME: 要查詢的名稱
exit: 退出

C:\Users\Hunk>nslookup
默認服務器:  public1.alidns.com
Address:  223.5.5.5

> server 192.168.4.200
默認服務器:  [192.168.4.200]
Address:  192.168.4.200

> set q=a
> www.hunk.tech
服務器:  [192.168.4.200]
Address:  192.168.4.200

名稱:    6-WEB-1.hunk.tech
Addresses:  192.168.4.205
          172.18.8.10
Aliases:  www.hunk.tech

DNS查詢中出現aa標記的話,就是權威查詢,也就是說,查詢的資源記錄就是在那臺DNS服務器直接查出來,而不是通過其他DNS查詢。

子域 與 委派

是相對父域來說的,指域名中的每一個段。各子域之間用小數點分隔開。放在域名最後的子域稱為最高級子域,或稱為一級域,在它前面的子域稱為二級域。

比如:
www.nansan.sz.hunk.tech.

hunk.tech為父域
sz為hunk.tech的子域,為一級子域
nansan為hunk.tech的子域,為二級子域
www是主機

實現子域的幾個方法:

第一種:
在同一個zone區域中定義
www.nansan.sz   600 IN A 2.2.2.2
------------------------------------------------------------------------------

第二種:
是那種有子公司的公司,使用子域來管理的。
這種情況就是在主DNS服務器/etc/named.rfc1912.zones獨立一個zone區域,並生成文件,交由子域管理員管理此文件

zone "sz.hunk.tech" IN {
        type master;
        file "named.sz.hunk.tech";
        allow-update { none; };
};

zone區域文件named.sz.hunk.tech內容如下:
$ORIGIN .
$TTL 600    ; 10 minutes
sz.hunk.tech        IN SOA  6-DNS-1.sz.hunk.tech. admin.sz.hunk.tech. (
                21         ; serial
                7200       ; refresh (2 hours)
                600        ; retry (10 minutes)
                86400      ; expire (1 day)
                10800      ; minimum (3 hours)
                )
            NS  6-DNS-1.sz.hunk.tech.
$ORIGIN sz.hunk.tech.
6-DNS-1         A   192.168.4.200
7-WEB-2         A   7.7.7.7
www         CNAME   7-WEB-2

----------------------------------------------------------------------------------------------------------------------
第三種:委派
是那種有子公司,並且更大規模的公司,委派由子域來管理的。
這種情況就是獨立一臺DNS服務器專門用來解析該子域服務。/etc/named.rfc1912.zones獨立一個zone區域,並生成文件,交由子域管理員管理此文件

需要將此DNS的主配置文件/etc/named.conf中的以下2行設置,必須聲明為no,而不可以註釋。否則查詢失敗,返回SERVFAIL
        dnssec-enable no;
        dnssec-validation no;

zone "bj.hunk.tech" IN {
        type master;
        file "named.bj.hunk.tech";
        allow-update { none; };
};

zone區域文件named.bj.hunk.tech內容如下
$ORIGIN .
$TTL 600        ; 10 minutes
bj.hunk.tech            IN SOA  bj-dns.bj.hunk.tech. admin.bj.hunk.tech. (
                                23         ; serial
                                7200       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      bj-dns.bj.hunk.tech.
$ORIGIN bj.hunk.tech.
bj-dns                  A       192.168.4.204
bj-WEB-2                A       8.8.8.8
www

另外,在父域的DNS服務器上面的zone文件要定義委派的子域DNS的權威DNS服務器
bj                      NS      bj-dns                     #bj子域 的NS 記錄為bj.hunk.tech中定義的DNS服務器
bj-dns                  A       192.168.4.204               # 對應子域權威DNS的A記錄

註意了,如果設置了主從DNS,那麽,在委派的時候,也是需要把委派域中的DNS服務器同時添加記錄,否則可能會單點故障。

技術分享圖片

轉發(forward)服務器

轉發功能可以用來在一些服務器上產生一個大的緩存,從而減少到外部服務器鏈路上的流量。它可以使用在和internet沒有直接連接的內部網絡進行域名服務器上,
用來提供對外部域名的查詢。只有當服務器是非授權的,並且緩存中沒有相關記錄時,才會進行轉發

? 註意:被轉發的服務器需要能夠為請求者做遞歸,否則轉發請求不予進行。在主配置文件中定義以下:

recursion yes

? 註意:關閉dnssec功能:

dnssec-enable no;
dnssec-validation no;

(1) 全局轉發: 對非本機所負責解析區域的請求,全轉發給指定的服務器

語法格式:

Options { 
forward first 或 only; 
forwarders { ip;可以有多個,用;號隔開};
};

如:
        forward first;
        forwarders { 192.168.4.204; };

(2) 特定區域轉發:僅轉發對特定的區域的請求,比全局轉發優先級高

zone "ZONE_NAME" IN {
type forward;
forward first 或 only;
forwarders { ip;可以有多個,用;號隔開};
};

如:
zone "hunk.com" IN {
        type forward;
        forward only;
        forwarders { 192.168.4.204; };
};

轉發選項:

first :默認值。服務器首先請求轉發列表中的設定的DNS主機 ,如果轉發列表中的DNS主機不應答,該主機將自己從根DNS開始找應答。
only:只會請求轉發列表中的設定的DNS主機 ,如果轉發列表中的DNS主機不應答。也不會繼續找其他應答。

兩種查詢方法與根提示

從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間就是叠代查詢

遞歸查詢:客戶端得到結果要麽成功,要麽失敗。(本地客戶端和DNS服務直接交互,被請求的DNS服務器必須給出最終答案)

叠代查詢:服務器以相關參考性應答返回本地DNS。(DNS服務與DNS服務交互,得到的是參考答案)
 比如說,客戶機查詢www.hunk.tech的時候,第一次查詢根服務器時,根會告訴你去找tech吧,找到tech的時候,他會說你去找hunk吧,
 找到hunk的時候,發現www正好是自己管理的,就返回A記錄的IP地址了

根提示:一般情況下,DNS服務器之間的查詢方式都是叠代查詢。
如果要查詢域不是本地DNS負責的區域,那麽本地DNS就需要向外叠代查詢(叠代查詢從根域開始,如此,本地DNS就必須知道根域的IP地址)。根提示的功能可以讓本地DNS服務器查詢根域DNS服務器。

bind中ACL

這裏的ACL可別與之前學習的文件ACL權限混淆哦,當然,這也是bind安全管理的方法.

把一個或多個地址歸並為一個集合,並通過一個統一的名稱調用

與之前的shell編程中的函數一樣,把一條命令或多條命令放在一個函數體內,以後要用的時候,調用名稱即可。

語法格式:
acl acl_name {
ip;
net/prelen;
……
};

示例:
acl mynet {
    172.16.0.0/16;
    10.10.10.10;
};

這個ACL相當於mynet中定義了172.16.0.0/16網段所有主機,並且包含了10.10.10.10這一臺主機。

bind有四個內置的ACL

none: 沒有一個主機
any: 任意主機
localhost: 本機
localnet: 本機的IP同掩碼運算後得到的網絡地址

? 註意:只能先定義,後使用;因此一般定義在配置文件中,處於options的前面

智能DNS

實現的基礎就是view視圖

view是BIND9強大的新功能,允許名稱服務器根據詢問者的不同有區別的回答DNS查詢。特別是當運行拆分DNS設置而不需要運行多個服務器時特別有用。
每個視圖定義了一個將會在用戶的子集中見到的DNS名稱空間。

? 一個bind服務器可定義多個view,每個view中可定義一個或多個zone
? 每個view用來匹配一組客戶端
? 多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件

註意:

(1) 一旦啟用了view,所有的zone都只能定義在view中
(2) 僅在允許遞歸請求的客戶端所在view中定義根區域
(3) 客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
語法格式:

view VIEW_NAME {
    match-clients { ACL名稱; };
    zone hunk.tech {
    type master;
    file “named.hunk.tech”; };
    include "/etc/named.rfc1912.zones";
};

以下用一個實例來看ACL與view的搭配使用吧。不同地址解析不同的IP,即智能DNS
技術分享圖片

1.定義好ACL地址範圍,DNS讀取的時候,是由上往下匹配,所以,any必須放至最後
acl acl_net_192 { 192.168.4.0/24; };
acl acl_net_172 { 172.18.0.0/16; };
acl acl_other { any; };  
2.把公共相關的合並至/etc/named.rfc1912.zones文件
zone "." IN {
        type hint;
        file "named.ca";
};
3.各個zone文件內容如下:註意www對應的IP

#vim named1.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
6-WEB-1                 A       1.1.1.1                 #主要是觀察這裏
www                     CNAME   6-WEB-1
---------------------------------------------------------------------------

#vim named2.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
7-WEB-3                 A       2.2.2.2                 #主要是觀察這裏
www                     CNAME   7-WEB-3
------------------------------------------------------------------------------------------

#vim named3.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
6-WEB-1                 A       9.9.9.9                  #主要是觀察這裏
www 
4.在主配置文件/etc/named.conf定義view

view net_192 {
        match-clients { acl_net_192; };
        zone "hunk.tech" {
                type master;
                file "named1.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};

view net_172 {
        match-clients { acl_net_172; };
        zone "hunk.tech" {
                type master;
                file "named2.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};
view net_other {
        match-clients { acl_other; };
        zone "hunk.tech" {
                type master;
                file "named3.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};

include "/etc/named.root.key";
5.檢查語法:
#named-checkconf

#named-checkzone hunk.tech named1.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK

#named-checkzone hunk.tech named2.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK

#named-checkzone hunk.tech named3.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK
6.重載入配置文件
#rndc reload
server reload successful
7.測試
把DNS查詢日誌打開
#rndc querylog

找一臺192網段的主機進行測試

#ip -4 addr
    inet 192.168.4.207/24 brd 192.168.4.255 scope global ens33

從日誌可以看出來查詢匹配了view規則net_192
client 192.168.4.207#44511: view net_192: query: www.hunk.tech IN A +E (192.168.4.200)
技術分享圖片

找一臺172網段的主機進行測試

#ip -4 addr
    inet 172.18.103.222/16 brd 172.18.255.255 scope global dynamic ens36

從日誌可以看出來查詢匹配了view規則net_172
client 172.18.103.222#51655: view net_172: query: www.hunk.tech IN A +E (172.18.103.226)
技術分享圖片

在本機使用127.0.0.1地址進行測試

#dig www.hunk.tech @127.0.0.1

從日誌可以看出來查詢匹配了view規則net_other
client 127.0.0.1#43506: view net_other: query: www.hunk.tech IN A + (127.0.0.1)
技術分享圖片

至此,智能DNS範例已經完成。如果想獲取更新實際中的IP段,可以根據這個腳本實現。
聯通電信最新IP網段

安全加固BIND

chroot是Linux系統對應用程序的一種安全約束機制。在應用程序執行了chroot系統調用後,它的執行被限定到chroot後的目錄下。這樣操作後,在最差的情況下,如果BIND被入侵了,那麽黑客所拿到的目錄權限會被限制到chroot後的目錄,不會對系統的其他文件造成泄露或者被惡意修改。

只需要安裝yum install bind-chroot
之後會將原有目錄與配置文件使用BIND重新掛載到/var/named/chroot/下面

使用mount可以看出來

/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.conf on /var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)
/etc/services on /var/named/chroot/etc/services type none (rw,bind)
/etc/protocols on /var/named/chroot/etc/protocols type none (rw,bind)
/lib64/libnss_files-2.12.so on /var/named/chroot/lib64/libnss_files.so.2 type none (rw,bind)

CentOS DNS服務詳解與基於bind的智能DNS