DNS 主从同步配置

DNS 域名解析原理

域名解析过程

  • 1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  • 2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  • 3.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性
  • 4.如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性
  • 5.如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根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 递归/迭代 原理

 

递归查询

  递归:客户端只发一次请求,要求对方给出最终结果。一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;

 

迭代查询(反复查询)

  迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;

 

授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。

 

从递归和迭代查询可以看出:

客户端-本地dns服务端:这部分属于递归查询

 

本地dns服务端---外网:这部分属于迭代查询。

 

递归查询时,返回的结果只有两种:查询成功或查询失败.

 

迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址.

 

DNS 缓存机制原理

 

DNS 缓存机制原理 

  简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,

如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会递归式的查找域名记录,然后返回。

 

  DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,

而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

 

Windows访问DNS后会把记录保存一段短暂的时间,可通过ipconfig /displaydns 查看windows的DNS缓存、通过ipconfig /flushdns来清除。

 

DNS 安装配置

实验环境

一台主机:Linux Centos 6.5 32位

  • 安装包:
  • DNS服务:bind.i686
  • DNS测试工具:bind-utils

DNS 服务安装

1、yum安装DNS服务,DNS测试工具
yum -y install bind.i686
yum -y install bind-utils

2、清空主配置文件,重新添加内容,添加权限

vim /etc/named.conf
options {
    directory "/var/named";
};

zone "." IN {
   type hint;
   file "named.ca";
};

zone "localhost" IN {
   type master;
   file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
   type master;
   file "named.local";
};

主配置文件
# 修改所属权限
chown named /etc/named.conf 
# 文件查找 根 服务器
dig -t NS . >  /var/named/named.ca
# 生成 rndc.key,如果没有key namd 无法启动 或 启动慢 rndc
-confgen -r /dev/urandom -a
# 将key文件赋值所属权限
chown named:named /etc/rndc.key

3、写入本地域文件,针对127.0.0.1写的zone域(可以不写)

vim /var/named/localhost.zone
@               IN      SOA     localhost. admin.localhost.     (
                                                                2013081601
                                                                1H
                                                                10M
                                                                7D
                                                                1D
                                                                )
@               IN      NS      localhost.
localhost.      IN      A       127.0.0.1

localhost.zone文件

vim /var/named/named.local

$TTL 86400
@               IN      SOA     localhost. admin.localhost.     (
                                                                2013081601           
                                                                1H
                                                                10M
                                                                7D
                                                                1D
                                                                )
@               IN      NS      localhost.
1               IN      PTR     localhost

named.local文件

4、检测配置文件,检测解析

# 检查配置是否有问题
named-checkconf
命令:named-checkzone "localhost" /var/named/localhost.zone 

/var/named/localhost.zone:1: no TTL specified; using SOA MINTTL instead
zone localhost/IN: loaded serial 2013081601
OK



命令:named-checkzone "0.0.127.in-addr.arpa" /var/named/named.local

zone 0.0.127.in-addr.arpa/IN: loaded serial 2013081601
OK
 

5、启动DNS服务

/etc/init.d/named start
命令:netstat -lnp | grep :53

tcp        0      0 192.168.2.10:53             0.0.0.0:*                   LISTEN      7242/named          
tcp        0      0 192.168.1.160:53            0.0.0.0:*                   LISTEN      7242/named          
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      7242/named          
udp        0      0 192.168.2.10:53             0.0.0.0:*                               7242/named          
udp        0      0 192.168.1.160:53            0.0.0.0:*                               7242/named          
udp        0      0 127.0.0.1:53                0.0.0.0:*                               7242/named          

查看监听端口

6、测试解析

# @locahost 为 DNS 地址
 命令:dig @localhost localhost

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @localhost localhost
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11652
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;localhost.            IN    A

;; ANSWER SECTION:
localhost.        86400    IN    A    127.0.0.1 # 解析结果为127.0.0.1

;; AUTHORITY SECTION:
localhost.        86400    IN    NS    localhost.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 24 08:20:17 2017
;; MSG SIZE  rcvd: 57

