首页 > 代码库 > linux架构学习第二十四天-DNS详解及bind搭建各种DNS测试

linux架构学习第二十四天-DNS详解及bind搭建各种DNS测试

内容:

一、DNS

1、域名系统概述

2、域名的结构

3、域名服务器

4、域名解析过程

5、域名服务器的资源记录(resource record RR)

二、bind搭建DNS服务器

1、bind的安装

2、搭建DNS服务器

3、搭建主从DNS服务器

4、实现DNS子域

5、实现DNS视图view(智能DNS)

一、DNS

1、域名系统概述

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。

域名到IP地址的解析过程的要点如下:当某一个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,并称为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信。所以DNS通信是基于UDP协议。

几个名词:

FQDN:full qualified domain name,完全控制域名,它包含了域和主机名,如:www.baidu.com是一个FQDN

IP:ip地址,包括IPv4、IPv6

Resolve:解析,转换

域名解析的过程其实就是:FQDN <-----> IP ,这两者间的转换过程

2、域名的结构

在互联网初期,由于主机较少,解决DNS的办法就是在本机创建一个hosts文件,里面记录了IP----FQDN的记录,但是随着互联网的快速发展,显然这种方法已经行不通

因此,早在1983年因特网开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。并采用客户服务器方式。DNS使大多数名字都在本地解析(resolve),仅有少量解析需要在因特网上通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机除了故障,也不会妨碍整个DNS系统的正常运行。

几个名词:

根域(root domain):由于采用树状的分布式结构,显然根域值得是一个结构开始的节点,这里的根域用“.”表示,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域全球有13台,这些主机的内容都保持一致性。

顶级域(top level domain):根域下来就是顶级域或者叫一级域,有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。

二级域:这个比较好理解,比如,baidu.com,baidu就是一个二级域名

技术分享


3、域名服务器

上面已经介绍,域名解析的过程其实就是FQDN和IP之间的转换,而这些转换关系就是一个数据库,由于互联网的蓬勃发展,需要使用一些专门的服务器来存储这些数据,当用户来访问请求解析时,可以查找自身的数据库,并把相关的信息反馈。

一个服务器所负责管辖(或有权限)的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区 <= 域。

根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

权限域名服务器:负责一个“区”的域名服务器。

本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

4、域名解析过程

前面已经介绍,域名解析其实就是FQDN和IP之间的转换

几个名词:

递归查询:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

因此,一个主机查询的过程分为两个部分,主机到本地DNS服务器之间是递归查询,本地服务器向根和相关服务器查询是迭代查询

正向解析:FQDN-->IP,这个比较好理解,通过主机名获取其对应的广域网IP地址

反向解析:IP-->FQDN,反向解析一般用于邮件服务器,IP反向解析主要应用到邮件服务器中来阻拦垃圾邮件,特别是在国外。多数垃圾邮件发送者使用动态分配或者没有注册域名的IP地址来发送垃圾邮件,以逃避追踪,使用了域名反向解析后,就可以大大降低垃圾邮件的数量。

比如你用 xxx@name.com 这个邮箱给我的邮箱 123@163.com 发了一封信。163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反向解析到这个IP所对应的域名是name.com 那么就接受这封邮件,如果反向解析发现这个IP没有对应到name.com,那么就拒绝这封邮件。

为了完成逆向域名解析,系统提供一个特别域,该特别域称为逆向解析域in-addr.arpa。这样欲解析的IP地址就会被表达成一种像域名一样的可显示串形式,后缀以逆向解析域域名"in-addr.arpa"结尾。

    例如一个IP地址:222.211.233.244,其逆向域名表达方式为:244.233.221.222.in-addr.arpa

技术分享


5、域名服务器的资源记录

这里常用资源记录的类型有这几种:记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX

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

A(address):是用来指定主机名(或域名)对应的IP地址记录。也就是 FQDN---IP

