DNS服務器分類與bind-chroot服務配置

1. DNS服務器分類

    DNS服務器從業務邏輯上一般分爲權威服務器與緩存服務器。權威服務器直接負責對域名進行解析,各種記錄,比如A記錄,CNAME記錄就是寫在權威服務器的配置文件;緩存服務器負責向上級DNS服務器轉發客戶端的查詢請求,同時將查詢結果進行緩存,緩存服務器上不進行域名解析的配置。

1.1 權威服務器

    權威服務器分爲主服務器,從服務器,隱形服務器。

1.1.1 主服務器

    Master (Primary) Name Servers,即主服務器,負責加載本地DNS配置文件。
主服務器
    配置方法:
    在named.conf的區域配置中進行聲明:

// example.com fragment from named.conf 
// defines this server as a zone master
zone "example.com" in{
	type master;
	file "pri.example.com";
};
1.1.2 從服務器

    Slave Name Servers,即從服務器,使用區域傳輸檢索區域的權威服務器。
從服務器
    從服務器通過區域傳輸(zone transfer)從主服務器或其他從服務器獲得區域數據。主服務器與從服務器的主要區別就是:從服務器通過區域傳輸獲取其區域數據,而主服務器從本地文件系統獲取其區域數據。前面兩句話好像有點囉嗦了。
    那麼,什麼情況下,一臺從服務器會成爲其他從服務器的區域傳輸源呢?
    如果你想隱藏主服務器,那麼就需要將從服務器放置在防火牆public區域來對外提供服務。爲了讓服務存在彈性,可以使用2臺從服務器。第2臺從服務器可以從主服務器同步數據,也可以從第1臺從服務器同步數據。當第1臺從服務器與主服務器同步數據後,默認會向第2臺從服務器發送NOTIFY消息開始配置同步,這就導致了一點點延時。
    從屬服務器必須定期發送刷新查詢,以確定區域內容是否已更新。通過發送對該區域的SOA記錄的查詢並檢查序列號是否已更新來完成此操作。
    配製方法:
    從服務器中namd.conf配置如下

// example.com fragment from named.conf 
// defines this server as a zone slave
zone "example.com" in{
	type slave;
	file "sec/sec.example.com";
	masters {192.168.23.17;};
};
1.1.3 隱身服務器

    Stealth Name Server,又名DMZ 服務器或 Hidden Master服務器。隱身服務器被定義爲沒有出現在該域的任何公共可見 NS記錄中的名稱服務器。隱身服務器可以大致定義爲具有以下特徵:
    1.某組織需要一個公共DNS才能訪問其公共服務,例如Web,郵件,ftp等。
    2.某組織不希望整個世界通過查詢或DNS服務而威脅到其內部主機。
隱身服務器
    上圖爲隱身服務器的拓撲。Public DNS提供權威響應,包括公共可見的服務,它不得接受來自隱身服務器的傳輸數據。
    典型的Public DNS配置如下:

