DNS域名解析服务

Posted Welcome MyBlog~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS域名解析服务相关的知识,希望对你有一定的参考价值。

一、DNS概念简述

DNS:Domain Name Service 域名解析服务,工作在应用层,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS监听在TCP和UDP端口53。

FQDN:全称域名,如 www.example.com

  • www是主机名
  • example.com是域名

实现名称到IP解析的有三种方式

  • 分散式解决方案:/etc/hosts,不易管理
  • 集中式解决方案:NIC,如果主机太多,对单一服务的压力太大
  • 分布式解决方案:DNS,解决了上俩个方式的不足

权威的DNS服务器:记录主机名到IP的DNS服务器叫做权威的DNS服务器

主从DNS服务器:主服务器记录发生变化,会同步到从服务器,(主从复制),实现容错机制

  • 序列号:解析库版本号,主服务器解析库变化时,其序列递增
  • 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
  • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
  • 过期时长:从服务器联系不到主服务器时,多久后停止服务

DNS的查询类型

  • 递归查询:服务器从根开始去找一级一级的找到目标主机,直到找到,负责到底
  • 迭代查询:根服务器给了主机所在的域的IP,并没有直接给出结果

DNS的解析类型:正反向解析是两个不同的名称空间,是两棵不同的解析树

  • 正向解析:FQDN --> IP

  • 反向解析:IP ---> FQDN 如邮件服务器需要用到反向解析技术

DNS服务器的类型

  • 主服务器:管理和维护所负责解析的域内解析库的服务器
  • 从服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
  • 缓存服务器

DNS的工作原理

  1. 客户端向离它最近的DNS服务器发起了查询请求,一般是由运营商提供
  2. 如果代理DNS服务器有记录则直接可以返回给客户端;如果没有记录则去根DNS服务器请求,根DNS并不会存储所以的主机名对应IP的记录,它只会记录它的子域的IP,例如.com等后缀的域,代理DNS服务器会拿到.com域的DNS服务器IP
  3. 然后再将请求发往.com.域的DNS服务器,如果还是没有找到主机,则再往它的下一级找,直到找到具体的主机,把IP返回给客户端,同时代理DNS服务器也会缓存一份到本地

一次完整的查询请求经过的流程:Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…

DNS域名

  • 根域:目前有13个根集群服务器,美国10台,日本1台,荷兰1台,瑞典1台
  • 一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 组织域、国家域(.cn, .ca, .hk, .tw)、反向域 等
  • 二级域名
  • 三级域名
  • 最多127级域名

ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理

DNS服务管理工具

dig:只用于测试dns系统,不会查询hosts文件进行解析

  • -x IP :测试反向解析
  • -t axfr ZONE_NAME @SERVER :模拟区域传送
  • -t NS . @a.root-servers.net :查询所有的根DNS服务器

host

  • -t:指定查询记录类型
  • host www.dongfei.tech 192.168.0.7 :向192.168.0.7查询www.dongfei.tech这个域名

rndc

  • reload: 重载主配置文件和区域解析库文件
  • reload zonename: 重载区域解析库文件
  • retransfer zonename: 手动启动区域传送,而不管序列号是否增加
  • notify zonename: 重新对区域传送发通知
  • reconfig: 重载主配置文件
  • querylog: 开启或关闭查询日志文件/var/log/message
  • trace: 递增debug一个级别
  • trace LEVEL: 指定使用的级别
  • notrace:将调试级别设置为 0
  • flush:清空DNS服务器的所有缓存记录

named-checkconf:检查配置文件的语法

named-checkzone "dongfei.com" /var/named/dongfei.com.zone :查询区域数据库文件的语法

二、DNS服务

DNS的实现:bind(Bekerley Internat Name Domain ) ,由 ISC (www.isc.org) 维护,本章所有配置实例的bind版本为 :bind-9.9.4-61.el7.x86_64

软件包名:bind

服务名:named

提供的服务:DNS域名解析

主配置文件:/etc/named.conf

options {  #全局选项
    listen-on port 53 { 127.0.0.1; };  //默认监听本机的53号端口,如果没有其他需求则注释掉
    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|no;  //递归查询,默认开启
    dnssec-enable yes;  //sec功能,与安全加密传输相关的选项,如果要做转发,需要关闭此选项
    dnssec-validation yes;  //同上一条,需要关闭
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
    allow-transfer { none; }:允许区域传送的主机;白名单,默认开启,建议关闭
};

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";

