使用bind实现主从DNS服务器数据同步
一、bind简介
Linux中通常使用bind来实现DNS服务器的架设,bind软件由isc(www.isc.org)维护。在yum仓库中可以找到软件,配置好yum源,直接使用命令yum install bind就可以安装。当前bind的稳定版本为bind9,bind的服务名称为named,监听的端口为53号端口。bind的主要配置文件为/etc/named.conf,此文件主要用于配置区域,并指定区域数据库文件名称。区域数据库文件通常保存于/var/named/目录下,用于定义区域的资源类型。
二、使用bind架设DNS服务器
实例操作:以域名wubinary.com为例配置一个DNS服务器,实现正向解析与反向解析。
1、使用setup命令配置DNS服务器的IP地址,我们以192.168.0.70这个IP地址为例,在本地架设一个DNS服务器。

2、bind配置文件为/etc/named.conf,此文件用于定义区域。每个区域的数据文件保存在/var/named目录下。
named.conf各参数项说明:
|
1
2
3
4
5
6
7
8
9
|
options {//全局选项}zone "ZONE name"{//定义区域}logging{//定义日志系统} |
named.conf文件内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
options { listen-on port 53 { 127.0.0.1; }; #定义监听端口及IP地址 listen-on-v6 port 53 { ::1; }; #定义监听的IPv6地址 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 { localhost; };#允许查询的IP地址 recursion yes; #是否允许递归查询 dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic";};logging { channel default_debug { file "data/named.run"; severity dynamic; };};zone "." IN { type hint; file "named.ca";};include "/etc/named.rfc1912.zones";include "/etc/named.root.key"; |
注意:bind的配置文件/etc/named.conf里必须要定义的三个区域是:根、127.0.0.1和127.0.0.1的反解。
以上options选项中有许多是我们用不到,我们先把它们注释掉。结果如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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";// allow-query { localhost; };// recursion yes;// dnssec-enable yes;// dnssec-validation yes;// dnssec-lookaside auto; /* Path to ISC DLV key */// bindkeys-file "/etc/named.iscdlv.key";// managed-keys-directory "/var/named/dynamic";}; |
3、打开/etc/named.rfc1912.zones文件,添加一个区域。

type: 用于定义区域类型,此时只有一个DNS服务器,所以为master,type可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
file:用于定义区域数据文件路径,默认该文件保存在/var/named/目录。
区域添加好后,使用命令:named-checkconf 或 service named configtest测试配置文件语法格式。

出错了!原来少了一个分号,配置文件的格式是每行后面都必须加分号结束,并且有花括号的地方,花括号两边必须要有空格。

没有提示则表示文件语法正常。
4、新建数据库文件/var/named/wubinary.com.zone,并添加资源记录。
|
1
2
3
|
资源记录的格式: name [ttl] IN RRtype Value 资源记录名 有效时间 IN 类型 资源记录的值 |
|
1
2
3
|
SOA: 只能有一个,而且必须是第一个 name: 只能是区域名称,通常可以简写为@ value: 主DNS服务器的FQDN |
|
1
2
3
|
NS: 可以有多条 name: 区域名称,通常可以简写为@ value: DNS服务器的FQDN(可以使用相对名称) |
|
1
2
3
|
A: 只能定义在正向区域文件中 name: FQDN(可以使用相对名称) value: IP |
|
1
2
3
4
|
MX: 可以有多个 name: 区域名称,用于标识smtp服务器 value: 包含优先级和FQDN 优先级:0-99,数字越小,级别越高; |
|
1
2
3
|
CNAME: name: FQDN value: FQDN |
|
1
2
3
|
PTR: IP --> FQDN, 只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成 name: IP, 逆向的主机地址,主机地址反过来写加上.in-addr.arpa. value: FQDN |

$TTL为定义的宏,表示下面资源记录ttl的值都为600秒。
@符号可代表区域文件/etc/named.conf里面定义的区域名称,即:"wubinary.com."。
每个区域的资源记录第一条必须是SOA,SOA后面接DNS服务器的域名和电子邮箱地址,此处电子邮箱地址里的@因为有特殊用途,所以此处要用点号代替。SOA后面小括号里的各值所代表的意义如下所示:
|
1
2
3
4
5
6
|
@ IN SOA dns.wubinary.com dnsadmin.wubinary.com ( 2014031201 ;标识序列号,十进制数字,不能超过10位,通常使用日期 2H ;刷新时间,即每隔多久到主服务器检查一次,此处为2小时 4M ;重试时间,应该小于刷新时间,此处为4分钟 1D ;过期时间,此处为1天 2D ;主服务器挂后,从服务器至多工作的时间,此处为2天) |
区域数据文件配置好后,可以使用命令named-checkzone检查语法错误。
命令格式:
|
1
|
named-checkzone "zone_name" zone_file_name |

5、两个文件都配置好后,记得查看一下文件的所属组。因为bind程序的服务名称为named,bind默认是使用named组的身份操作文件,所以我们新建的文件所属组都要改为named,并且为了安全起见不能让别人有修改的权限,权限最好改为640。

6、设置妥当当后我们就可以开启服务了。

7、使用dig命令测试DNS。
命令格式:
|
1
|
dig [-t type] [-x addr] [name] [@server] |
-t: 指定资源类型,用于正解
-x: 指定IP地址,用于反解

测试成功!
8、以上配置的是DNS服务器的正向解析,接着再配置一下反向解析。编辑配置文件/etc/named.rfc1912.zones,添加一个反解区域。

因为反向解是和正向解析相反的,所以配置文件192.168.0.70.zone直接可以复制wubinary.com.zone修改。反向解析数据文件里面只有SOA、NS、PTR资源记录,所有A记录都要改为PTR记录,名称为IP地址,IP地址可以写全也可以简写,如果写全则是IP地址反写加上.in-addr.arpa.例如:70.0.168.192.in-addr.arpa. PTR资源记录的值为域名。

9、检查配置文件语法。

修改权限

10、重新载入配置文件,并测试反向解析。

使用dig -x 测试反向解析。

反向解析配置成功!
注意:通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。
三、使用bind架设辅助DNS服务器,实现主从数据同步
DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就会宕机罢工,其次如果这台服务器出现了硬件故障那么服务器管理的区域的域名将无法访问。为了解决这些问题,最好的办法就是使用多个DNS服务器同时工作,并实现数据的同步,这样两台服务器就都可以实现域名解析操作。
主DNS服务器架设好后,辅助的DNS服务器的架设就相对简单多了。架设主从DNS服务器有两个前提条件,一是两台主机可以不一定处在同一网段,但是两台主机之间必须要实现网络通信;二,辅助DNS服务器必须要有主DNS服务器的授权,才可以正常操作。此时,我们以IP地址192.168.0.80作为我们辅助的DNS服务器的IP地址;
1、设置IP地址;

2、打开辅助DNS服务器的/etc/named.rfc1912.zones文件,添加两个区域记录,这两个记录是主DNS服务器配置文件里已经存在的记录,一个是正向解析记录,一个是反向解析记录。

type: slave,表示此时DNS服务器为辅助DNS服务器,于是下面一行就要定义主DNS服务器的IP地址,辅助DNS服务器才知道去哪里同步数据。辅助DNS服务器的资源类型数据文件通常保存在slaves目录,只需定义一个名称,文件内容通常是自动生成。
配置好后,直接开启DNS服务,然后再回到主DNS服务器上。
3、修改主DNS服务器的数据文件,添加一条辅助DNS服务器记录,给辅助DNS服务器授权。
修改正向解析文件/var/named/wubinary.com.zone。

添加了一条NS记录,值为,ns2.wubinary.com.,对应的A记录也要增加一条,把IP地址指向对应的辅助DNS服务器的IP地址。修改完成后,记得要把序列号的值加1,用于通知辅助DNS服务器自动更新数据文件。
修改反向解析文件/var/named/192.168.0.70.zone。

同样的也增加了两条记录,一条辅助DNS服务器的NS记录和对应的PTR记录。修改完成后记得所序列号的值加1,用于通知辅助DNS服务器自动更新数据文件。
4、重新加载主DNS服务器的配置文件,这时再到回辅助DNS服务器,在/var/named/slaves/目录下会多了两个文件。

查看文件内容,可以看到该文件和主DNS服务器上的文件内容是一样的。


5、测试辅助DNS服务器。


在辅助DNS服务器上正向解析和反向解析都能测试成功!
四、主从同步数据的安全性
DNS服务器的数据同步默认是没有限定主机的,也就是说,网络上只要有一台DNS服务器向你的DNS服务器请求数据,都能实现数据同步,那么这样就相当的不安全了。我们可以使用一个选项allow-transfer,指定可以同步数据的主机IP。主DNS服务器的数据可以给别的服务器同步,相对的,辅助DNS服务器的数据也是可以给其它辅助DNS服务器同步,于是,所有的主从DNS服务器都要设置该参数。
1、指定可以从主DNS服务器上同步数据的主机。
修改/etc/named.rfc1912.zones文件:

在每块区域上添加参数allow-transfer,花括号内填写可以同步的主机IP,一般填写辅助DNS服务器的IP地址。可以使用dig命令测试,区域同步:
|
1
|
dig -t axfr ZONE_NAME @DNS_SERVCER_IP |

指定IP可以同步数据。

非指定IP不可以同步数据。
2、指定可以从辅助DNS服务器上同步数据的主机。
修改/etc/named.rfc1912.zones文件:

我们只有一台辅助DNS服务器,所以根本不会有主机从这台机器同步数据,所以我们设置成不允许任何人同步。
五、测试DNS解析的其它命令
测试DNS解析的命令不只是dig可以实现,还有两个命令也可以实现相同的效果。
1、host命令
host命令格式:
|
1
|
# host [-t type] {name} [server] |

2、nslookup命令
这个命令很神奇,在windows的dos里面也可以使用:
|
1
2
3
4
|
nslookup> server DNS_SERVER_IP set q=TYPE {name} |

使用bind实现主从DNS服务器数据同步的更多相关文章
- Mysql 主从服务器数据同步
安装2台windows Server 服务器,分别安装Mysql,配置环境变量,完成安装确认在CMD窗口可以使用Mysql命令 在Master服务器上创建同步账号,确保Slave服务器能访问Maste ...
- Centos7搭建主从DNS服务器
1.准备 例:两台192.168.11.10(主),192.168.11.11(从),域名www.test1.com # 主从DNS服务器均需要安装bind.bind-chroot.bind-util ...
- Bind 远程连接DNS服务器时出现 rndc: connection to remote host closed
使用命令:rndc -s 192.168.1.2 status 连接远程的bind 搭建的DNS服务器时出现下面的错误: rndc: connection to remote host close ...
- 使用BIND安装智能DNS服务器(一)---基本的主从DNS服务器搭建
参考网址:http://www.unixmen.com/dns-server-installation-step-by-step-using-centos-6-3/ DNS(Domain Name S ...
- 主从DNS服务器的搭建
一.DNS主从的理解 主从服务器,在一开始的理解中,以为是主的dns服务器挂掉后,(dns服务自动转向辅助dns服务器),客户端还能继续解析.事实貌似不是这样的.当我把主dns停掉的时候,客户端只设一 ...
- 使用Bind服务配置DNS服务器
bind是什么 bind是DNS服务器软件 ,他的服务名称是named 功能区分: 正向解析:根据主机名查找对应的IP地址 反向解析:根据IP地址查找对应的主机名(域名) 工作形式上区分: 主服务器: ...
- rsync+inotify实现服务器数据同步
一.什么是rsync rsync,remote synchronize是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息.rsync是用 “rsync算 ...
- phpwind将服务器数据同步到本地之后网站不显示或者排版错误
在将phpwind的数据同步到本地服务器之后 如果访问本地服务器的首页不能显示的话 首先要查看global.php文件中的D_P变量,官方默认 的此变量应该指向和R_P变量是同一个文件夹即网站的根目录 ...
- 前端web服务器数据同步方案
概述: 网站采用了web和mysql数据库分离的架构,前端有web1.web2.web3需要对他们进行上传文件同步 方案: 在web2的windows服务器上安装GoodSync软件,利用其双向同步特 ...
随机推荐
- Rx学习
RXjava学习资料: https://www.gitbook.com/book/yuxingxin/rxjava-essentials-cn/details 如下只是学习笔记而已,后面添加实战案例, ...
- [CSS备忘] css3零散
-webkit-overflow-scrolling:touch;下拉滚动回弹
- Cookie的简单使用
一,新建一个空网站,添加一个Default.aspx <%@ Page Language="C#" AutoEventWireup="true" Code ...
- win2008服务器,fastCGI完美设置教程
在WIN2008的IIS7上使用FASTCGI调用PHP-CGI.EXE,默认只有4个进程,这样对于大流量的网站为说,进程数不足带来的进程排队现象十分严重,解决方案如下.32位系统 http://ww ...
- SBT详解
文章转载自http://beike.iteye.com/blog/1575296 SBT = (not so) Simple Build Tool,是scala的构建工具,与java的maven地位相 ...
- JS学习之路,之弹性运动框架
弹性运动:顾名思义,就如同物理中的加速减速运动,当开始时速度过大,到达终点时,速度不会立刻停下,而是再前进一段距离,而后再向相反方向运动,如此往复. var timer=null; var speed ...
- 洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器
题目背景 Background语文考试结束了,成绩还是一如既往地有问题. 题目描述 Description语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数 ...
- REST认识
大家对REST的认识? 谈到REST大家的第一印象就是通过http协议的GET,POST,DELETE,PUT方法实现对url资源的CRUD(创建.读取.更新和删除)操作.比如http://www.a ...
- FireFox站点标识按钮
Firefox 的站点标识按钮可以为您提供有关您访问的网站的详细信息.通过站点标识按钮,您可以了解到站点的加密信息.验证信息.网站所有者和网站验证者.这有助于避免恶意网站获得您的重要信息. 站点标识按 ...
- jquery删除未来项 jquery on
$(document).on('click', '.delbtn', function() { if (confirm("确定要删除吗?")) { var adminid=$(th ...