NS(name server):此记录指定负责给定区域的名称服务器。DNS服务器NS记录地址一般以以下的形式出现: ns1.domain.com、ns2.domain.com等。 简单的说,NS记录是指定由哪个DNS服务器解析你的域名。

MX(mail exchange):记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@mydomain.com 时,该用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。 

CNAME(Canonical Name):别名记录,允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录),它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL, 这两个别名的全称就“www.mydomain.com”和“mail.mydomain.com”,实际上他们都指向 “host.mydomain.com”。

PTR(pointer):反向查询IP--->FQDN,IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-add.arpa.

TXT:一般指某个主机名或域名的说明,如:admin IN TXT "管理员, 电话:XXXXXXXXXXX",mail IN TXT "邮件主机,存放在xxx , 管理人:AAA",Jim IN TXT "contact: abc@mailserver.com",也就是您可以设置 TXT 内容以便使别人联系到您。 

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

泛域名解析:泛域名是指在一个域名根下,以 *.Domain.com的形式表示这个域名根所有未建立的子域名。 泛解析是把*.Domain.com的A记录解析到某个IP 地址上,通过访问任意的前缀.domain.com都能访问到你解析的站点上。

域名转向:域名转向又称为域名指向或域名转发,当用户地址栏中输入您的域名时,将会自动跳转到您所指定的另一个域名。一般是使用短的好记的域名转向复杂难记的域名。

资源记录格式:

语法:name[TTL]IN rr_type value

注意:

(1) TTL可从全局继承

(2) @可用于引用当前域的名字

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

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

二、bind搭建DNS服务器

1、bind的安装

在 Linux 上面﹐提供 DNS 服务的套件是叫 bind﹐ 但执行服务程序名称则是 named 。可以yum安装或者手动编译安装,注意,手动编译安装,相关的配置文件要手动填写,这里使用yum安装,安装完成后设置服务启动,并且设置开机启动

[root@localhost ~]# service named status
rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
named is stopped
[root@localhost ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@localhost ~]# chkconfig named on
[root@localhost ~]# chkconfig --list named
named          0:off1:off2:on3:on4:on5:on6:off


DNS默认监听TCP、UDP的53端口

我们知道,每台DNS服务器都知道根域的位置,安装完bind后,其根域的配置位于/var/namd/named.ca

[root@localhost ~]# cat /var/named/named.
cat: /var/named/named.: No such file or directory
[root@localhost ~]# cat /var/named/named.ca 
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    December 01, 2015
;       related version of root zone:   2015120100
;
; formerly NS.INTERNIC.NET
;
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::b
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::c
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13
D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     198.97.190.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::53
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fe::53
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:c27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35
; End of file


由配置文件我们可以看到,有a-m 13台根服务器,还有其对应的IP地址,AAAA表示IPv6的地址。

查看bind的主配置文件:/etc/namd.conf,【注意这是C语言的格式,注释使用“//”,每行结束要有“;”,/* ”与“ */ ”之间则批注一整段文字。】,该文件只包括Bind的基本配置,并不包含任何DNS的区域数据。这个配置文件,可以分为几部分:

options{}:全局配置选项

logging{}:日志子系统配置

zone:定义了根域的文件位置

include "/etc/named.rfc1912.zones";包含了/etc/named.rfc1912.zones这个配置文件,一般吧要添加的域写在/etc/named.rfc1912.zones,方便管理

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

[21:02 root@centos6.8~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; }; /*DNS监听的本机IP地址和端口,默认是本机的环回地址*/
listen-on-v6 port 53 { ::1; };
directory "/var/named";/*指定了 named 的资源记录( RR - Resource Record )档案目录所在位置为﹕“/var/named”﹔也就是说﹐它会到这个目录下面寻找 DNS 记录档案。*/
dump-file "/var/named/data/cache_dump.db";/*当执行rndc dumpdb时服务器dump文件的路径*/
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     { localhost; };/*允许查询RR表的机器,localhost表示是本机的所有IP地址*/
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";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN { //在这个文件中是用zone关键字来定义域区的,一个zone关键字定义一个域区,但是为表规范,通常我们在/etc//named.rfc1912.zones文件添加相应的域名记录
type hint;/*在这里type类型有三种,它们分别是master,slave和hint它们的含义分别是: 
master:表示定义的是主域名服务器 
slave :表示定义的是辅助域名服务器 
hint:表示是互联网中根域名服务器 
*/ 
file "named.ca";/*由于上面已经定义directory是/var/named目录,所以这里是相对路径表示,表示是/var/namd/namd.ca*/
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

