DNS主從配置詳解


實驗環境

主服務器:192.168.138.200
從服務器:192.168.138.201

bind安裝

安裝很簡單,執行以下命令即可:

	yum install -y bind

先看一下bind的版本和配置文件安裝路徑

	# named -v
	BIND 9.9.4-RedHat-9.9.4-51.el7_4.2 (Extended Support Version) 
	# rpm -qc bind
	/etc/logrotate.d/named
	/etc/named.conf					
	/etc/named.iscdlv.key
	/etc/named.rfc1912.zones		
	/etc/named.root.key
	/etc/rndc.conf						
	/etc/rndc.key
	/etc/sysconfig/named
	/var/named/named.ca
	/var/named/named.empty
	/var/named/named.localhost
	/var/named/named.loopback

/etc/named.conf,/etc/named.rfc1912.zones是主配置文件
/var/named/named.ca是根區域解析庫文件
/var/named/named.localhost,/var/named/named.loopback 是本機和環回地址的解析庫文件
rndc---remote name domain controller這是一個輔助管理工具,默認情況下與BIND安裝在同一主機,而且只能通過127.0.0.1連接named進程,監聽的端口號是TCP/953。

配置named.conf文件

這個配置文件主要分3段內容,options是全局配置,logging是日志配置,最后是區域解析庫配置以及所包含的區域解析庫文件配置。

# cat /etc/named.conf
// 2個雙//在這個配置文件中表示注釋
options {
	//下面一行表示監聽的端口和IP地址,其中2個{}內部兩端都要有空格,IP地址要以;號結尾。
	這里的IP地址至少應該包含宿主機可以和外部通迅的地址,也可以包含一個本地回環地址供rndc工具使用。也可以簡寫成{ any; }
	每個語句結束同樣都要以;結尾,如果不需要監聽IPV6可以注釋掉或刪除。
	listen-on port 53 { 192.168.138.200; 127.0.0.1; };
//	listen-on-v6 port 53 { ::1; };
	//下面一行表示named的工作目錄為/var/named
	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";
	//下面一行表示允許哪些主機查詢,改成any表示所有
	allow-query     { any; };
	//下面一行表示是否允許遞歸查詢.
	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";
	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
//.表示根區域,這個區域是必須要有的
zone "." IN {
	type hint;		  //hint表示根區域類型
	file "named.ca";	//指定根區域解析庫文件名稱所在位置,相對於/var/named
};
//指定區域文件名稱,所有的區域定義都可以寫在named.rfc1912.zones文件中
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置主服務器192.168.138.200

編輯/etc/named.rfc1912.zones在文件末尾添加一個正向解析區域和一個反向解析區域

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
	type master;
	file "named.empty";
	allow-update { none; };
};
// 添加一個正向解析區域,並定義為主服務器
zone "frank.com" IN {
    type master;			//master表示主服務器
    file "frank.com.zone";	//指明區域解析庫文件,相對於/var/named/
};
//添加一個反向解析區域,並定義為主服務器
zone "138.168.192.in-addr.arpa" IN {
    type master;
    file "138.zone";
};

創建frank.com.zone解析庫文件

# cat frank.com.zone 
$TTL 1D
frank.com.  IN SOA  ns.frank.com.    admin.frank.com. (
        201802001   ;序列號
        2H          ;刷新時間
        10M         ;重試時間間隔
        1W          ;過期時間
        1D          ;無法解析時否定答案的TTL值
        )
frank.com.       IN  NS  ns1.frank.com.
                 IN  NS  ns2.frank.com.
ns1.frank.com.   IN  A   192.168.138.200
ns2.frank.com.   IN  A   192.168.138.200
frank.com.       IN  MX 10  mx1.frank.com.
                 IN  MX 20  mx2.frank.com.
mx1.frank.com.   IN  A   192.168.138.200
mx2.frank.com.   IN  A   192.168.138.200
www.frank.com.   IN  A   192.168.138.200
master           IN CNAME   www.frank.com.
web              IN CNAME   www.frank.com.

創建138.zone反向解析庫文件

# cat 138.zone 
$TTL 1d
@    IN  SOA     ns.frank.com. admin.frank.com. (
            201802001;
            2H;
            10M;
            1W;
            1D;
            )
                IN      NS  ns.frank.com.
200             IN      PTR www.frank.com.
200             IN      PTR ns.frank.com.  

注意事項:

  • 區域解析庫文件第一個記錄必須是SOA記錄,必須有NS記錄並且正解區域要有NS記錄的A記錄,反解則不需要有NS記錄對應的A記錄。
  • $TTL表示宏定義,TTL(Time- To-Live),簡單的說它表示一條域名解析記錄在DNS服務器上緩存時間.當各地的DNS服務器接受到解析請求時,就會向域名指定的DNS服務器發出解析請求從而獲得解析記錄;在獲得這個記錄之后,記錄會在DNS服務器中保存一段時間,這段時間內如果再接到這個域名的解析請求,DNS服務器將不再向DNS服務器發出請求,而是直接返回剛才獲得的記錄;而這個記錄在DNS服務器上保留的時間,就是TTL值。
  • 這個文件里所有的域名結尾的點號一定不能省略。
  • 區域解析庫文件是放在/var/named目錄下,由named進程是以named用戶運行,還要讓區域解析庫文件的屬組為named。
