linux 使用bind部署DNS


bind適合公網DNS,局域網的DNS建議使用pdns-recursor軟件。

安裝bind軟件

 rpm -qa | grep '^bind'   #查詢bind主程序是否安裝過
 yum -y install bind  bind-chroot #安裝bind軟件主程序

部署DNS前的准備知識

DNS客戶端知識

  • /etc/hosts :這個是最早的 hostname 對應 IP 的檔案;
  • /etc/resolv.conf :這個重要!就是 ISP 的 DNS 服務器 IP 記錄處;
  • /etc/nsswitch.conf:這個檔案則是在『決定』先要使用 /etc/hosts 還是 /etc/resolv.conf 的設定!
[root@www ~]# host [-a] FQDN [server]
[root@www ~]# host -l domain [server]
選項與參數:
-a :代表列出該主機所有的相關信息,包括 IP、TTL 與除錯訊息等等
-l :若后面接的那個 domain 設定允許 allow-transfer 時,則列出該 domain 所管理的所有主機名對應數據!
server:這個參數可有可無,當想要利用非 /etc/resolv.conf 內的 DNS 主機來查詢主機名與 IP 的對應時,就可以利用這個參數了!
[root@www ~]# nslookup [FQDN] [server]
[root@www ~]# nslookup
選項與參數:
1. 可以直接在 nslookup 加上待查詢的主機名或者是 IP ,[server] 可有可無;
2. 如果在 nslookup 后面沒有加上任何主機名或 IP ,那將進入 nslookup 的查詢功能
   在 nslookup 的查詢功能當中,可以輸入其他參數來進行特殊查詢,例如:
   set type=any :列出所有的信息『正解方面配置文件』
   set type=mx  :列出與 mx 相關的信息!
[root@www ~]# dig [options] FQDN [@server]
選項與參數:
@server :如果不以 /etc/resolv.conf 的設定來作為 DNS 查詢,可在此填入其他的 IP
options:相關的參數很多,主要有 +trace, -t type 以及 -x 三者最常用
  +trace :就是從 . 開始追蹤,在 19.1.2 里面談過了!回頭瞧瞧去!
  -t type:查詢的數據主要有 mx, ns, soa 等類型.
  -x     :查詢反解信息,非常重要的項目!

DNS數據類型

#dig查詢結果解析
[domain]   [ttl]          IN [[RR type]  [RR data]]
[待查數據] [暫存時間(秒)] IN [[資源類型] [資源內容]]

# 常見的正解文件 RR 相關信息
[domain]    IN  [[RR type]  [RR data]]
主機名.   IN  A           IPv4 的 IP 地址
主機名.   IN  AAAA        IPv6 的 IP 地址
領域名.   IN  NS          管理這個領域名的服務器主機名字.
領域名.   IN  SOA         管理這個領域名的七個重要參數(容后說明)
領域名.   IN  MX          順序數字  接收郵件的服務器主機名字
主機別名.   IN  CNAME       實際代表這個主機別名的主機名字
# 反解文件記錄的RR數據
[root@www ~]# dig -x 120.114.100.101
;; ANSWER SECTION:
101.100.114.120.in-addr.arpa. 3600 IN   PTR     www.ksu.edu.tw.

