使用bind, DNS主從服務器集群搭建,并通過javadns來修改zone文件
工作需要,搭建DNS主從服務器,并通過Java程序添加,修改一些主機到DNS服務器中。
使用VMWare建立兩臺虛擬機,操作系統是CentOS7
準備兩臺DNS服務器:
DNS-S1 :主服務器,ip地址192.168.203.139
DNS-S2 :從服務器,IP地址192.168.203.140
準備兩個測試主機,主機A用于訪問DNS服務器,主機B是一臺需要新增到DNS中訪問的主機。(此處也可以只設置主機A,主機B可以不用設置,這里為了ping通更加直觀)
Client-A :訪問主機,IP地址192.168.203.133
Client-B:被訪問的主機,IP地址192.168.203.134
DNS簡介:DNS服務由bind提供,啟動后的服務名稱為named,安裝后主要配置文件是etc/named.conf,主服務器zone文件放在var/named/下
1. 主DNS服務器環境搭建(DNS-S1 192.168.203.139)
(1)關閉SElinux
查看SELinux狀態
getenforce
顯示Enforcing,表明SeLinux是開啟的。這里需要關閉
關閉方法1:命令行輸入:
sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config
關閉方法2:修改文件:
etc/selinux/config文件中將SELINUX=enforcing改為SELINUX=disabled
重啟機器,使得更改生效。
重啟后鍵入getenforce,顯示Disabled,則修改SELinux成功
(2)在chroot環境下安裝bind軟件
yum install bind-chroot
有提示的地方鍵入y回車
安裝完成后,開啟named,并設置為開機啟動
systemctl start named
systemctl enable named
查看服務是否正常:
systemctl status named
結果顯示DNS服務正常。
(3)打開53端口,用于監聽DNS請求
firewall-cmd --zone=public--add-port=53/tcp --permanent
firewall-cmd --zone=public--add-port=53/udp --permanent
firewall-cmd –reload
檢查端口狀態:
Iptables -L -n |grep 53
(4)配置etc/named.conf文件
為了保險起見,我們備份一下named.conf,以免修改出現問題
這樣就不用擔心修改named.conf出錯了。
具體修改如下:
//
// named.conf
//
// PRovided by Red Hat bind package toconfigure the ISC BIND named(8) DNS
// server as a caching only nameserver (asa localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ forexample named configuration files.
//
// See the BIND Administrator's ReferenceManual (ARM) for details about the
// configuration located in/usr/share/doc/bind-{version}/Bv9ARM.html
options {
listen-on port 53 { any; }; //監聽端口
listen-on-v6 port 53 { ::1; };
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地址段,這里先設置為所有的吧,以后根據需要在這里限制哪些主機可以訪問這個DNS
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enablerecursion.
- If you are building a RECURSIVE (caching) DNS server, you need toenable
recursion.
- If your recursive DNS server has a public IP address, you MUST enableaccess
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes; //這個選項控制是否開啟服務器的遞歸查詢功能
dnssec-enable no; //這部分是設置DNSSEC的。把它關掉,默認為yes。
dnssec-validation no; //關掉,默認為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;
file "named.ca";
};
//新增一個自己的域,例如:test.com.cn
zone "test.com.cn" IN {
type master; //指明本服務器是這個域的主DNS服務器
file "test.com.cn.zone"; //該域的配置文件的名字,放在/var/named/test.com.cn.zone
allow-transfer {192.168.203.140;}; //指定從DNS服務器的ip地址
allow-query {any;};//允許任意IP地址來請求解析
};
include"/etc/named.rfc1912.zones";
include "/etc/named.root.key";
并對一些內容作了注釋。
(5)建立zone文件。在目錄var/named/下建立在named.conf中用到的test.com.cn.zone文件
將下文寫入zone文件
$ORIGIN .
$TTL 86400 ; 1 day
test.com.cn IN SOA test.com.cn. aaaaa.163.com. (
201701237 ; serial //serial號,用于主從服務器更新,當主服務器的serial大于從服務器的serial時,從服務器會更新zone文件
10 ; refresh (10 seconds)//設置的更新周期,這里設置為10秒作為測試用
900 ; retry (15 minutes)//更新失敗時重試的周期900秒
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.test.com.cn.
$ORIGIN test.com.cn.
$TTL 3600 ; 1 hour
aaa A 192.168.203.134
bbb A 192.168.203.134
dns A 192.168.203.139
寫入完成后,重啟named服務。
systemctl restart named
如果出現問題,則鍵入systemctl status named
根據提示,進一步鍵入named-checkconf -z/etc/named.conf
這樣就可以看到錯誤的提示,根據提示來修改語法錯誤或者其他錯誤。
修改正確并重啟后,
就可以用aaa.com.cn或者bbb.com.cn來訪問192.168.203.134主機了。
(6)測試主DNS服務器是否正常
打開主機A(192.168.203.133)
修改etc/resolv.conf文件,將DNS主服務器的IP加入到其中,用于指定主機A使用的DNS服務器。
開啟主機B,保證A主機能ping通。
在主機A上 ping aaa.test.com.cn 看看DNS服務器是否幫我們解析了aaa.test.com.cn
同樣我們給134主機也定義了個域名 bbb.test.com.cn 也是可以ping 通
至此,主DNS服務器搭建完成。下面配置從DNS服務器
2. 從DNS服務器環境搭建(DNS-S2 192.168.203.140)
前三步均與主服務器做法相同,這里不再贅述。
(1)關閉Selinux
(2)安裝bind-chroot
(3)開啟53端口
(4)配置named.conf文件
這里直接將主DNS的配置文件拷貝過來,修改其中test.com.cn即可
zone "test.com.cn" IN {
type slave; //指明本服務器是這個域的主DNS服務器
file "slaves/test.com.cn.zone"; //該域的配置文件的名字,放在/var/named/slaves/test.com.cn.zone
masters {192.168.203.139;}; //指定主DNS服務器的ip地址
allow-query {any;};//允許任意IP地址來請求解析
};
這里只要修改類型、文件地址、主機ip。這樣從DNS就配置好了。
(5)這里的zone文件不用自己建立,而是通過主DNS同步過來。這樣主從DNS解析的內容就是一致的了。當主DNS掛了,從DNS就可以繼續解析域名了。
只需要重啟從服務的DNS即可
systemctl restart named
查看一下狀態systemctl status named
重啟日志顯示,重啟時,從DNS接收了主DNS發送來的zone文件。
我們進入var/named/slaves目錄下
確實zone文件已經同步過來了,說明主從服務器已經同步。
(6)測試
在A主機(192.168.203.133)的etc/resolv.conf中也加上從DNS的ip
這時主從服務器都是開啟的狀態,測試aaa.test.com.cn
這時是通的,然后關閉主服務器的DNS服務
systemctl stop named
繼續ping aaa.test.com.cn
仍然是通的,說明從DNS已經開始工作了。(這里有個問題,如果resolv.conf不加入從DNS的ip,則主DNS關閉后無法ping通,這里的resolv文件并沒有被主DNS修改,因此這里可能是因為指定了從DNS,所以也能ping通。而不是主DNS掛了,然后主機會獲取到從DNS,從而在主DNS掛掉后繼續解析。)這里的resolv.conf 文件在機器重啟后都會發生變化,因此需要解決這個問題,并且要求主DNS配置文件變化時,及時能夠修改訪問主機的resolv.conf文件。
新聞熱點
疑難解答