2、搭建DNS服务器

正向解析步骤: 

(1)按需修改named.conf,这里修改默认的监听IP,将默认127.0.0.1改成local本机所有IP地址,并且允许所有机器能查询,将allow-query的值改为any,表示允许所有机器IP查询

(2)建立需要添加的域名,这里在/etc/namd.rfc1912.zones文件添加相应的域名记录

(3)添加相应的资源记录表格,根据配置文件的定义,在/var/named目录下建立相应的RR

(4)修改RR的属主属组为named,同时修改相关权限,重启DNS服务即可生效

修改named.conf文件

[21:28 root@centos6.8~]# cat !$
cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
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     { 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";
};
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";


添加测试域名nihao.com

[21:33 root@centos6.8~]# cat !$
cat /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "nihao.com" IN {
type master;
file "nihao.zone"
};

添加RR

[21:46 root@centos6.8~]# cat !$
cat /var/named/nihao.zone
$TTL 86400
@IN SOA dns.nihao.com. admin.nihao.com. (
2016092301
1H
30M
1W
1D )
@IN NS dns.nihao.com.
dns.nihao.com.IN A 172.18.16.137
@IN MX mail 
mailIN A 1.1.1.2
wwwIN A 119.75.218.70

重启DNS服务后测试成功

[21:48 root@centos6.8~]#service named restart 
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
[root@localhost ~]# dig www.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33430
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.nihao.com.INA
;; ANSWER SECTION:
www.nihao.com.86400INA119.75.218.70
;; AUTHORITY SECTION:
nihao.com.86400INNSdns.nihao.com.
;; ADDITIONAL SECTION:
dns.nihao.com.86400INA172.18.16.137
;; Query time: 3 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Fri Sep 23 22:37:46 2016
;; MSG SIZE  rcvd: 81
[root@localhost ~]# dig mail.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> mail.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45751
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;mail.nihao.com.INA
;; ANSWER SECTION:
mail.nihao.com.86400INA1.1.1.2
;; AUTHORITY SECTION:
nihao.com.86400INNSdns.nihao.com.
;; ADDITIONAL SECTION:
dns.nihao.com.86400INA172.18.16.137
;; Query time: 1 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Fri Sep 23 22:37:54 2016
;; MSG SIZE  rcvd: 82

反向解析步骤:注意:由于正向解析和反向解析用的是不同的数据库,所以必须要新建一个zone和对应的RR资源记录

(1)按需修改named.conf,与正向保持一致即可

(2)建立需要添加的域名,这里在/etc/namd.rfc1912.zones文件添加相应的域名记录

【注意:改域名的名字不能顺便起,要按相应的IP或IP段反写,并加上.in-addr.arpa,否则反向解析会不成功】

(3)添加相应的资源记录表格,根据配置文件的定义,在/var/named目录下建立相应的RR

【注意:SOA记录与正向保持一致即可,另外不需要添加A记录,但是需要要有NS记录,同时VALUE值要写上全称,否则会加上默认的@GENERATE:第二步取的反向域名的名字】

(4)修改RR的属主属组为named,同时修改相关权限,重启DNS服务即可生效

在最后添加反向解析域名:

[11:03 root@centos6.8/var/named]# cat /etc/named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "nihao.com" IN {
type master;
file "nihao.zone";
};
zone "16.18.172.in-addr.arpa" IN {
type master;
file "172.18.16.zone";
};


新建反向解析的RR:

[11:11 root@centos6.8/var/named]# cat 172.18.16.zone 
$TTL 86400
@IN SOA dns.nihao.com. admin.nihao.com. (
2016092301
1H
30M
1W
1D )
@IN NS dns.nihao.com. //NS记录是必须的
@IN MX 10 mail.nihao.com. //要写上全程,否则会自动补上方向域名:16.18.172.in-addr.arpa.
111IN PTR www.nihao.com.
222IN PTR mail.nihao.com.

重启服务测试,正常:

[root@localhost ~]# dig -x 172.18.16.111 @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -x 172.18.16.111 @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60893
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;111.16.18.172.in-addr.arpa.INPTR
;; ANSWER SECTION:
111.16.18.172.in-addr.arpa. 86400 INPTRwww.16.18.172.in-addr.arpa.
;; AUTHORITY SECTION:
16.18.172.in-addr.arpa.86400INNSdns.nihao.com.
;; ADDITIONAL SECTION:
dns.nihao.com.86400INA172.18.16.137
;; Query time: 2 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 10:52:48 2016
;; MSG SIZE  rcvd: 105
[root@localhost ~]# dig -x 172.18.16.222 @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -x 172.18.16.222 @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48589
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;222.16.18.172.in-addr.arpa.INPTR
;; ANSWER SECTION:
222.16.18.172.in-addr.arpa. 86400 INPTRmail.nihao.com.
;; AUTHORITY SECTION:
16.18.172.in-addr.arpa.86400INNSdns.nihao.com.
;; ADDITIONAL SECTION:
dns.nihao.com.86400INA172.18.16.137
;; Query time: 2 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 11:03:09 2016
;; MSG SIZE  rcvd: 106

3、搭建主从DNS服务器

所谓的主从,并不是指主DNS服务器解析不出来进而到从DNS服务器请求解析,而是当主DNS服务器down机了,才会到从DNS服务器请求解析,因为所有的DNS数据库在所有的DNS服务器都是相同的,一台DNS服务器解析不出来,其他的DNS服务也解析不出来

有几点需要注意:

主服务器的区域解析库文件中必须有一条NS记录指向从服务器

从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中

因此主从DNS服务器的部署很简单(这里仅演示正向查询,反向查询再添加一个反向zone记录即可):

(1)主DNS的RR记录添加一天指向从DNS的NS记录

(2)从DNS添加相同zone,并且把RR记录放置在/var/named/slaves/目录中即可

定义从区域的方法:

zone "ZONE_NAME" IN {

type slave;

masters { MASTER_IP; };

file "slaves/ZONE_NAME.zone";

};

(3)修改相关的属组属主和权限,重启named服务即可

主DNS添加NS指向从DNS

[11:31 root@centos6.8/var/named]# cat !$
cat nihao.zone
$TTL 86400
@IN SOA dns.nihao.com. admin.nihao.com. (
2016092301
1H
30M
1W
1D )
@IN NS dns.nihao.com.
@IN NS dns1.nihao.com.
dnsIN A 172.18.16.137
dns1IN A 172.18.16.113
wwwIN A 172.18.16.111
@IN MX 10 mail
mailIN A 172.18.16.222

设置从DNS的zone

