DNS之二---实现DNS主从复制

Posted 一叶知秋~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS之二---实现DNS主从复制相关的知识,希望对你有一定的参考价值。

实现主从复制

主从复制:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的应该保持一致;否则,应该从高,主低;

实验前准备:

主服务器:A (IP地址为192.168.34.101)

从服务器:B  (IP地址为192.168.34.103)

客户端:C      (IP地址为192.168.34.105)

 

配置主服务器相关文件:

(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.$

配置从服务器的文件:

(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"; # 将从服务器的数据放到slaves路径内
};

(3)重新加载主服务器A的DNS服务:

[root@ansiblenamed]#rndc reload
server reload successful

(4)查询当前从服务器B的同步的数据文件,此时我们可以看到/var/named/slaves目录下已经同步了主服务器的数据内容:

[root@centos7_1 ~]# ls /var/named/slaves
baidu.com.zone.slave

  配置客户端: 

(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

以上是关于DNS之二---实现DNS主从复制的主要内容,如果未能解决你的问题,请参考以下文章

14DNS正反向解析主从复制子域授权区域转发 学习笔记

DNS服务之主从DNS复制

DNS正向反向解析与主从复制

DNS&BIND——动态更新的DNS主从复制

DNS主从复制及子域

Linux 基础知识DNS服务器主从复制,子域授权