# ll /var/named
total 16
drwxrwx---. 2 named named   23 Feb 21 13:10 data
drwxrwx---. 2 named named   60 Feb 21 13:11 dynamic
-rw-r-----. 1 root  named 2281 May 22  2017 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named   44 Feb 21 13:14 slaves

檢查配置文件語法

# named-checkconf
沒有任何輸出表示 /etc/named.conf沒有語法錯誤
# named-checkzone "frank.com" "frank.com.zone"
zone frank.com/IN: loaded serial 201802001
OK
正向解析區域檢查沒問題
# named-checkzone "frank.com" "138.zone"
zone frank.com/IN: loaded serial 201802001
OK
反向解析區域檢查沒問題

啟動named服務

# systemctl start named.service

使用dig測試
dig語法使用格式:
dig -t [SOA|A|CNAME|NS|MX] 域名 [@dns服務器地址] [+[no]trace|recurse]

dig -t A web.frank.com @192.168.138.200
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.frank.com @192.168.138.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40444
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.frank.com.			IN	A
;; 下面就是解析出的結果
;; ANSWER SECTION:
web.frank.com.		86400	IN	CNAME	www.frank.com.
www.frank.com.		86400	IN	A	192.168.138.200

;; AUTHORITY SECTION:
frank.com.		86400	IN	NS	ns2.frank.com.
frank.com.		86400	IN	NS	ns1.frank.com.

;; ADDITIONAL SECTION:
ns1.frank.com.		86400	IN	A	192.168.138.200
ns2.frank.com.		86400	IN	A	192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.200#53(192.168.138.200)
;; WHEN: Wed Feb 21 12:35:24 CST 2018
;; MSG SIZE  rcvd: 144

到此DNS主服務器已經配置完畢並能正常工作。

從服務器配置192.168.138.201

編輯/etc/named.conf將監聽IP地址改一下,其它不需要更改

# cat /etc/named.conf
	listen-on port 53 { 192.168.138.201; 127.0.0.1; };

編輯/etc/named.rfc1912.zones將type類型改為slave

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
	type master;
	file "named.empty";
	allow-update { none; };
};
// 添加一個正向解析區域,並定義為從服務器
zone "frank.com" IN {
    type slave;			//slave表示主服務器
    masters { 192.168.138.200; };	//指明主服務器IP
	file “slaves/frank.com";		//指定從服務區域解析庫文件位置
};
//添加一個反向解析區域,並定義為主服務器
zone "138.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.138.200; };
	file "slaves/138.zone";
};

注意事項:從服務器的區域解析庫文件應當是從主服務器加載過來的,所以無需創建區域解析庫文件。
啟動named服務

# systemctl start named

檢查/var/named/slaves目錄

# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 268 Feb 21 13:14 138.zone
-rw-r--r--. 1 named named 554 Feb 21 13:14 frank.com.zone

這2個文件是自動從主服務器同步過來的。
使用dig驗證

dig -t MX frank.com @192.168.138.201

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t MX frank.com @192.168.138.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57146
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;frank.com.			IN	MX

;; ANSWER SECTION:
frank.com.		86400	IN	MX	10 mx1.frank.com.
frank.com.		86400	IN	MX	20 mx2.frank.com.

;; AUTHORITY SECTION:
frank.com.		86400	IN	NS	ns1.frank.com.
frank.com.		86400	IN	NS	ns2.frank.com.

;; ADDITIONAL SECTION:
mx1.frank.com.		86400	IN	A	192.168.138.200
mx2.frank.com.		86400	IN	A	192.168.138.200
ns1.frank.com.		86400	IN	A	192.168.138.200
ns2.frank.com.		86400	IN	A	192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.201#53(192.168.138.201)
;; WHEN: Wed Feb 21 13:15:43 CST 2018
;; MSG SIZE  rcvd: 178

rndc命令使用

rndc reload:
重載主配置文件和區域解析庫文件,可以不用重啟named服務情況下更新主配置文件和區域解析庫文件。
rndc reload zone_name:
重域指定區域
rndc retransfer zone:
手動啟動區域傳送,不管序號是否增加或減少
rndc notify zone:
手動通知區域
rndc reconfig:
重載主配置文件
rndc querylog:
開啟或關閉查詢日志

關於DNS服務器

  • DNS服務器主從服務器,一般情況下主從一同工作,在客戶端一般會配有多個DNS地址,如果第一個DNS地址無法解析,那么第二DNS地址也是無法解析的,當第一個DNS地址聯系不上時(宕機)才會聯系第二個DNS地址並尋求解析。
  • DNS服務器如果自已無法解析時會去其它服務器查詢,查詢到了會緩存下來,當同一用戶在緩存失效之前再次請求同一記錄時會優先使用緩存回應給客戶端。至於緩存多長時間大了和小了都有優點和缺點,一般互聯網上的DNS緩存大概要2-4小時,也就是當你在互聯網更改記錄一般會2-4小時后才能生效。
  • DNS服務器也可以部署成為緩存服務器。
  • DNS服務器中的轉發器,部署過windows服務器的都知道,如果本機解析不了的可以使用轉發器將請求轉發到當地運營商的DNS服務器請求解析。

windows中的DNS服務器架設完成后,客戶端會自動向DNS服務器注冊,服務器端也會自動添加相應的A記錄和PTR記錄,linux系統當中是不是只能手動添加這些記錄才能解析到局域網中的計算機名呢?


免責聲明!

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



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