CentOS 6.8使用bind搭建內網DNS主從服務
> DNS域名解析服務(Domain Name System)是用於解析域名與IP地址對應關系的服務,功能上可以實現正向解析與反向解析:
正向解析:根據主機名(域名)查找對應的IP地址。
反向解析:根據IP地址查找對應的主機名(域名)。工作形式上又分主服務器、從服務器和緩存服務器。
主服務器:在特定區域內具有唯一性、負責維護該區域內的域名與IP地址對應關系。
從服務器:從主服務器中獲得域名與IP地址對應關系並維護,以防主服務器宕機等情況。
緩存服務器:通過向其他域名解析服務器查詢獲得域名與IP地址對應關系,提高重復查詢時的效率
2、Bind介紹
Bind是一款開放源代碼的DNS服務器軟件,bind由美國大學Berkeley分校開發和維護的,全名為Berkeley Internet Name Domain ,是目前世界上使用最為廣泛的DNS;
3、搭建環境說明及準備
主機名 | IP地址 | 系統 | 角色 |
---|---|---|---|
node1 | 192.168.56.21 | CentOS 6.8 x86_64 | DNS主 |
node2 | 192.168.56.22 | CentOS 6.8 x86_64 | DNS從 |
兩臺服務器都關閉iptables和selinux
# /etc/init.d/iptables stop
# chkconfig iptables off
# setenforce 0
# sed -i.ori ‘s#SELINUX=enforcing#SELINUX=disabled#g‘ /etc/selinux/config
4、node1安裝DNS主並配置
(1)yum安裝bind
# yum install -y bind-utils bind bind-devel bind-chroot
(2)node1配置named.conf配置文件
# cat /etc/named.conf options { #基礎服務配置 version "1.1.1"; #版本信息 listen-on port 53 {any;}; #監聽的端口 {any;}可以配成ip,無特殊需求建議是any,可以是多個用分號分隔 directory "/var/named/chroot/etc/"; #安全控制的路徑 pid-file "/var/named/chroot/var/run/named/named.pid"; #pid文件 allow-query { any; }; #誰可以在本DNS發起ip請求 Dump-file "/var/named/chroot/var/log/binddump.db"; Statistics-file "/var/named/chroot/var/log/named_stats"; #DNS的鏈接狀態信息文件** zone-statistics yes; #開啟DNS的鏈接狀態信息,和上一條相關聯 memstatistics-file "log/mem_stats"; #內存狀態信息 empty-zones-enable no; #禁止A記錄為空 forwarders {202.106.196.115;8.8.8.8; }; #遇到解析不了的域名,實現跳轉到的地址 }; key "rndc-key" { #rndc的key algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; logging { #日誌(兩種日誌) channel warning { #解析過程中遇到的問題的日誌 file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m; severity warning; print-category yes; print-severity yes; print-time yes; }; channel general_dns { #解析記錄的日誌 file "/var/named/chroot/var/log/dns_log" versions 10 size 100m; #日誌文件超過100m,最多記錄10個 severity info; print-category yes; print-severity yes; print-time yes; }; category default { warning; }; category queries { general_dns; }; }; include "/var/named/chroot/etc/view.conf";
(2)node1編輯rndc.key文件
cat /etc/rndc.key #和named.conf配置文件裏的rndc.key配置要一樣
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
(3)node1配置rndc.conf配置文件
cat /etc/rndc.conf #告訴rndc.key鏈接那個DNS
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
(4)node1配置view.conf配置文件
# cat /var/named/chroot/etc/view.conf
view "View" { #"View" 為備註
zone "zain.com" { #zone表示為那個域名做解析,這裏是為zain.com做解析
type master; #本臺DNS的類型
file "zain.com.zone"; #指定文件,可以自定義
allow-transfer { #允許那個服務器來同步本臺DNS的數據,一般配置從DNS
192.168.56.22;
};
notify yes; #主DNS配置做了變更後通知那些從DNS來同步數據
also-notify {
192.168.56.22;
};
};
};
(5)node1配置zain.com.zone這個配置文件
# cat /var/named/chroot/etc/zain.com.zone
$ORIGIN . #.的意思和zain.com的意思一樣(即寫.和寫zain.com都可以),
$TTL 3600 ; 1 hour #生存周期(內網建議一分鐘,外網可以長一點1小時)
zain.com IN SOA op.zain.com. dns.zain.com. ( #zain.com的SOA類型(說明)解析
2000 ; serial #管理員可修改的序列號(從DNS和主DNS的這個號碼一致,當主DNS數據變更後,修改此序列號,從DNS發現此序列號和主不一樣則實現拉取主的數據)
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.zain.com.
$ORIGIN zain.com. #可以用當前的DNS服務器做當前域名的解析了。
shanks A 1.2.3.4
op A 1.2.3.4
zone文件說明:
? Serial:只是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麽這個 zone file 的資料就會被傳送到 slave 來更新了。由於這個序號代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是在 2006/10/20 所寫的第一次,所以用 2006102001 作為序號代表!(yyyymmddnn,nn代表這一天是第幾次修改)
? Refresh:除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;
? Retry:如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麽在多久之後,slave 會再次的主動嘗試與主機連線;
? Expire:如果 slave 一直無法與 master 連接上,那麽經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!
? Minimun:這個就有點象是 TTL !
? NS:DNS服務器做聲明的配置,一般建議和SOA做成一樣就可以了
5、修改目錄權限並啟動DNS服務
# cd /var && chown -R named:named named/
# /etc/init.d/named start
Starting named: [ OK ]
# chkconfig named on
6、測試是否能做解析
# dig @127.0.0.1 op.zain.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 op.zain.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10701
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;op.zain.com. IN A
;; ANSWER SECTION:
op.zain.com. 3600 IN A 1.2.3.4 #可以解析
;; AUTHORITY SECTION:
zain.com. 3600 IN NS op.zain.com. #可以解析
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Sep 6 12:52:34 2017
;; MSG SIZE rcvd: 58
# dig @127.0.0.1 shanks.zain.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 shanks.zain.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17550
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;shanks.zain.com. IN A
;; ANSWER SECTION:
shanks.zain.com. 3600 IN A 1.2.3.4 #這裏
;; AUTHORITY SECTION:
zain.com. 3600 IN NS op.zain.com.
;; ADDITIONAL SECTION:
op.zain.com. 3600 IN A 1.2.3.4
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Sep 6 12:53:22 2017
;; MSG SIZE rcvd: 81
7、node2配置DNS從服務器
(1)yum安裝bind
# yum install bind-utils bind bind-devel bind-chroot
node2配置named.conf
# cat /etc/named.conf
options {
version "1.1.1";
listen-on port 53 {any;};
directory "/var/named/chroot/etc/";
pid-file "/var/named/chroot/var/run/named/named.pid";
allow-query { any; };
Dump-file "/var/named/chroot/var/log/binddump.db";
Statistics-file "/var/named/chroot/var/log/named_stats";
zone-statistics yes;
memstatistics-file "log/mem_stats";
empty-zones-enable no;
forwarders {202.106.196.115;8.8.8.8; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
channel warning {
file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns {
file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default {
warning;
};
category queries {
general_dns;
};
};
include "/var/named/chroot/etc/view.conf";
(2)node2配置rndc.key配置文件
# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
(3)node2配置rndc.conf
# cat /etc/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
(4)配置view.conf
~]# cat /var/named/chroot/etc/view.conf
view "SlaveView" {
zone "zain.com" {
type slave;
masters {192.168.56.21; }; #主DNS的ip地址
file "slave.zain.com.zone";
};
};
8、node2上修改目錄權限並啟動從DNS服務
# cd /var && chown -R named.named named/
# /etc/init.d/named start
Starting named: [ OK ]
# chkconfig on
9、同步數據
到master(node1)節點上執行:rndc reload並重啟主從(node1、node2)的named服務:/etc/init.d/named reload
到從DNS查看數據是否同步成功
# ll /var/named/chroot/etc
total 680
-rw-r--r--. 1 root root 388 Sep 6 09:40 localtime
drwxr-x---. 2 root named 4096 Jul 5 17:55 named
-rw-r-----. 1 root named 1125 Sep 6 12:57 named.conf
-rw-r--r--. 1 root named 3923 Jul 5 17:55 named.iscdlv.key
-rw-r-----. 1 root named 931 Jun 21 2007 named.rfc1912.zones
-rw-r--r--. 1 root named 1587 May 30 21:38 named.root.key
drwxr-x---. 3 named named 4096 Sep 6 11:37 pki
-rw-r--r--. 1 root root 6455 Jan 12 2010 protocols
-rw-r--r--. 1 root root 197 Sep 6 13:00 rndc.conf
-rw-r--r--. 1 root root 91 Sep 6 13:00 rndc.key
-rw-r--r--. 1 root root 641020 Oct 2 2013 services
-rw-r--r--. 1 named named 312 Sep 6 13:27 slave.zain.com.zone #出現這個表示數據同步成功
-rw-r--r--. 1 named named 169 Sep 6 13:25 view.conf
至此使用bind搭建DNS主從就成功了,以後再需要改A記錄就可以到主DNS的/var/named/chroot/etc/zain.com.zone裏去添加記錄即可。
CentOS 6.8使用bind搭建內網DNS主從服務