SOA七字段的含義

  1. Master DNS 服務器主機名:這個領域主要是哪部 DNS 作為 master 的意思。在本例中, dns1.ksu.edu.tw 為 ksu.edu.tw 這個領域的主要 DNS 服務器啰;
  2. 管理員的 email:那么管理員的 email 為何?發生問題可以聯絡這個管理員。要注意的是, 由於 @ 在數據庫檔案中是有特別意義的,因此這里就將 abuse@mail.ksu.edu.tw 改寫成abuse.mail.ksu.edu.tw 。
  3. 序號 (Serial):這個序號代表的是這個數據庫檔案的新舊,序號越大代表越新。 當 slave 要判斷是否主動下載新的數據庫時,就以序號是否比 slave 上的還要新來判斷,若是則下載,若不是則不下載。 所以當你修訂了數據庫內容時,記得要將這個數值放大才行! 為了方便用戶記憶,通常序號都會使用日期格式『YYYYMMDDNU』來記憶,例如昆山科大的 2010080369 序號代表 2010/08/03 當天的第 69 次更新的感覺。不過,序號不可大於 2 的 32 次方,亦即必須小於 4294967296 才行喔。
  4. 更新頻率 (Refresh):那么啥時 slave 會去向 master 要求數據更新的判斷? 就是這個數值定義的。昆山科大的 DNS 設定每 1800 秒進行一次 slave 向 master 要求數據更新。那每次 slave 去更新時, 如果發現序號沒有比較大,那就不會下載數據庫檔案。
  5. 失敗重新嘗試時間 (Retry):如果因為某些因素,導致 slave 無法對 master 達成聯機, 那么在多久的時間內,slave 會嘗試重新聯機到 master。在昆山科大的設定中,900 秒會重新嘗試一次。意思是說,每 1800 秒 slave 會主動向 master 聯機,但如果該次聯機沒有成功,那接下來嘗試聯機的時間會變成 900 秒。若后來有成功,則又會恢復到 1800 秒才再一次聯機。
  6. 失效時間 (Expire):如果一直失敗嘗試時間,持續聯機到達這個設定值時限, 那么 slave 將不再繼續嘗試聯機,並且嘗試刪除這份下載的 zone file 信息。昆山科大設定為 604800 秒。意思是說,當聯機一直失敗,每 900 秒嘗試到達 604800 秒后,昆山科大的 slave 將不再更新,只能等待系統管理員的處理。
  7. 快取時間 (Minumum TTL):如果這個數據庫 zone file 中,每筆 RR 記錄都沒有寫到 TTL 快取時間的話,那么就以這個 SOA 的設定值為主。

部署cache-only DNS的配置

[root@www ~]# vim /etc/named.conf
// 在預設的情況下,這個檔案會去讀取 /etc/named.rfc1912.zones 這個領域定義檔
// 所以請記得要修改成底下的樣式啊!
options {
        listen-on port 53  { any; };     //可不設定,代表全部接受
        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; };     //可不設定,代表全部接受
        recursion yes;                   //將自己視為客戶端的一種查詢模式
        forward only;                    //可暫時不設定
        forwarders {                     //是重點!
                114.114.114.114;              //先用電信的114當上層
                114.114.115.115;           //第二台DNS轉發上層地址
        };
};  //最終記得要結尾符號!
/etc/init.d/named restart

部署可查詢根域以及有自己正反域的DNS服務器

Master DNS部署

[root@www ~]# vim /etc/named.conf
//在此文件中”//“是注釋的意思
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };   // 不許別的salve進行數據同步,沒有slave則開啟這行,否則注釋;
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "centos.jet" IN {            // 這個 zone 的名稱
        type master;                // 是什么類型
        file "named.centos.jet";  // 檔案放在哪里
        allow-transfer { 192.168.31.15; };  // 在這里新增 slave 的 IP
};

zone "31.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.31";
        allow-transfer { 192.168.31.15; };  // 在這里新增 slave 的 IP
};
# 這個文件為根據的查詢區域,保持默認即可。
vim /var/named/named.ca
[root@www ~]# vim /var/named/named.centos.jet
; 與整個領域相關性較高的設定包括 NS, A, MX, SOA 等標志的設定處!
$TTL    600
@                       IN SOA   master.centos.jet. jet.www.centos.jet. (2020032101 3H 15M 1W 1D ) ; 
@                       IN NS    master.centos.jet.  ;  Master DNS 服務器名稱
@                       IN NS    slave.centos.jet.  ;  Slave DNS 服務器名稱
master.centos.jet.    IN A     192.168.31.16         ;  Master DNS 服務器 IP
slave.centos.jet.    IN A   192.168.31.15    ; slave DNS服務器IP
@                       IN MX 10 www.centos.jet.     ;  領域名的郵件服務器

www.centos.jet.       IN A     192.168.31.16
linux.centos.jet.     IN CNAME www.centos.jet.
ftp.centos.jet.       IN CNAME www.centos.jet.
forum.centos.jet.     IN CNAME www.centos.jet.
slave.centos.jet.       IN A    192.168.31.16
clientlinux.centos.jet. IN A    192.168.31.15
[root@www ~]# vim /var/named/named.192.168.31
$TTL    600
@       IN SOA  master.centos.jet. jet.www.centos.jet. (2020032101 3H 15M 1W 1D )
@       IN NS   master.centos.jet.
@       IN NS   slave.centos.jet.
16     IN PTR  master.centos.jet.  ; 將原本的 A 改成 PTR 的標志而已
15      IN PTR  slave.centos.jet.
16     IN PTR  www.centos.jet.     ; 這些是特定的 IP 對應
10      IN PTR  slave.centos.jet.
20      IN PTR  winxp.centos.jet.
30      IN PTR  win7.centos.jet.
101     IN PTR  dhcp101.centos.jet.  
102     IN PTR  dhcp102.centos.jet.
/etc/init.d/named restart