测试正向解析
命令:dig @127.0.0.1 -x 127.0.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @127.0.0.1 -x 127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59086
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.        IN    PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa.    86400    IN    PTR    localhost.0.0.127.in-addr.arpa.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.    86400    IN    NS    localhost.

;; ADDITIONAL SECTION:
localhost.        86400    IN    A    127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 24 08:22:31 2017
;; MSG SIZE  rcvd: 103

测试反向解析

 

DNS 配置自定义域名

DNS 资源记录

资源记录类型

起始授权结构(SOA)

主机(A)

别名(CNAME)

邮件交换器(MX)

名称服务器(NS)

说明

起始授权机构

地址

标准名称

邮件交换器

名称服务器

解释

此记录指定区域的起点。它所包含的信息有区域名、区域管理员电子邮件地址,以及指示辅 DNS 服务器如何更新区域数据文件的设置等。

主机(A)记录是名称解析的重要记录,它用于将特定的主机名映射到对应主机的IP地址上。你可以在DNS服务器中手动创建或通过DNS客户端动态更新来创建。

此记录用于将某个别名指向到某个主机(A)记录上,从而无需为某个需要新名字解析的主机额外创建A记录。

此记录列出了负责接收发到域中的电子邮件的主机 ,通常用于邮件的收发。

此记录指定负责此DNS区域的权威名称服务器。

DNS 域名配置

1、修改主配置文件,添加域名

vim /etc/named.conf
# 正向解析
zone "baidu.com" IN {
   type master;
   # file名字要与 /var/named/下配置文件文件名字吻合
   file "baidu.com.zone";
};

2、编辑域名配置文件

vim /var/named/baidu.com.zone
; 更改记录600秒后生效,600秒后再次请求根服务器
$TTL 600
; 域名baidu.com. 固定格式root.baidu.com.
@               IN      SOA     baidu.com.      root.baidu.com.  (
                                                                ; 序列号,标记
                                                                2013081601                                                                ; 刷新缓存
                                                                1H                                                                ; 更改记录
                                                                10M                                                                ; 过期时间
                                                                7D                                                                ; 最小数
                                                                1D
)
; NS 将本地IP 解析为 ns.baidu.com. 
                IN      NS      ns.baidu.com.
;  MX(相当于证书)域名支持邮件 添加记录
                IN      MX  10  mail.baidu.com.
; A 添加域名 绑定IP
ns              IN      A       192.168.1.170
www             IN      A       192.168.1.171
mail            IN      A       192.168.1.172
; CNAME 指定域名,相当于 www 192.168.0.11
bbs             IN      CNAME   www.baidu.com.

 

3、测试配置文件

named-checkconf
named-checkconf
命令:named-checkzone "baidu.com" /var/named/baidu.com.zone 

zone baidu.com/IN: loaded serial 2013081601
OK
命令:named-checkzone "baidu.com" /var/named/baidu.com.zone 

zone baidu.com/IN: loaded serial 2013081601
OK

4、重启服务

/etc/init.d/named restart

5、测试域名解析

命令:dig @192.168.1.160 www.baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35900
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.baidu.com.            IN    A

;; ANSWER SECTION:
# 解析 IP
www.baidu.com.        600    IN    A    192.168.1.171 

;; AUTHORITY SECTION:
# 通过NS ns.baidu.com. 解析 为 www.baidu.com.
baidu.com.        600    IN    NS    ns.baidu.com.

;; ADDITIONAL SECTION:
# 通过192.168.1.170 解析为 ns.baidu.com. 
ns.baidu.com.        600    IN    A    192.168.1.170

;; Query time: 0 msec
;; SERVER: 192.168.1.160#53(192.168.1.160)
;; WHEN: Sun Dec 24 09:09:12 2017
;; MSG SIZE  rcvd: 80

测试正向解析1
命令:dig @192.168.1.160 bbs.baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 bbs.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61015
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;bbs.baidu.com.            IN    A

;; ANSWER SECTION:
# 解析域名通过 www.baidu.com. 解析为 192.168.1.171
bbs.baidu.com.        600    IN    CNAME    www.baidu.com.
www.baidu.com.        600    IN    A    192.168.1.171