DNS解析数据库文件存放位置:/var/named/

区域定义:/etc/named.rfc1912.zones

zone "test.com" IN { //internation 记录
    type {master|slave|hint|forward};   //类型,主服务器
    file "test.com.zone";  //区域数据库文件
};  

区域文件模板:/etc/named.rfc1912.zones

# cat /var/named/named.localhost 
$TTL 1D  #默认的TTL值
@       IN SOA  @ rname.invalid. (  						  #SOA记录
                                        0       ; serial		#序列号
                                        1D      ; refresh		#主从复制的时间间隔
                                        1H      ; retry			#如果主从复制失败重试时间
                                        1W      ; expire		#失效时间
                                        3H )    ; minimum  		#否定答案的TTL值
        NS      @			#名字服务器记录
        A       127.0.0.1	 #正向解析记录
        AAAA    ::1			 #IPv6的正向解析记录

区域解析数据库文件:

资源记录:Resource Record 简称 RR

语法格式:name [TTL] IN rr_type value

  • name:当前区域的名字,列如 www.example.com.,注意:最后的 "." 一定要加,如果不加则会把你的域名当成区域名字,再在后边加上你的默认域名。 “@”:表示当前域名的名字

TTL:例如$TTL 1D的意思是默认的TTL值为1天

TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应

同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

  • IN:关键字
记录类型
  • A :正向解析,名字到IP
主机名(简称只写主机名,如www)	A	ip地址

@   A   192.168.0.12  		//不需要输入www,直接输入域名则可访问此网站
*   A   192.168.0.12	  //泛域名解析,只要请求的是这个域,但是没有匹配的主机,则应答此条记录
$GENERATE 1-254 websvr$ A 192.168.0.$   //循环,表示websvr1 A 192.168.0.1 到 websvr254 A 192.168.0.254的254条记录
  • AAAA:正向解析,名字到IPV6
  • PTR:反向解析
12  PTR websrv.dongfei.com.
14  PTR web2srv.dongfei.com.
100 PTR mailsrv.dongfei.com.
  • NS:名字服务器记录,记录谁是这个域的DNS服务器,包括主服务器和从服务器
		NS	dns  //表示192.168.0.1这台主机是这个域的dns服务器
dns		A	192.168.0.1
  • CNAME:别名记录
websrv	A	192.168.0.10
websrv	A	192.168.0.11
websrv	A	192.168.0.12
www		CNAME	websrv   //访问www.xxxx.com的时候则代表访问192.168.0.10-12,DNS会做轮调应答,实现负载均衡的功能
  • MX:邮件记录
@       MX  10  mailsrv1
@       MX  20  mailsrv2
mailsrv1    A   192.168.0.100
mailsrv2    A   192.168.0.200
  • SOA:起始授权记录,记录域中的主DNS服务器,一个区域解析库中只能有且仅能有一个SOA记录,必须位于解析库的第一条记录

SOA记录的格式:域名称 IN SOA 主DNS主机名 域管理员邮箱 (序列号 主从同步的时间间隔 同步失败的尝试时间间隔 联系不上主DNS多长时间后失效 域名无法找到,在多长时间内不会再去查询)

@ IN    SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )

实例1:配置DNS主服务器的正向解析

​ 1)安装bind

# yum install bind
# systemctl start named

​ 2)修改主配置文件,将下边俩条注释掉

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };  //监听本机的所有地址
//  allow-query     { localhost; };  //允许给所有客户端解析

​ 3)修改区域数据文件

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {  	//internation 记录
    type master;  			//类型,主服务器
    file "dongfei.com.zone";  //区域数据库文件,指向/var/named/dongfei.com.zone
};

​ 4)新建区域解析数据库文件,/var/named/dongfei.com.zone

# vim /var/named/dongfei.com.zone
$TTL 1D  //代表全局的TTL值
@ IN    SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H ) //SOA记录,按格式写
        NS  dns1			//NS记录,域中有几个DNS服务器都要写出来
dns1    A   192.168.0.7		 //NDS服务器的A记录,0.7是本机的IP
www     A   192.168.0.6		 //一条正向解析记录,这里的0.6是web服务器