Slave DNS部署

[root@www ~]# vim /etc/named.conf
//在此文件中”//“是注釋的意思
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };   // 不許別的salve進行數據同步,沒有slave則開啟這行,否則注釋;
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "centos.jet" IN {            // 這個 zone 的名稱
        type slave;                // 是什么類型
        file "slaves/named.centos.jet";  // 檔案放在哪里
        masters { 192.168.31.16; };  // 在這里新增 slave 的 IP
};

zone "31.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/named.192.168.31";
        masters { 192.168.31.16; };  // 在這里新增 slave 的 IP
};
name.ca 需要原來就存在,其他正反區域解析文件不需要存在,只需要目錄權限和屬主屬組正確即可,如下:
[root@study05 named]# ls -ld /var/named/slaves/
drwxrwx---. 2 named named 4096 6月  19 2019 /var/named/slaves/
[root@study05 named]#
[root@study05 named]# /etc/init.d/named start
Generating /etc/rndc.key:                                  [確定]
啟動 named:                                               [確定]
[root@study05 named]# tail -f /var/log/messages
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: Transfer started.
Mar 21 21:36:10 study05 named[2298]: transfer of 'centos.jet/IN' from 192.168.31.16#53: connected using 192.168.31.15#45781
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: transferred serial 2020032102
Mar 21 21:36:10 study05 named[2298]: transfer of 'centos.jet/IN' from 192.168.31.16#53: Transfer completed: 1 messages, 13 records, 315 bytes, 0.007 secs (45000 bytes/sec)
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: sending notifies (serial 2020032102)
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: Transfer started.
Mar 21 21:36:11 study05 named[2298]: transfer of '31.168.192.in-addr.arpa/IN' from 192.168.31.16#53: connected using 192.168.31.15#35925
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: transferred serial 2020032102
Mar 21 21:36:11 study05 named[2298]: transfer of '31.168.192.in-addr.arpa/IN' from 192.168.31.16#53: Transfer completed: 1 messages, 12 records, 334 bytes, 0.001 secs (334000 bytes/sec)
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: sending notifies (serial 2020032102)
^C
[root@study05 named]# cd /var/named/slaves/
[root@study05 slaves]# ll
總用量 8
-rw-r--r--. 1 named named 571 3月  21 21:36 named.192.168.31
-rw-r--r--. 1 named named 524 3月  21 21:36 named.centos.jet
[root@study05 slaves]#

部署如上DNS的子域DNS

# 上層DNS服務器的改動很簡單,只需新增Master服務器 zone file 的 NS 與 A 即可。

[root@www ~]# vim /var/named/named.centos.jet
@                       IN SOA   master.centos.jet. jet.www.centos.jet. (
                                 2020032103 3H 15M 1W 1D )
# 上面的 SOA 部分序號加大,底下新增這兩行即可 (原本的數據都保留不動)!
niki.centos.jet.      IN NS    dns.niki.centos.jet.
dns.niki.centos.jet.  IN A     192.168.31.14

[root@www ~]# /etc/init.d/named restart
[root@www ~]# tail -n 30 /var/log/messages | grep named
Mar  21 14:22:36 www named[9564]: zone centos.jet/IN: loaded serial 2020032103
# 登錄檔的關鍵是上面的序號部分~必須是我們填寫的新的序號才對!

[root@www ~]# dig dns.niki.centos.vbird @127.0.0.1
# 你會發現是錯誤的!找不到 A 很正常,因為子域服務器還未建立。
#下層 DNS 服務器:需要有完整的 zone 相關設定.
# 1. 修改 named.conf ,增加 zone 的參數,假設檔名為 named.niki.centos.jet
[root@niki ~]# vim /etc/named.conf
....(前面省略)....
zone "niki.centos.jet" IN {
        type master;
        file "named.niki.centos.jet";
};

