介绍
DNS(Domain name server),是将IP地址转换为域名地址。当在互联网访问外部服务器时,其主机都是以IP地址及端口标识(被称之为一个套接字文件),当主机A需要与主机B通信时,A必须知道其B的IP地址,但IP地址不能方便人们的记忆,故使用其计算机名进行标识。早期的互联网通信下,服务器的计算机名与其IP地址对应关系,被记录在了hosts文件中,这也正是早期的域名解析模型。但随着互联网的服务器增加,单依靠hosts的记录所有的计算机名映射,会导致查询速度非常慢、计算机名的变更更新速度慢。其DNS可以解决由hosts文件来解释域名映射的诸多问题。
DNS服务端查询原理
正向解析: hostname —> IP
1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
主从复制实现
DNS服务:
ansible-manager 10.177.96.4 主DNS服务
ansible-client1 10.177.96.14 从DNS服务
10.177.96.4 主DNS服务 上安装配置
1、安装DNS服务
[root@ansible-manager ~]# yum -y install bind bind-utils
2、修改配置文件 named.conf ,注释掉如下两行
[root@ansible-manager ~]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
...
// allow-query { localhost; };
allow-transfer {10.177.96.14;}; #只允许数据传输到从DNS 10.177.96.14,为了DNS数据安全,很重要!
}
3、编辑zone文件 /etc/named.rfc1912.zones,新增域 xulx.com的内容
[root@ansible-manager named]# vim /etc/named.rfc1912.zones
zone "xulx.com" IN {
type master; #建立xulx.com区域的主服务,数据库由此主机来管理
file "xulx.com.zone";
};
....
4、编辑建立域 xulx.com的 数据库文件 xulx.com.zone
[root@ansible-manager ~]# cd /var/named/
[root@ansible-manager named]# cp -a named.localhost xulx.com.zone
[root@ansible-manager named]# ll
total 20
drwxrwx--- 2 named named 22 Apr 25 16:29 data
drwxrwx--- 2 named named 58 Apr 27 15:37 dynamic
-rw-r----- 1 root named 2253 Apr 5 2018 named.ca
-rw-r----- 1 root named 152 Dec 15 2009 named.empty
-rw-r----- 1 root named 152 Jun 21 2007 named.localhost
-rw-r----- 1 root named 168 Dec 15 2009 named.loopback
drwxrwx--- 2 named named 6 Aug 8 2019 slaves
-rw-r----- 1 root named 152 Jun 21 2007 xulx.com.zone
[root@ansible-manager named]# cat /var/named/xulx.com.zone
$TTL 1D
@ IN SOA xulx.com. admin.xulx.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.177.96.4
www CNAME test
slave A 10.177.96.14
test A 10.177.96.51
@ A 10.177.96.4
5、检查语法
#检查named.conf的语法
[root@ansible-manager named]# named-checkconf
[root@ansible-manager named]#
#检查zone文件的语法
[root@ansible-manager named]# named-checkzone xulx.com /var/named/xulx.com.zone
zone xulx.com/IN: loaded serial 0
OK
6、启动服务
[root@ansible-manager named]# systemctl restart named
7、简单测试
[root@ansible-manager named]# host xulx.com 10.177.96.4
Using domain server:
Name: 10.177.96.4
Address: 10.177.96.4#53
Aliases:
xulx.com has address 10.177.96.4
10.177.96.14 从DNS服务 安装配置
1、安装DNS服务
[root@ansible-client1~]# yum -y install bind bind-utils
2、修改配置文件 named.conf ,注释掉如下两行
[root@ansible-client1 ~]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
...
// allow-query { localhost; };
allow-transfer {none;}; #从DNS数据传输,不允许任何主机访问查看,从DNS服务 只需要同步主DNS数据,也不需要将数据同步到其他主机
}
3、编辑zone文件 /etc/named.rfc1912.zones,新增域 xulx.com 的从域
[root@ansible-client1 ~]# vim /etc/named.rfc1912.zones
zone "xulx.com" IN{
type slave;
masters {10.177.96.4;};
file "slaves/xulx.com.zone.slave";
};
...
4、检测配置文件语法是否正确
[root@ansible-client1 ~]# named-checkconf
[root@ansible-client1 ~]#
5、启动服务
[root@ansible-client1 ~]# systemctl start named
[root@ansible-client1 ~]#
6、此时查看 xulx.com配置的数据库文件 slaves/xulx.com.zone.slave ,发现已经进行了数据同步,查看的话,会发现被加密了
[root@ansible-client1 ~]# cat /var/named/slaves/xulx.com.zone.slave
^§͜NQ
xulxcom.xulxcomadminxulxcomQ :*01Q
xulxcommasterxulxcom$Q
xulxcom
±`+Qmasterxulxcom
±`*Qslavexulxcom
±`)Qtestxulxcom
±`33Qwwwxulxcomtestxulxcom
7、查看从DNS的解析 是否生效
[root@ansible-client1 ~]# host xulx.com 10.177.96.14
Using domain server:
Name: 10.177.96.14
Address: 10.177.96.14#53
Aliases:
xulx.com has address 10.177.96.4
至此,基本的主从DNS服务,已经实现
而主从DNS 数据库同步有两种方式 : 推和拉
推 :主服务器数据库一旦发生变化,立即推送到从服务器上
Note: 如果想要实现推的动作,需要注意如下两点:
1、将所有从服务的记录加上去,表明这是域名服务器,同步时 需要同步
2、每次修改数据库后,需要手动修改版本号
示例
[root@ansible-manager ~]# vim /var/named/xulx.com.zone
$TTL 1D
@ IN SOA xulx.com. admin.xulx.com. (
1 ; serial #2、修改版本号
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave #1、增加从DNS服务
master A 10.177.96.4
www CNAME test
slave A 10.177.96.14
@ A 10.177.96.4
#重新加载主DNS服务
[root@ansible-manager ~]# rndc reload
server reload successful
-------------------------------
#从DNS数据库文件已经发生变化
[root@ansible-client1 slaves]# ll
total 4
-rw-r--r-- 1 named named 364 Apr 28 14:27 xulx.com.zone.slave
[root@ansible-client1 slaves]# ll
total 4
-rw-r--r-- 1 named named 341 Apr 28 15:06 xulx.com.zone.slave
拉: 则通过refresh 定义拉取的时间间隔,如下,默认是一天拉取一次
[root@ansible-manager ~]# cat /var/named/xulx.com.zone
$TTL 1D
@ IN SOA xulx.com. admin.xulx.com. (
0 ; serial
1D ; refresh #拉取同步时间 一天一次
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.177.96.4
Note
智能DNS实现 :文章路径
Mariadb 编译安装:文章路径