;; AUTHORITY SECTION:
# 通过NS ns.baidu.com. 解析 为 www.baidu.com.
baidu.com.        600    IN    NS    ns.baidu.com.

;; ADDITIONAL SECTION:
# 通过192.168.1.170 解析为 ns.baidu.com. 
ns.baidu.com.        600    IN    A    192.168.1.170

;; Query time: 0 msec
;; SERVER: 192.168.1.160#53(192.168.1.160)
;; WHEN: Sun Dec 24 09:13:01 2017
;; MSG SIZE  rcvd: 98

测试正向解析2

 

 

DNS 主从同步配置

  • 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 看序列号
  • 从DNS:从是可以单独修改,主从不会报错。但从修改后,主端同步给从后 从端修改数据会丢失
  • 主从原理:从会监听主的 TCP 53 端口,它会隔一段时间去探测 序列号如果主端 序列号更新后 从端探测到会 将主端内容 同步到本地。
  • 同步模式:从主动探测时间比较缓慢,可以设置主端,每次变更序列号时主动将,数据信息,推送给从DNS端。

主 DNS 配置

1、配置主配置文件

vim /etc/named.conf
# 正向解析
zone
"baidu.com" IN {
# 定义master主类型 type master;
# 设置需要同步的文件路径
file "baidu.com.zone";
# 主动推送 notify yes;
# 写入从DNS端IP also
-notify { 192.168.1.161; }; };

2、添加域配置文件

$TTL 600
@               IN      SOA     baidu.com.      root.baidu.com. (
                                                                2013081602
                                                                1H
                                                                10M
                                                                7D
                                                                1D
)
                IN      NS      ns.baidu.com.
                IN      MX  10  mail.baidu.com.
ns              IN      A       192.168.1.170
www             IN      A       192.168.1.171
mail            IN      A       192.168.1.172
bbs             IN      CNAME   www.baidu.com.

域配置文件

 

3、测试配置,重启服务

# 测试配置文件
named-checkconf
# 启动服务
/etc/init.d/named start

 

从 DNS 配置

1、配置主配置文件

vim /etc/named.conf
# 正向解析
zone "baidu.com" IN {
# 主要修改,上边分别为本地解析可以不添加 type slave;
# 编辑文件存放目录
file "slaves/baidu.com.zone";
# 指定master IP masters {
192.168.1.160; }; };

 

2、测试配置,重启服务

# 测试配置文件
named-checkconf
# 启动服务
/etc/init.d/named start

 

3、查看生成域文件

ls /var/named/slaves/baidu.com.zone


测试

1、主:修改配置文件
vim /var/named/baidu.com.zone
$TTL 600
@               IN      SOA     baidu.com.      root.baidu.com. (
                                                                2013081602
                                                                1H
                                                                10M
                                                                7D
                                                                1D
)
                IN      NS      ns.baidu.com.
                IN      MX  10  mail.baidu.com.
ns              IN      A       192.168.1.170
www             IN      A       192.168.1.171
mail            IN      A       192.168.1.172
bbs             IN      CNAME   www.baidu.com.
; 随便添加一条aaa 作为主从测试
aaa             IN      A       2.2.2.2

主:域配置文件

 