; public zone master file
; provides minimal public visibility of external services
example.com.  IN      SOA   ns.example.com. root.example.com. (
                              2003080800 ; se = serial number
                              3h         ; ref = refresh
                              15m        ; ret = update retry
                              3w         ; ex = expiry
                              3h      ; min = minimum
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.
              IN      MX  10  mail.example.com.
ns1           IN      A       192.168.254.1
ns2           IN      A       192.168.254.2
mail          IN      A       192.168.254.3
www           IN      A       192.168.254.4
ftp           IN      A       192.168.254.5

    隱身服務器配置爲提供可見的內部和外部服務,提供遞歸查詢和所有其他方式的其他服務。配置文件如下:

; private zone master file used by stealth server(s)
; provides public and private services and hosts
example.com.  IN      SOA   ns.example.com. root.example.com. (
                              2003080800 ; se = serial number
                              3h         ; ref = refresh
                              15m        ; ret = update retry
                              3w         ; ex = expiry
                              3h         ; min = minimum
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.
              IN      MX  10  mail.example.com.
; public hosts
ns1           IN      A       192.168.254.1
ns2           IN      A       192.168.254.2
mail          IN      A       192.168.254.3
www           IN      A       192.168.254.4
ftp           IN      A       192.168.254.5
; private hosts 
joe           IN      A       192.168.254.6
bill          IN      A       192.168.254.7
fred          IN      A       192.168.254.8
....
accounting    IN      A       192.168.254.28
payroll       IN      A       192.168.254.29

    從配置文件可見,隱身服務器是出於安全需求而誕生的。

1.2 緩存服務器

    Caching Name Servers,即緩存服務器。緩存服務器從另一臺服務器(主服務器)獲取信息來響應主機查詢,然後將數據緩存到本地。在第二次或更多次請求相同數據時,緩存服務器將使用其本地緩存的數據進行響應,直到響應的生存時間(TTL)值到期爲止,此時緩存服務器將刷新來自區域主服務器的數據。
    如果緩存服務器直接從其區域主服務器獲取數據,則它的響應爲“權威”;如果數據是從其緩存中提供的,則響應爲“非權威”。
遞歸服務器
    上圖中,2爲遞歸查詢,3,4,5爲迭代查詢。可以看出遞歸查詢與迭代查詢的不同:遞歸查詢是接受客戶端的查詢委託,並將最終的查詢結果返回給客戶端;迭代查詢只能根據每次的查詢結果逐步推導出結果。舉個不恰當的例子,相當於去飯店點了一個宮保雞丁,點菜的過程類似遞歸查詢,客戶提出需求,飯店反饋一盤已經做好的菜;廚師按照菜譜到菜市場買雞胸肉,辣椒,胡蘿蔔,再回到廚房加工好,類似迭代查詢。如果宮保雞丁做多了,剛好賣給第二個人,第三個人……和緩存服務器很像嘛。唉,餓了。
    典型配置如下,注意recursion yes一定要開啓:

// options section fragment of named.conf 
// recursion yes is the default and may be omitted
options {
	directory "/var/named";
	version "not currently available";
	recursion yes;
};
// zone section
....
// the DOT indicates the root domain = all domains
zone "." IN {
	type hint;
	file "root.servers";
};

    在生產環境中,爲了更加規範和安全,權威服務器和緩存服務器應該使用不同主機。當然,在實驗中就無所謂了,使用1臺主機就可以了。

2. bind-chroot服務配置

2.1 安裝

    操作系統爲centos7,DNS服務器IP爲192.168.20.160。
    按照https://linux.cn/article-4735-1.html,按部就班執行可以了。需要注意的地方有兩點:
    1.因爲是chroot,所以自始至終需要修改的是/var/named/chroot/etc/named.conf,跟/etc/named.conf沒關係。/etc/namd.conf不需要修改。
    2.要注意/var/named/chroot/etc/named.conf的配置,這兩個地方如果不配置爲any,DNS服務會因爲沒有權限而無法使用:

listen-on port 53 { any; };
...
allow-query     { any; };

    安裝包,創建文件/文件夾

# yum install bind-chroot bind -y
# cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/
# touch /var/named/chroot/var/named/data/cache_dump.db
# touch /var/named/chroot/var/named/data/named_stats.txt
# touch /var/named/chroot/var/named/data/named_mem_stats.txt
# touch /var/named/chroot/var/named/data/named.run
# mkdir /var/named/chroot/var/named/dynamic
# touch /var/named/chroot/var/named/dynamic/managed-keys.bind
# chmod -R 777 /var/named/chroot/var/named/data
# chmod -R 777 /var/named/chroot/var/named/dynamic
# cp -p /etc/named.conf /var/named/chroot/etc/named.conf

    修改named.conf文件

# vi /var/named/chroot/etc/named.conf

zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "20.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.20.zone";
};

    配置域文件/var/named/chroot/var/named/example.local.zone

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum
 
;       Define the nameservers and the mail servers
 
               IN      NS      ns1.example.local.
               IN      NS      ns2.example.local.
               IN      A       192.168.20.244
               IN      MX      10 mx.example.local.
 
centos7          IN      A       192.168.20.244
mx               IN      A       192.168.20.160
ns1              IN      A       192.168.20.244
ns2              IN      A       192.168.20.160

    配置域文件/var/named/chroot/var/named/192.168.20.zone

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum
 
20.168.192.in-addr.arpa. IN      NS      centos7.example.local.
 
244.20.168.192.in-addr.arpa. IN PTR mx.example.local.
160.20.168.192.in-addr.arpa. IN PTR ns1.example.local.
244.20.168.192.in-addr.arpa. IN PTR ns2.example.local.

    初始化配置並啓動

# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
# systemctl stop named
# systemctl disable named
# systemctl start named-chroot
# systemctl enable named-chroot

2.2 驗證

    修改服務器DNS配置:

# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.20.160

    查詢結果如下:

# dig example.local

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> example.local
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36898
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c76ababfcccd3ebecc4dc24b5db15e776846d6b67e7b735a (good)
;; QUESTION SECTION:
;example.local.                 IN      A

;; ANSWER SECTION:
example.local.          86400   IN      A       192.168.20.244

;; AUTHORITY SECTION:
example.local.          86400   IN      NS      ns1.example.local.
example.local.          86400   IN      NS      ns2.example.local.

;; ADDITIONAL SECTION:
ns1.example.local.      86400   IN      A       192.168.20.244
ns2.example.local.      86400   IN      A       192.168.20.160

;; Query time: 3 msec
;; SERVER: 192.168.20.160#53(192.168.20.160)
;; WHEN: Thu Oct 24 16:19:03 CST 2019
;; MSG SIZE  rcvd: 154

    因爲同時開啓了緩存服務器的選項,所以也可以DNS到其他域名:

# dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19532
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 300f7df1701700c36fad4aaa5db15ed9c93066602704356e (good)
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       300     IN      A       220.181.38.150
www.a.shifen.com.       300     IN      A       220.181.38.149

;; AUTHORITY SECTION:
a.shifen.com.           1199    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns2.a.shifen.com.

;; ADDITIONAL SECTION:
ns5.a.shifen.com.       1199    IN      A       180.76.76.95
ns3.a.shifen.com.       1199    IN      A       112.80.255.253
ns2.a.shifen.com.       1199    IN      A       220.181.33.32
ns1.a.shifen.com.       1199    IN      A       61.135.165.224
ns4.a.shifen.com.       1199    IN      A       14.215.177.229

;; Query time: 1567 msec
;; SERVER: 192.168.20.160#53(192.168.20.160)
;; WHEN: Thu Oct 24 16:20:41 CST 2019
;; MSG SIZE  rcvd: 299

參考文檔
https://bind9.readthedocs.io/en/latest/
http://www.zytrax.com/books/dns/ch4/
https://www.isc.org/bind/
https://datatracker.ietf.org/doc/rfc1996
https://linux.cn/article-4735-1.html

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