DNS之二---实现DNS主从复制
实现主从复制
主从复制原理:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的应该保持一致;否则,应该从高,主低;
1、实验前准备:
主DNS服务器A: (IP地址为192.168.34.101)
从DNS服务器B: (IP地址为192.168.34.103)
客户端C: (IP地址为192.168.34.105)
2、配置主DNS服务器相关文件:
(1)在主服务器A中配置文件信息:vim /etc/named.conf
修改完之后并重新启动DNS服务:rndc reload
options {
listen-on port 53 { localhost; }; # 将此行写成localhost或者注释掉(//),不写的话会,默认只能本机访问
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; # 写成any或者注释掉(//)都可以
allow-transfer { 192.168.34.103; }; # 将从服务器的IP地址写入,默认只能103地址作为当前主服务器的备用服务器,否则任何主机都可以做为从服务器访问主服务器,抓取重要信息
(2)修改主服务器A区域库文件的内容:
vim /var/named/baidu.com.zone
[root@ansiblenamed]#vim /var/named/baidu.com.zone
$TTL 1D
@ IN SOA dns1 admin.baidu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2 # 从服务器添加一个NS标记
dns1 A 192.168.34.101 # 主服务器进行域名解析为IP地址
dns2 A 192.168.34.103 # 将从服务器进行域名解析为IP地址
www CNAME webs
webs A 6.6.6.6
webs A 8.8.8.8
webs A 7.7.7.7
@ MX 10 mailser1
@ MX 20 mailser2
mailser1 A 11.9.9.9
mailser2 A 9.9.9.9
@ A 8.8.8.8 # 省略二级域名写入
* A 8.8.8.8 # 避免二级域名写错,也可以访问。
$GENERATE 1-200 server$ A 192.168.34.$
3、配置从服务器的文件:
(1)在从服务器B上安装DNS:yum install bind
在配置文件中修改/etc/named.conf相关配置文件
[root@centos7_1 ~]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; #将此行注释掉
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
// allow-query { localhost; }; # 将此行注释掉
allow-transfer { none;}; # 此行必需写入,不写会不安全,而且其他任何主机都可以作为从服务器进行访问,抓取IP地址
注意:将第一行的listen-on port 53端口注释掉,或者写成localhost,不然只能为本机服务,allow-query那行业注释掉。
(2)将从服务器B的/etc/named.rfc1912.zones配置文件加以修改
[root@centos7_1 ~]# vim /etc/named.rfc1912.zones
zone "baidu.com" { # 域名要与主服务器的域名一致
type slave; # 类型为“奴隶的意思”
masters {192.168.34.101;}; #将主服务器的IP地址写入
file "slaves/baidu.com.zone.slave"; # 如果从服务器同步了主服务器之后,此时同步的数据就会存放在此目录下/var/named/slaves/
};
(3)重新加载主服务器A的DNS服务:
[root@ansiblenamed]#rndc reload
server reload successful
(4)查询当前从DNS服务器B的同步的数据文件,此时我们可以看到/var/named/slaves目录下已经同步了主DNS服务器的数据内容:
[root@centos7_1 ~]# ls /var/named/slaves
baidu.com.zone.slave
4、配置客户端:
(5)下来我在客户端C配置两个DNS地址,将主从服务器的IP地址都关联起来:
[root@centos6network-scripts]#vim ifcfg-eth0
DEVICE=eth0
PROTOBOOT=static
IPADDR=192.168.34.105
GATEWAY=192.168.34.2
ONBOOT=yes
DNS1=192.168.34.101 # 主服务器的DNS IP地址
DNS2=192.168.34.103 # 从服务器的DNS IP地址
(6)在客户端C查看当前配置好的DNS服务地址
[root@centos6network-scripts]#cat /etc/resolv.conf 查看当前的配置DNS信息
# Generated by NetworkManager
search 10.localdomain
nameserver 192.168.34.101
nameserver 192.168.34.103
(7)我们在客户端C用dig命令查看当前的baidu.com 网址,查看当前DNS解析IP地址是来自哪个服务器:
[root@centos6network-scripts]#dig www.baidu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24163
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 86400 IN CNAME webs.baidu.com.
webs.baidu.com. 86400 IN A 6.6.6.6
webs.baidu.com. 86400 IN A 8.8.8.8
webs.baidu.com. 86400 IN A 7.7.7.7
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS dns1.baidu.com.
baidu.com. 86400 IN NS dns2.baidu.com.
;; ADDITIONAL SECTION:
dns1.baidu.com. 86400 IN A 192.168.34.101
dns2.baidu.com. 86400 IN A 192.168.34.103
;; Query time: 6 msec
;; SERVER: 192.168.34.101#53(192.168.34.101) #此时可以看到解析的IP地址来自于主服务器
;; WHEN: Thu Nov 7 09:38:55 2019
;; MSG SIZE rcvd: 168
(8)我们将主服务器A的网卡down掉(ifconfig ens33 down),然后在客户端C查看当前内容:
[root@centos6network-scripts]#dig www.baidu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54362
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 86400 IN CNAME webs.baidu.com.
webs.baidu.com. 86400 IN A 8.8.8.8
webs.baidu.com. 86400 IN A 7.7.7.7
webs.baidu.com. 86400 IN A 6.6.6.6
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS dns1.baidu.com.
baidu.com. 86400 IN NS dns2.baidu.com.
;; ADDITIONAL SECTION:
dns1.baidu.com. 86400 IN A 192.168.34.101
dns2.baidu.com. 86400 IN A 192.168.34.103
;; Query time: 12 msec
;; SERVER: 192.168.34.103#53(192.168.34.103) #此时,我们看到的是从服务器的IP地址,访问网站是通过从服务器访问。
;; WHEN: Thu Nov 7 10:24:16 2019
;; MSG SIZE rcvd: 168
(9)此时,我们来验证当前的服务器同步情况,修改主服务器区域库文件内容:/var/named/baidu.com.zone
[root@ansible~]#vim /var/named/baidu.com.zone
$TTL 1D
@ IN SOA dns1 admin.baidu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2
dns1 A 192.168.34.101
dns2 A 192.168.34.103
www CNAME webs
webs A 6.6.6.6
webs A 8.8.8.8
webs A 7.7.7.7
@ MX 10 mailser1 #删除此条配置
@ MX 20 mailser2 #删除此条配置
mailser1 A 11.9.9.9
mailser2 A 9.9.9.9
@ A 8.8.8.8
* A 8.8.8.8
$GENERATE 1-200 server$ A 192.168.34.$
(10)删除之后,将DNS服务重启:rndc reload
[root@ansible~]#rndc reload
server reload successful
(11)然后我们在客户端C上dig查询同步信息,此时,我们分别在主从服务器上都可以看到MX的配置记录,这是为什么呢?这是因为我们修改后同步不同步,不是只修改配置文件,而是要修改上面的序列号(serial),才会生效,请看第12步:
[root@centos6network-scripts]#dig -t mx baidu.com @192.168.34.101
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t mx baidu.com @192.168.34.101
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50791
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;baidu.com. IN MX
;; AUTHORITY SECTION:
baidu.com. 10800 IN SOA dns1.baidu.com. admin.baidu.com. 0 86400 3600 604800 10800
;; Query time: 7 msec
;; SERVER: 192.168.34.101#53(192.168.34.101)
;; WHEN: Thu Nov 7 10:33:31 2019
;; MSG SIZE rcvd: 74
[root@centos6network-scripts]#dig -t mx baidu.com @192.168.34.103
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t mx baidu.com @192.168.34.103
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48437
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4
;; QUESTION SECTION:
;baidu.com. IN MX
;; ANSWER SECTION:
baidu.com. 86400 IN MX 10 mailser1.baidu.com.
baidu.com. 86400 IN MX 20 mailser2.baidu.com.
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS dns1.baidu.com.
baidu.com. 86400 IN NS dns2.baidu.com.
;; ADDITIONAL SECTION:
mailser1.baidu.com. 86400 IN A 11.9.9.9
mailser2.baidu.com. 86400 IN A 9.9.9.9
dns1.baidu.com. 86400 IN A 192.168.34.101
dns2.baidu.com. 86400 IN A 192.168.34.103
;; Query time: 10 msec
;; SERVER: 192.168.34.103#53(192.168.34.103)
;; WHEN: Thu Nov 7 10:33:34 2019
;; MSG SIZE rcvd: 179
(12)将序列号(serial)修改为1,改完之后重新加载DNS服务,rndc reload:
[root@ansible~]#vim /var/named/baidu.com.zone
$TTL 1D
@ IN SOA dns1 admin.baidu.com. (
1 ; serial #此处的0已经改为1
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2
dns1 A 192.168.34.101
dns2 A 192.168.34.103
www CNAME webs # 此处也做了修改
webs A 66.66.66.66 # 此处也做了修改
mailser1 A 11.9.9.9
mailser2 A 9.9.9.9
@ A 8.8.8.8
* A 8.8.8.8
$GENERATE 1-200 server$ A 192.168.34.$
(13)修改完配置后,重启DNS服务,并在客户端进行dig验证,此时的IP地址已经同步,并且没有了MX配置文件的记录:
[root@ansible~]#rndc reload 重启DNS服务
server reload successful
[root@centos6network-scripts]#dig www.baidu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22540
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 86400 IN CNAME webs.baidu.com.
webs.baidu.com. 86400 IN A 66.66.66.66 此时已经同步为新的IP地址
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS dns2.baidu.com.
baidu.com. 86400 IN NS dns1.baidu.com.
;; ADDITIONAL SECTION:
dns1.baidu.com. 86400 IN A 192.168.34.101
dns2.baidu.com. 86400 IN A 192.168.34.103
;; Query time: 1 msec
;; SERVER: 192.168.34.101#53(192.168.34.101)
;; WHEN: Thu Nov 7 10:41:43 2019
;; MSG SIZE rcvd: 136