# chgrp named /var/named/dongfei.com.zone  //切记,修改文件的权限和所属组,保证named进程有此文件的可读属性
# chmod 640 /var/named/dongfei.com.zone
# ll /var/named/dongfei.com.zone
-rw-r-----. 1 root named 120 Jun  1 19:39 /var/named/dongfei.com.zone

​ 5)测试

# named-checkconf  //检查主配置文件
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone  //检查
# rndc reload  //重载配置文件
# dig www.dongfei.com @192.168.0.7  //在客户端上使用dig命令测试,如果返回有以下值则说明成功
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6

实例2:配置DNS主服务器的反向解析

​ 1)在/etc/name.rfc1912.zone中加入

zone "0.168.192.in-addr.arpa" IN {  //地址需要反着写,与正向解析不同,是另一颗树
    type master;
    file "192.168.0.zone";
};

​ 2)创建区域数据文件

# vim /var/named/192.168.0.zone
$TTL 1D
@ IN    SOA dns.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
                        NS  dns.dongfei.com.
dns.dongfei.com         A   192.168.0.7
100                     PTR mail.dongfei.com.

# chgrp named /var/named/192.168.0.zone
# chmod 640 /var/named/192.168.0.zone
# rndc reload

​ 3)重载配置文件,测试

# vim /etc/resolv.conf
nameserver 192.168.0.7  //在客户端将DNS服务器指向我们配置的DNS服务器
# dig -x 192.168.0.100  //测试,如果出现以下信息则表示成功
;; ANSWER SECTION:
100.0.168.192.in-addr.arpa. 86400 IN    PTR     mail.dongfei.com.

实例3:DNS服务的动态更新

​ 1)打开允许指定主机更新数据库

zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
    allow-update { 192.168.0.6; };  //允许192.168.0.6远程更新数据库
};

​ 2)放开数据库文件夹和文件的权限

# chmod 770 /var/named/
# ll -d /var/named/
drwxrwx---. 5 root named 173 Jun  1 20:55 /var/named/
# rndc reload

​ 3)在客户端测试,上传一条更新记录

# nsupdate 
> server 192.168.0.7
> zone dongfei.com
> update add ftp.dongfei.com 86400 IN A 192.168.0.101
> send
> quit
# dig ftp.dongfei.com @192.168.0.7  // 出现以下信息表示成功
;; ANSWER SECTION:
ftp.dongfei.com.        86400   IN      A       192.168.0.101

这时我们再回来看DNS服务器的/var/named/文件夹下出现了一个 dongfei.com.zone.jnl 的文件,这个文件是更新数据库的日志文件,它不会立即同步到区域数据中库文件中,而是会先存放到日志文件中,过一会儿再向数据库文件中同步。

# named-journalprint /var/named/dongfei.com.zone.jnl 查看日志文件

三、DNS的主从复制

DNS服务一般需要一台主,俩台从,如果主DNS服务器出现故障后可以向从DNS服务器请求解析;客户端需要将主DNS设置为主DNS服务器,将从DNS服务器设置为备DNS服务器

实例3:配置主从DNS服务

192.168.0.7 为主DNS服务器

192.168.0.11 为从DNS服务器

192.168.0.6 为客户端

​ 1)主服务器配置

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    allow-transfer { 192.168.0.11; };  //只允许从DNS服务器同步区域数据库

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
            NS  dns2		 //将从DNS服务器的NS记录添加到此
dns1        A   192.168.0.7
dns2        A   192.168.0.11  //将从DNS服务器的A记录添加到此

ftp         A   192.168.0.101
www         A   192.168.0.6
@           MX  10  mail
mail        A   192.168.0.100

​ 2)配置从DNS服务器

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    allow-transfer  { none; };  //为了数据安全,不允许任何主机从从DNS服务器上拉取区域数据

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type slave;  //类型为从服务器
    masters { 192.168.0.7; };  //主DNS服务器的IP
    file "slaves/dongfei.com.zone.slave";  //数据库文件保存到 /var/named/slaves/ 文件夹下,名字叫dongfei.com.zone.slave
};

# systemctl restart named //重启服务
# ls /var/named/slaves/ //可以看到数据库文件则证明已经同步成功
dongfei.com.zone.slave

​ 3)在客户端测试

# vim /etc/resolv.conf  //修改DNS配置文件
; generated by /sbin/dhclient-script
nameserver 192.168.0.7
nameserver 192.168.0.11

# dig www.dongfei.com
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6
;; SERVER: 192.168.0.7#53(192.168.0.7)

主服务器可以正常解析,接下来我们将主机模拟故障,比如把网络断掉

# dig www.dongfei.com  //再次在客户端测试,发现现在已经是从服务响应我们的解析请求了
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.6
;; SERVER: 192.168.0.11#53(192.168.0.11) //192.168.0.11是从服务器地址

dig -t axfr magedu.com @192.168.0.7 手动抓取区域记录

  • 注意:

    1. 用户查询是走的UDP的53端口
    2. 主从复制的时候需要放开tcp和udp 的53号端口
    3. 需要的防火墙开放tcp和udp的53号端口

四、DNS子域委派

在互联网中我们的单个DNS服务无法去存储所有主机的域名到IP的记录,比如根域,它只是将来至查询.com 的请求委派给.com域的DNS服务器,来自.org的查询交给.org域的DNS服务器。具体怎么实现配置,那我们来一起研究吧

实例4:配置子域委派的实现

环境:

​ 父:192.168.0.7,dongfei.com

​ 子:192.168.0.11,bj.dongfei.com

​ 1)配置父域

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    dnssec-enable no;
    dnssec-validation no;

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
bj          NS  dns2.dongfei.com.  //将bj域的请求委派给dns2来处理
dns1        A   192.168.0.7
dns2        A   192.168.0.11

# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# rndc reload

​ 2)配置子域

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };

# vim /etc/named.rfc1912.zones
zone "bj.dongfei.com" IN {
    type master;
    file "bj.dongfei.com.zone";
};

# vim /var/named/bj.dongfei.com.zone
$TTL 1D
@ IN SOA dns1.bj.dongfei.com. admin.bj.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   192.168.0.11
www     A   192.168.0.6

# chgrp named /var/named/bj.dongfei.com.zone
# chmod 640 /var/named/bj.dongfei.com.zone
# rndc reload

​ 3)在客户端测试

# dig www.bj.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.bj.dongfei.com.     86385   IN      A       192.168.0.6

五、DNS转发

    1. 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
    1. 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行;关闭dnssec功能(dnssec-enable no; dnssec-validation no; )

转发器类型:

  1. first模式:优先先转发到目标DNS服务器,如果区域不存在,再转发到根上去查询
  2. onyl模式:只转发到目标DNS服务器,如果目标主机没有此查询的信息则转发失败

实例5:配置DNS转发(全局转发)

192.168.0.11 为转发DNS服务器

192.168.0.7 为目标DNS服务器

​ 1)配置转发DNS服务器

# vim /etc/named.conf
options {
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
    recursion yes;  //开启递归查询
    dnssec-enable no;
    dnssec-validation no;
    forward only;  //only模式
    forwarders { 192.168.0.7; };  //目标DNS服务器IP
};

# rndc reload //重载配置文件

​ 2)配置目标DNS服务器

# vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-transfer { 192.168.0.11; };
    recursion no;  //关闭递归查询
    dnssec-enable no;
    dnssec-validation no;

# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};

# vim /var/named/dongfei.com.zone
$TTL 86400  ; 1 day
@ IN SOA    dns1.dongfei.com. admin.dongfei.com. (
                2          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns1
dns1        A   192.168.0.7
webs        A   192.168.0.6
webs        A   192.168.0.5
www         CNAME   webs
@           MX  10 mail
mail        A   192.168.0.100
ftp         A   192.168.0.101

# rndc reload

​ 3)在客户端测试

# dig www.dongfei.com @192.168.0.11
;; ANSWER SECTION:
www.dongfei.com.        86369   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86369   IN      A       192.168.0.6
webs.dongfei.com.       86369   IN      A       192.168.0.5
;; SERVER: 192.168.0.11#53(192.168.0.11)  //真正的域名解析信息在192.168.0.7上,这里由0.11代为去查询

如果对单个域进行转发则把配置写到区域配置文件中即可

# vim /etc/named.rfc1912.zones
zone "dongfei.com" {
   type forward;
   forward only;
   forwarders { 192.168.0.7; };
};

六、智能DNS

互联网上各个地区的网络站点分布到各个地区,这时就需要按地区为当地地区的客户解析到当地的站点服务器,比如在北京和在上海打开同一个网站显示的信息是不同的;这就需要用到智能DNS解析的技术。

商站点或者视频站点,这些站点需要快速响应客户的请求,不可能将服务器搭建到一个地区,而是需要分布到各个省市,在每个地方有缓存服务器,这就是CDN: Content Delivery Network内容分发网络的工作,一般由单独的CDN公司搭建机房服务于各大电商视频等站点。

接下来,我们一起研究一下如何实现智能DNS解析吧

ACL规则

acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;只能先定义,后使用,因此一般定义在配置文件中,处于options的前面

格式:

acl acl_name { 
  ip; 
  net/prelen; 
  …… 
}; 

bind有四个内置的acl:

​ none: 没有一个主机

​ any: 任意主机

​ localhost: 本机

​ localnet: 本机的IP同掩码运算后得到的网络地址

访问控制的指令:

  • allow-query {}: 允许查询的主机;白名单
  • allow-transfer {}:允许区域传送的主机;白名单
  • allow-recursion {}: 允许递归的主机,建议全局使用
  • allow-update {}: 允许更新区域数据库中的内容

view 视图

view:视图:实现智能DNS

  • 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
  • 每个view用来匹配一组客户端
  • 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

注意:
(1) 一旦启用了view,所有的zone都只能定义在view中
(2) 仅在允许递归请求的客户端所在view中定义根区域
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表

实例6:ACL和view实现智能DNS

在一台主机上有俩张网卡,配置俩个网段来模拟来自不同地区的客户

​ 192.168.0.7/24

​ 172.20.111.236/16

​ 1)添加ACL和视图

# vim /etc/named.conf
acl bjnet {  //注意,acl要写在options前边,而且要注意acl的匹配顺序关系,至上而下
    192.168.0.0/24;
};
acl shnet {
    172.20.0.0/16;
};
acl othernet {
    any;
};

options {
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };
};

view bjview {
    match-clients {bjnet;};
    include "/etc/named.rfc1912.zones.beijing";
};
view shview {
    match-clients {shnet;};
    include "/etc/named.rfc1912.zones.shanghai";
};
view otherview {
    match-clients {othernet;};
    include "/etc/named.rfc1912.zones";
};

include "/etc/named.root.key";

注意:要将默认配置文件中的根区域配置放到/etc/named.rfc1912.zones文件中

​ 2)创建各地区区域配置文件

# vim /etc/named.rfc1912.zones.beijing 
zone "dongfei.com" {
    type master;
    file "dongfei.com.zones.beijing";
};
# vim /etc/named.rfc1912.zones.shanghai
zone "dongfei.com" {
    type master;
    file "dongfei.com.zones.shanghai";
};

​ 3)配置解析数据库文件

# vim /var/named/dongfei.com.zones.beijing
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   192.168.0.7
www     A   192.168.0.1
# vim /var/named/dongfei.com.zones.shanghai
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dns1    A   172.20.111.236
www     A   172.20.111.1

​ 4)在客户端测试

# dig www.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       192.168.0.1
;; SERVER: 192.168.0.7#53(192.168.0.7)

# dig www.dongfei.com @172.20.111.236
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      A       172.20.111.1
;; SERVER: 172.20.111.236#53(172.20.111.236)
从上边的测试结果,从不同IP段查询同一个域名得到的结果却不一样,从而可以实现按地区来智能解析

七、模拟搭建互联网名称解析服务架构

​ 1)192.168.0.1 : web

# echo -e web1.dongfei.com\\n\\<h1\\>hello web1\\</h1\\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.1
# web1.dongfei.comn<h1>hello web1</h1>

​ 2)192.168.0.2 : web2

# echo -e web2.dongfei.com\\n\\<h2\\>hello web1\\</h1\\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.2
web2.dongfei.comn<h2>hello web2</h1>

​ 3)192.168.0.3 :dns1,配置dongfei.com域的主DNS服务器

# 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";
//  allow-query     { localhost; };  //注释掉
    allow-transfer { 192.168.0.4; };  //只允许192.168.0.4的主机,也就是从DNS来拉取区域解析数据库
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
    type master;
    file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
        NS  dns1
        NS  dns2
dns1    A   192.168.0.3
dns2    A   192.168.0.4

webs    A   192.168.0.1
webs    A   192.168.0.2
www     CNAME   webs
# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# named-checkconf
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone
# service named start
# dig www.dongfei.com @192.168.0.3
;; ANSWER SECTION:
www.dongfei.com.        86400   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86400   IN      A       192.168.0.1
webs.dongfei.com.       86400   IN      A       192.168.0.2

​ 4)192.168.0.4 :dns2,配置dongfei.com域的从DNS服务器

# 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";
//  allow-query     { localhost; };  //注释掉
    allow-transfer { none; };  //不对任何主机做区域传送
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" {
    type slave;  //类型为从服务器
    masters { 192.168.0.3; };  //指向谁是我的主服务器
    file "slaves/dongfei.com.zone.slave";  //解析数据库存放位置
};
# named-checkconf 
# service named start
# ls -l /var/named/slaves/  //查看一下有没有数据库文件,有则说明同步成功
-rw-r--r--. 1 named named 417 May 19 22:09 dongfei.com.zone.slave

​ 5)192.168.0.5 :com. 配置子域委派

# 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";
//  allow-query     { localhost; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "com" IN {
    type master;
    file "com.zone";
};
# vim /var/named/com.zone
@ IN SOA dns1.com. admin.com. ( 1 1D 1H 1W 3H )
        NS  dns1
dongfei NS  dns2.com.  //子域委派给192.168.0.3和192.168.0.4
dns1    A   192.168.0.5
dns2    A   192.168.0.3
dns2    A   192.168.0.4
# chgrp named /var/named/com.zone
# chmod 640 /var/named/com.zone
# named-checkconf
# service named start
# dig www.dongfei.com @192.168.0.5
www.dongfei.com.        86387   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86387   IN      A       192.168.0.1
webs.dongfei.com.       86387   IN      A       192.168.0.2
;; AUTHORITY SECTION:
dongfei.com.            86400   IN      NS      dns2.com.
;; ADDITIONAL SECTION:
dns2.com.               86400   IN      A       192.168.0.4
dns2.com.               86400   IN      A       192.168.0.3
;; SERVER: 192.168.0.5#53(192.168.0.5)

​ 6)192.168.0.6 :根域配置

# 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";
//  allow-query     { localhost; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "." {
    type master;
    file "root.zone";
};
# vim /var/named/root.zone 
$TTL 1D
@ IN SOA dns1. admin. ( 1 1D 2H 3D 1H )
        NS  dns1
com     NS  dns2
dns1    A   192.168.0.6
dns2    A   192.168.0.5
# chgrp named /var/named/root.zone
# chmod 640 /var/named/root.zone
# service named start
# dig www.dongfei.com @127.0.0.1
;; ANSWER SECTION:
www.dongfei.com.        86177   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86177   IN      A       192.168.0.1
webs.dongfei.com.       86177   IN      A       192.168.0.2

​ 7)192.168.0.7 :缓存DNS服务器配置

# 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";
//  allow-query     { localhost; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};  

zone "." IN {
    type hint;
    file "named.ca";
};
# vim /var/named/named.ca 
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     192.168.0.6  //将根服务器指向我们自己搭建的根DNS服务器
# service named start

​ 8)192.168.0.8 :在客户端测试

# vim /etc/resolv.conf
nameserver 192.168.0.7  //将自己的DNS服务器指向缓存服务器
# dig www.dongfei.com  //出现以下信息则说明成功
;; ANSWER SECTION:
www.dongfei.com.        86319   IN      CNAME   webs.dongfei.com.
webs.dongfei.com.       86319   IN      A       192.168.0.1
webs.dongfei.com.       86319   IN      A       192.168.0.2
;; SERVER: 192.168.0.7#53(192.168.0.7)

​ 到此为止,我们可以访问以下www.dongfei.com,看看是否可以正常解析

[root@client ~]# curl www.dongfei.com 
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com 
web1.dongfei.comn<h1>hello web1</h1>
[root@client ~]# curl www.dongfei.com 
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com 
web1.dongfei.comn<h1>hello web1</h1>

​ 从测试结果看来,不仅可以正常解析,还实现了DNS负载均衡的功能。

学习 _ date 2018.06.02 16.37

以上是关于DNS域名解析服务的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本实现批量解析域名IP地址(支持多DNS)

DNS分离解析和智能解析 1构建DNS域名服务器的分离解析 DNS分离解析域名服务器概述 DNS分离解析域名服务器实际也是主域名DNS服务器,这里所说的分离解

CentOS7 搭建 DNS 域名解析服务器

DNS解析原理

Linux网络——DNS域名解析服务(正向解析实验)

DNS域名解析服务