[11:38 root@localhost.localdomain~]# cat /etc/named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "nihao.com" IN {
type slave;
file "slaves/nihao.com.zone";
masters { 172.18.16.137; };
};
[11:37 root@localhost.localdomain~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[11:38 root@localhost.localdomain~]# ll /var/named/slaves/
total 4
-rw-r--r--. 1 named named 379 Sep 24 11:38 nihao.com.zone#已经自动同步RR记录

测试:主机down机(停掉DNS服务),从DNS正常工作

[11:40 root@centos6.8/var/named]# service named stop
Stopping named: .                                          [  OK  ]
[11:41 root@centos6.8/var/named]# dig www.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.nihao.com @172.18.16.137
;; global options: +cmd
;; connection timed out; no servers could be reached
[11:41 root@centos6.8/var/named]# dig www.nihao.com @172.18.16.113
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.nihao.com @172.18.16.113
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57600
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.nihao.com.INA
;; ANSWER SECTION:
www.nihao.com.86400INA172.18.16.111
;; AUTHORITY SECTION:
nihao.com.86400INNSdns.nihao.com.
;; ADDITIONAL SECTION:
dns.nihao.com.86400INA172.18.16.137
;; Query time: 9 msec
;; SERVER: 172.18.16.113#53(172.18.16.113)
;; WHEN: Sat Sep 24 11:42:51 2016
;; MSG SIZE  rcvd: 81


4、实现DNS子域

子域授权的实现:假我们一家公司获得了某一个域的使用权、而我们想在这个域下分出几个子域来分别分给一些部门使用、这样也方便管理、举个例子:nihao.com下有两个子域、分别是tech.nihao.com、fin.nihao.com、而他们两个下面也他别有自己的www和mail等主机、而每一个域内最主要的一台主机就是dns主机、所谓子域授权就是在父域的配置文件中添加如下项:

实现DNS子域步骤:

(1)要授权给谁要明确说明、也就是授权的子区域名称:在父域RR中添加一条NS指向子域的DNS

(2)按照前面的步骤配置子域的DNS服务器即可

就是这么简单,下面来实验演示:

在父域RR中添加一条NS指向子域的DNS

[13:38 root@centos6.8/var/named]# cat /var/named/nihao.zone 
$TTL 86400
@IN SOA dns.nihao.com. admin.nihao.com. (
2016092301
1H
30M
1W
1D )
@IN NS dns.nihao.com.
dnsIN A 172.18.16.137
wwwIN A 172.18.16.111
@IN MX 10 mail
mailIN A 172.18.16.222
techIN NS dns.tech
dns.techIN A 172.18.16.113


在子域DNS服务器建立zone和RR

[13:38 root@localhost.localdomain~]# cat /etc/named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "tech.nihao.com" IN {
type master;
file "tech.nihao.com.zone";
};
[13:45 root@localhost.localdomain~]# cat /var/named/tech.nihao.com.zone 
$TTL 1D
@IN SOA dns.tech.nihao.com. admin.nihao.com. (
2016092401
1H
30M
1W
1D
)
@IN NS dns
dnsIN A 172.18.16.113
wwwIN A 1.1.1.1
@IN MX 10 mail
mailIN A 2.2.2.2

测试解析子域机器成功

[13:37 root@localhost.localdomain~]# dig www.tech.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.tech.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44573
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.tech.nihao.com.INA
;; ANSWER SECTION:
www.tech.nihao.com.86400INA1.1.1.1
;; AUTHORITY SECTION:
tech.nihao.com.86400INNSdns.tech.nihao.com.
;; Query time: 241 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 13:38:18 2016
;; MSG SIZE  rcvd: 70
[13:38 root@localhost.localdomain~]# dig mail.tech.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> mail.tech.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6140
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;mail.tech.nihao.com.INA
;; ANSWER SECTION:
mail.tech.nihao.com.86400INA2.2.2.2
;; AUTHORITY SECTION:
tech.nihao.com.86400INNSdns.tech.nihao.com.
;; Query time: 4 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 13:38:28 2016
;; MSG SIZE  rcvd: 71


5、实现DNS视图view

从Bind 9开始,bind支持视图功能。什么是视图呢?就是以某种特殊的方式根据用户来源的不同而返回不同的查询结果。比如同样是访问www.baidu.com,DNS返送给电信用户和联通用户的IP地址是不一样的,这样既可以达到分流效果,也提高了用户的访问速度,在CDN中应用较广泛。

需要注意的是:

(1)、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。

(2)、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。

(3)、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。

(4)、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。

因此,实现DNS试图view步骤:

(1):修改配置文件named.conf,,定义相应的acl和view

(2):创建每个view的zone对于的RR文件

(3):重启DNS服务后测试

下面来进行模拟实验:

规划:172.18.16.137的这个用户访问www.nihao.com的IP地址是1.1.1.1

172.18.16.113的这个用户访问www.nihao.com的IP地址是2.2.2.2(我的机器少只能模拟两个主机,这里写上网段也可以)

说明,这里仅实验最简单的view,只实现正向查询,并没有包括根和反向查询,想添加直接写上相应的内容即可

编辑named.conf文件,创建相应的acl和view:

[15:56 root@centos6.8/var/named]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
acl Anet {
172.18.16.137;
};
acl Bnet {
172.18.16.113;
};
options {
listen-on port 53 { any; };
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     { 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";
};
view Anet {
match-clients { Anet; };
zone "nihao.com" IN {
type master;
file "Anet.nihao.com.zone";
};
};
view Bnet {
match-clients { Bnet;  };
zone "nihao.com" IN {
type master;
file "Bnet.nihao.com.zone";
};
};
view Default {
match-clients {any;};
zone "nihao.com" IN {
type master;
file "Bnet.nihao.com.zone";
};
};

创建每个view的zone对于的RR文件

[15:59 root@centos6.8/var/named]# cat /var/named/Anet.nihao.com.zone 
$TTL 86400
@IN SOA ns.nihao.com. admin.nihao.com. (
2016092401
30M
10M
1W
1D
)
@IN NS ns
nsIN A 172.18.16.137
wwwIN A 1.1.1.1
[15:59 root@centos6.8/var/named]# cat /var/named/Bnet.nihao.com.zone 
$TTL 86400
@IN SOA ns.nihao.com. admin.nihao.com. (
2016092401
30M
10M
1W
1D
)
@IN NS ns
nsIN A 172.18.16.137
wwwIN A 2.2.2.2

测试,同样是访问www.nihao.com,,但是DNS返回的IP不一样,实现了所谓的智能DNS效果

[15:59 root@centos6.8/var/named]#ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:7D:87:20  
          inet addr:172.18.16.137  Bcast:172.18.16.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe7d:8720/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:481348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18543 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:44699057 (42.6 MiB)  TX bytes:2262423 (2.1 MiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:325 errors:0 dropped:0 overruns:0 frame:0
          TX packets:325 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:32316 (31.5 KiB)  TX bytes:32316 (31.5 KiB)
[16:00 root@centos6.8/var/named]#dig  www.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46531
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.nihao.com.INA
;; ANSWER SECTION:
www.nihao.com.86400INA1.1.1.1
;; AUTHORITY SECTION:
nihao.com.86400INNSns.nihao.com.
;; ADDITIONAL SECTION:
ns.nihao.com.86400INA172.18.16.137
;; Query time: 2 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 16:01:03 2016
;; MSG SIZE  rcvd: 80
[15:56 root@localhost.localdomain~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:90:2E:03  
          inet addr:172.18.16.113  Bcast:172.18.16.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe90:2e03/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60372 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10143 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:16734660 (15.9 MiB)  TX bytes:1024521 (1000.5 KiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:99 errors:0 dropped:0 overruns:0 frame:0
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:11851 (11.5 KiB)  TX bytes:11851 (11.5 KiB)
[15:56 root@localhost.localdomain~]# dig www.nihao.com @172.18.16.137
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.nihao.com @172.18.16.137
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63334
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.nihao.com.INA
;; ANSWER SECTION:
www.nihao.com.86400INA2.2.2.2
;; AUTHORITY SECTION:
nihao.com.86400INNSns.nihao.com.
;; ADDITIONAL SECTION:
ns.nihao.com.86400INA172.18.16.137
;; Query time: 3 msec
;; SERVER: 172.18.16.137#53(172.18.16.137)
;; WHEN: Sat Sep 24 15:56:53 2016
;; MSG SIZE  rcvd: 80

    至此,相信你对DNS以及搭建有了不错的了解。



本文出自 “6638225” 博客,转载请与作者联系!

linux架构学习第二十四天-DNS详解及bind搭建各种DNS测试