2、从:测试数据是否同步
$ORIGIN .
$TTL 600        ; 10 minutes
baidu.com               IN SOA  baidu.com. root.baidu.com. (
                                2013081602 ; serial
                                3600       ; refresh (1 hour)
                                600        ; retry (10 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.baidu.com.
                        MX      10 mail.baidu.com.
$ORIGIN baidu.com.
# aaa已经同步
aaa                     A       2.2.2.2
bbs                     CNAME   www
mail                    A       192.168.1.172
ns                      A       192.168.1.170
www                     A       192.168.1.171

从端测试:域配置文件

 

DNS 转发配置

 
DNS 转发配置
  • 我们配置DNS是只能解析我们定义的zone的,我们没有定义的是不能解析的。
  • 配置DNS转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的企业在使用。
  • 也就是说这个域名已经被某个DNS服务器解析了。

1、修改DNS主配置文件,options参数下添加

vim /etc/named.conf

options {
    # 域文件存放目录
    directory "/var/named";
# 开启转发 forward first;
# 转发到哪个DNS forwarders {
180.76.76.76; }; };

2、测试配置文件,重启

# 测试配置文件,是否正确
named-checkconf
# 重启DNS服务
/etc/init.d/named restart

3、测试转发

dig @192.168.1.160 www.jd.com
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 www.jd.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50736
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
 
;; QUESTION SECTION:
;www.jd.com. IN A
 
;; ANSWER SECTION:
www.jd.com. 102 IN CNAME www.jdcdn.com.
www.jdcdn.com. 5 IN A 218.60.111.1
 
;; Query time: 60 msec
;; SERVER: 192.168.1.160#53(192.168.1.160)
;; WHEN: Sun Dec 24 09:31:18 2017
;; MSG SIZE rcvd: 68

测试域名转发
# 在另一台机器内添加 192.168.1.160 DNS 服务
vim /etc/resolv.conf
nameserver 192.168.1.160
测试
ping www.baidu.com
# 跳转到 192.168.1.171 说明可以正向解析出IP地址
PING www.baidu.com (192.168.1.171) 56(84) bytes of data.
From heartbeat2 (192.168.1.161) icmp_seq=1 Destination Host Unreachable
From heartbeat2 (192.168.1.161) icmp_seq=2 Destination Host Unreachable
From heartbeat2 (192.168.1.161) icmp_seq=3 Destination Host Unreachable
From heartbeat2 (192.168.1.161) icmp_seq=5 Destination Host Unreachable
 
ping www.jd.com
# DNS服务器 本地没有解析后,转发到给180.76.76.76DNS
PING www.jdcdn.com (218.60.111.1) 56(84) bytes of data.
64 bytes from 218.60.111.1: icmp_seq=1 ttl=56 time=21.5 ms
64 bytes from 218.60.111.1: icmp_seq=2 ttl=56 time=17.7 ms

另一台机器 测试域名转发

以上转自

https://www.cnblogs.com/xiangsikai/p/8438544.html

https://www.cnblogs.com/xiangsikai/p/8438518.html

感谢博主

实现主从复制

主从复制原理:

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服务:

1
2
[root@ansiblenamed]#rndc reload
server reload successful

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

1
2
[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

以上转自

https://www.cnblogs.com/struggle-1216/p/12582227.html  感谢博主

 

 

实验环境

主服务器:192.168.138.200
从服务器:192.168.138.201

bind安装

安装很简单,执行以下命令即可:

	yum install -y bind

先看一下bind的版本和配置文件安装路径

	# named -v
	BIND 9.9.4-RedHat-9.9.4-51.el7_4.2 (Extended Support Version) 
	# rpm -qc bind
	/etc/logrotate.d/named
	/etc/named.conf					
	/etc/named.iscdlv.key
	/etc/named.rfc1912.zones		
	/etc/named.root.key
	/etc/rndc.conf						
	/etc/rndc.key
	/etc/sysconfig/named
	/var/named/named.ca
	/var/named/named.empty
	/var/named/named.localhost
	/var/named/named.loopback

/etc/named.conf,/etc/named.rfc1912.zones是主配置文件


/var/named/named.ca是根区域解析库文件


/var/named/named.localhost,/var/named/named.loopback 是本机和环回地址的解析库文件


rndc---remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。

配置named.conf文件

这个配置文件主要分3段内容,options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。

 

# cat /etc/named.conf
// 2个双//在这个配置文件中表示注释
options {
    //下面一行表示监听的端口和IP地址,其中2个{}内部两端都要有空格,IP地址要以;号结尾。
    这里的IP地址至少应该包含宿主机可以和外部通迅的地址,也可以包含一个本地回环地址供rndc工具使用。也可以简写成{ any; }
    每个语句结束同样都要以;结尾,如果不需要监听IPV6可以注释掉或删除。
    listen-on port 53 { 192.168.138.200; 127.0.0.1; };
//    listen-on-v6 port 53 { ::1; };
    //下面一行表示named的工作目录为/var/named
    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";
    //下面一行表示允许哪些主机查询,改成any表示所有
    allow-query     { any; };
    //下面一行表示是否允许递归查询.
    recursion yes;
    dnssec-enable yes;
    dnssec-validation 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;          //hint表示根区域类型
    file "named.ca";    //指定根区域解析库文件名称所在位置,相对于/var/named
};
//指定区域文件名称,所有的区域定义都可以写在named.rfc1912.zones文件中
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

配置主服务器192.168.138.200

编辑/etc/named.rfc1912.zones在文件末尾添加一个正向解析区域和一个反向解析区域

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
// 添加一个正向解析区域,并定义为主服务器
zone "frank.com" IN {
    type master;            //master表示主服务器
    file "frank.com.zone";    //指明区域解析库文件,相对于/var/named/
};
//添加一个反向解析区域,并定义为主服务器
zone "138.168.192.in-addr.arpa" IN {
    type master;
    file "138.zone";
};

创建frank.com.zone解析库文件

# cat frank.com.zone 
$TTL 1D
frank.com.  IN SOA  ns.frank.com.    admin.frank.com. (
        201802001   ;序列号
        2H          ;刷新时间
        10M         ;重试时间间隔
        1W          ;过期时间
        1D          ;无法解析时否定答案的TTL值
        )
frank.com.       IN  NS  ns1.frank.com.
                 IN  NS  ns2.frank.com.
ns1.frank.com.   IN  A   192.168.138.200
ns2.frank.com.   IN  A   192.168.138.200
frank.com.       IN  MX 10  mx1.frank.com.
                 IN  MX 20  mx2.frank.com.
mx1.frank.com.   IN  A   192.168.138.200
mx2.frank.com.   IN  A   192.168.138.200
www.frank.com.   IN  A   192.168.138.200
master           IN CNAME   www.frank.com.
web              IN CNAME   www.frank.com.

创建138.zone反向解析库文件

# cat 138.zone 
$TTL 1d
@    IN  SOA     ns.frank.com. admin.frank.com. (
            201802001;
            2H;
            10M;
            1W;
            1D;
            )
                IN      NS  ns.frank.com.
200             IN      PTR www.frank.com.
200             IN      PTR ns.frank.com.  

注意事项:

  • 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
  • $TTL表示宏定义,TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
  • 这个文件里所有的域名结尾的点号一定不能省略
  • 区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,还要让区域解析库文件的属组为named。

 

# ll /var/named
total 16
drwxrwx---. 2 named named   23 Feb 21 13:10 data
drwxrwx---. 2 named named   60 Feb 21 13:11 dynamic
-rw-r-----. 1 root  named 2281 May 22  2017 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   44 Feb 21 13:14 slaves

检查配置文件语法

# named-checkconf
没有任何输出表示 /etc/named.conf没有语法错误
# named-checkzone "frank.com" "frank.com.zone"
zone frank.com/IN: loaded serial 201802001
OK
正向解析区域检查没问题
# named-checkzone "frank.com" "138.zone"
zone frank.com/IN: loaded serial 201802001
OK
反向解析区域检查没问题

启动named服务

# systemctl start named.service

使用dig测试
dig语法使用格式:
dig -t [SOA|A|CNAME|NS|MX] 域名 [@dns服务器地址] [+[no]trace|recurse]

dig -t A web.frank.com @192.168.138.200
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.frank.com @192.168.138.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40444
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.frank.com.            IN    A
;; 下面就是解析出的结果
;; ANSWER SECTION:
web.frank.com.        86400    IN    CNAME    www.frank.com.
www.frank.com.        86400    IN    A    192.168.138.200

;; AUTHORITY SECTION:
frank.com.        86400    IN    NS    ns2.frank.com.
frank.com.        86400    IN    NS    ns1.frank.com.

;; ADDITIONAL SECTION:
ns1.frank.com.        86400    IN    A    192.168.138.200
ns2.frank.com.        86400    IN    A    192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.200#53(192.168.138.200)
;; WHEN: Wed Feb 21 12:35:24 CST 2018
;; MSG SIZE  rcvd: 144

到此DNS主服务器已经配置完毕并能正常工作。

从服务器配置192.168.138.201

编辑/etc/named.conf将监听IP地址改一下,其它不需要更改

# cat /etc/named.conf
	listen-on port 53 { 192.168.138.201; 127.0.0.1; };

编辑/etc/named.rfc1912.zones将type类型改为slave

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
// 添加一个正向解析区域,并定义为从服务器
zone "frank.com" IN {
    type slave;            //slave表示主服务器
    masters { 192.168.138.200; };    //指明主服务器IP
    file “slaves/frank.com";        //指定从服务区域解析库文件位置
};
//添加一个反向解析区域,并定义为主服务器
zone "138.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.138.200; };
    file "slaves/138.zone";
};

 

注意事项:

从服务器的区域解析库文件应当是从主服务器加载过来的,所以无需创建区域解析库文件。


启动named服务

# systemctl start named

检查/var/named/slaves目录

# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 268 Feb 21 13:14 138.zone
-rw-r--r--. 1 named named 554 Feb 21 13:14 frank.com.zone

这2个文件是自动从主服务器同步过来的。
使用dig验证

 

dig -t MX frank.com @192.168.138.201

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t MX frank.com @192.168.138.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57146
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;frank.com.            IN    MX

;; ANSWER SECTION:
frank.com.        86400    IN    MX    10 mx1.frank.com.
frank.com.        86400    IN    MX    20 mx2.frank.com.

;; AUTHORITY SECTION:
frank.com.        86400    IN    NS    ns1.frank.com.
frank.com.        86400    IN    NS    ns2.frank.com.

;; ADDITIONAL SECTION:
mx1.frank.com.        86400    IN    A    192.168.138.200
mx2.frank.com.        86400    IN    A    192.168.138.200
ns1.frank.com.        86400    IN    A    192.168.138.200
ns2.frank.com.        86400    IN    A    192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.201#53(192.168.138.201)
;; WHEN: Wed Feb 21 13:15:43 CST 2018
;; MSG SIZE  rcvd: 178

rndc命令使用

rndc reload:
重载主配置文件和区域解析库文件,可以不用重启named服务情况下更新主配置文件和区域解析库文件。
rndc reload zone_name:
重域指定区域
rndc retransfer zone:
手动启动区域传送,不管序号是否增加或减少
rndc notify zone:
手动通知区域
rndc reconfig:
重载主配置文件
rndc querylog:
开启或关闭查询日志

关于DNS服务器

  • DNS服务器主从服务器,一般情况下主从一同工作,在客户端一般会配有多个DNS地址,如果第一个DNS地址无法解析,那么第二DNS地址也是无法解析的,当第一个DNS地址联系不上时(宕机)才会联系第二个DNS地址并寻求解析。
  • DNS服务器如果自已无法解析时会去其它服务器查询,查询到了会缓存下来,当同一用户在缓存失效之前再次请求同一记录时会优先使用缓存回应给客户端。至于缓存多长时间大了和小了都有优点和缺点,一般互联网上的DNS缓存大概要2-4小时,也就是当你在互联网更改记录一般会2-4小时后才能生效。
  • DNS服务器也可以部署成为缓存服务器。
  • DNS服务器中的转发器,部署过windows服务器的都知道,如果本机解析不了的可以使用转发器将请求转发到当地运营商的DNS服务器请求解析。

windows中的DNS服务器架设完成后,客户端会自动向DNS服务器注册,服务器端也会自动添加相应的A记录和PTR记录,linux系统当中是不是只能手动添加这些记录才能解析到局域网中的计算机名呢?

 

以上转发自https://www.cnblogs.com/mfyang/p/8467421.html ,感谢博主

 

 

 




posted @ 2020-09-14 10:55  chengxuyonghu  阅读(1384)  评论(0编辑  收藏  举报