# 2. 建立 named.niki.centos.jet
[root@niki ~]# vim /var/named/named.niki.centos.jet
$TTL   600
@      IN SOA   dns.niki.centos.jet. root.niki.centos.jet. (2020032101 3H 15M 1W 1D )
@      IN NS    dns.niki.centos.jet.
dns    IN A     192.168.31.14
www    IN A     192.168.31.14
@      IN MX 10 www.niki.centos.jet.
@      IN A     192.168.31.14
# 為了簡化整個版面,所以都使用 hostname 而非 FQDN!請見諒!

# 3. 啟動並觀察相關登錄信息
[root@niki ~]# /etc/init.d/named restart
[root@niki ~]# tail -n 30 /var/log/messages | grep named
....(前面省略)....
zone niki.centos.jet/IN: loaded serial 2020032103

....(底下省略)....

# 同時,記得處理一下防火牆的放行問題!否則測試會失敗!!

[root@niki ~]# dig www.niki.centos.jet @192.168.31.16

# 上述的動作必須要有響應才行!否則就會出問題~

依不同接口給予不同的 DNS 解析地址: view 功能的應用

想象一個環境,以我們目前的局域網絡服務器來說,我的 master.centos.jet 有兩個接口,分別是 192.168.31.16/24 (對內) 及 100.3.2.3/24 (對外),那當我外邊的用戶想要了解到 master.centos.jet 這部服務器的 IP 時,取得的竟然是 192.168.31.16,因此還得要透過 NAT 才能聯機到該接口,但明明 192.168.31.16 與外部的 100.3.2.3 是同一台服務器主機嘛!干嘛還得要經過 NAT 轉到內部接口呢?有沒有辦法讓外部的查詢找到 master.centos.jet 是 100.3.2.3 而內部的找到則回應 192.168.31.16 呢?可以的!那就透過 view 的功能!
那么 view 要怎么處理呢?其實就是讓不同來源的用戶,能夠取得他們自己的 zone 響應就是了。舉例來說,當用戶來自 130.0.0.1 時,這個來源不可能是內部 (192.168.31.16/24) ,因此這個來源就會使用外部的 zone file 內容來響應。 因此,我們就得要准備同一個 zone 需要兩個不同的設定,再將個別的設定帶入自己的客戶端查詢當中。

現在我們針對這個概念,對於上邊部署的DNS,設定 view 的原則是這樣的:

  • 建立一個名為 intranet 的名字,這個名字代表客戶端為 192.168.31.0/24 的來源;
  • 建立一個名為 internet 的名字,這個名字代表客戶端為非 192.168.31.0/24 的其他來源
  • intranet 使用的 zone file 為本章前面各小節所建立的 zone filename,internet 使用的 zone filename 則在原本的檔名后面累加 inter 的擴展名,並修訂各標志的結果。
[root@www ~]# vim /etc/named.conf
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };
};

acl intranet { 192.168.31.0/24; };        <==針對 intranet 給予的來源 IP 指定
acl internet { ! 192.168.31.0/24; any; }; <==加上驚嘆號 (!) 代表反向選擇的意思

view "lan" {                            <==只是一個名字,代表的是內網
        match-clients { "intranet"; };  <==吻合這個來源的才使用底下的 zone
        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "centos.jet" IN {
                type master;
                file "named.centos.jet";
                allow-transfer { 192.168.31.15; };
        };

        zone "31.168.192.in-addr.arpa" IN {
                type master;
                file "named.192.168.31";
                allow-transfer { 192.168.31.15; };
        };
};

view "wan" {                           <==同樣,只是個名字而已!
        match-clients { "internet"; }; <==代表的則是外網的 internet 來源
        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "centos.jet" IN {
                type master;
                file "named.centos.jet.inter"; <==檔名必須與原有的不同!
        };
        // 外網因為沒有使用到內網的 IP,所以 IP 反解部分可以不寫於此
};
[root@www ~]# cd /var/named
[root@www named]# cp -a named.centos.jet named.centos.jet.inter
[root@www named]# vim named.centos.jet.inter

$TTL    600
@                       IN SOA   master.centos.vbird. vbird.www.centos.vbird. (2020032103 3H 15M 1W 1D )
@                       IN NS    master.centos.jet.
master.centos.jet.    IN A     100.3.2.3
@                       IN MX 10 www.centos.jet.

www.centos.jet.       IN A     100.3.2.3
linux.centos.jet.     IN CNAME www.centos.jet.
ftp.centos.jet.       IN CNAME www.centos.jet.
forum.centos.jet.     IN CNAME www.centos.jet.
workstation.centos.jet. IN A    100.3.2.3

[root@www named]# /etc/init.d/named restart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM