一、DNS 系统的作用及类型

DNS 系统在网络中的作用就是维护一个地址数据库,其中记录了各种主机域名与 IP 地 址的对应关系,以便为客户程序提供正向或反向的地址查询服务,即正向解析与反向解析。

  • 正向解析:根据域名查 IP 地址,即将指定的域名解析为相对应的 IP 地址。域名的 正向解析是 DNS 服务器最基本的功能,也是最常用的功能。
  • 反向解析:根据 IP 地址查域名,即将指定的 IP 地址解析为相对应的域名。域名的 反向解析不是很常用,只在一些特殊场合才会用到,比如可用于反垃圾邮件的验证。

根据所管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型。在同一台 DNS 服务器中,相对于不同的区域来说,也拥有不同的身份。常见的几种类型如下。

  • 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解析来源。
  • 主域名服务器:维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
  • 从域名服务器:与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS服务器的热备份。对客户机来说,无论使用主域名服务器还是从域名服务器,查询的结果都是一样的。关键区别在于,从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。

二、BIND 的安装和控制

1.安装BIND 软件

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# setenforce 0

[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux

[root@localhost ~]# yum -y install bind bind-utils bind-libs bind-chroot

备注:

  • bind:提供了域名服务的主要程序及相关文件。
  • bind-utils:提供了对DNS 服务器的测试工具程序,如nslookup 等。
  • bind-libs:提供了bind、bind-utils 需要使用的库函数。
  • bind-chroot:为BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND 服务的根目录),以提高安全性。


2.BIND 服务控制

[root@localhost ~]# systemctl status named


三、BIND 服务的配置文件

1.主配置文件

(1)全局配置部分

[root@localhost ~]# vim /etc/named.conf

options {

        listen-on port 53 { 127.0.0.1; };

##DNS服务IPv4的监听端口和地址

        listen-on-v6 port 53 { ::1; };

##DNS服务IPv6的监听端口和地址

        directory       "/var/named";

##区域文件的存储目录

        dump-file       "/var/named/data/cache_dump.db";

##指定缓存数据库文件

        statistics-file "/var/named/data/named_stats.txt";

##状态统计文件

        memstatistics-file "/var/named/data/named_mem_stats.txt";

##服务器输出的内存使用统计文件的路径名,注意:还没有在

        recursing-file  "/var/named/data/named.recursing";

##服务器dump安全根到文件的路径

        secroots-file   "/var/named/data/named.secroots";

##服务器dump正在执行的递归查询的文件路径

        allow-query     { localhost; };

##指定允许进行查询的主机

        recursion yes;

##设置是否用递归式DNS服务器

        dnssec-enable yes;

##此选项已过时,不起作用。

        dnssec-validation yes;

##该选项设置named的

        /* Path to ISC DLV key */

        bindkeys-file "/etc/named.root.key";

##覆盖named内置信任密钥路径的文件路径

        managed-keys-directory "/var/named/dynamic";

##跟踪被管理的DESSEC密钥的文件的路径

        pid-file "/run/named/named.pid";

##PID文件位置

        session-keyfile "/run/named/session.key";

##named生成的TSIG session key写入文件的路径,供 nsupdate -l使用。

};


(2)区域配置部分

zone "." IN {

        type hint;

##区域类型,hint为根提示

        file "named.ca";

##区域数据文件

};


2.区域数据配置文件

(1)TTL 配置及 SOA 记录部分

$TTL     86400                                            //有效解析记录的生存周期

@ IN SOA bdqn.com. admin.bdqn.com.(     //SOA 标记、域名、管理邮箱

2011030501

//更新序列号,可以是10 位以内的整数

3H

//刷新时间,重新下载地址数据的间隔

15M

//重试延时,下载失败后的重试间隔

1W

//失效时间,超过该时间仍无法下载则放弃

1D

//无效解析记录的生存周期

)

备注:上述配置内容中,时间单位默认为秒(s),也可以使用 M(分)、H(时)、W(周)、D (天)等单位。文件中的“@”符号表示当前的 DNS 区域名,相当于“bdqn.com.”或 “admin.bdqn.com.”,表示域管理员的电子邮箱地址(由于“@”符号已有其他含义,因此将电 子邮件地址中的“@”用“.”代替)。


(2)地址解析记录部分

@ IN NS ns1.bdqn.com.

IN MX 10 mail.bdqn.com.

ns1 IN A 58.119.74.203

www IN A 173.16.16.1

mail IN A 173.16.16.4

ftp IN CNAME www

上述配置内容中,用到以下四种常见的地址解析记录。

  • NS(Name Server,域名服务器):记录当前区域的 DNS 服务器的主机地址。
  • MX(Mail Exchange,邮件交换):记录当前区域的邮件服务器的主机地址,数字 10 表示(当有多个 MX 记录时)选择邮件服务器的优先级,数字越大,优先级越 低。
  • A(Address,地址):记录正向解析条目。例如,“www IN A 173.16.16.1”表示域 名 www.bdqn.com 对应的 IP 地址是 173.16.16.1。
  • CNAME(Canonical Name,别名):记录某一个正向解析条目的其他名称。例如, “ftp IN CNAME www”表示域名 ftp.bdqn.com 是 www.bdqn.com 的别名。

其中,NS、MX 记录行首的“@”符号可以省略(默认继承 SOA 记录行首的@信息),但是必须保留一个空格或 Tab 制表符。


在反向区域数据文件中,不会用到 A 记录,而是使用 PTR 指针(Point)记录。

1 IN PTR www.bdqn.com.

4 IN PTR mail.bdqn.com.


修改完区域数据文件以后,可以执行“named-checkzone”命令对该文件进行语法检查。 依次指定区域名称、数据文件名作为参数。如果文件中没有语法错误,系统将给出“OK”的 提示信息。

[root@localhost ~]# cd /var/named/

[root@localhost named]# named-checkzone bdqn.com bdqn.com.zone

zone bdqn.com/IN: loaded serial 2011030501

OK


四、使用BIND 构建域名服务器

1.构建缓存域名服务器

(1)建立主配置文件named.conf

[root@localhost ~]# vim /etc/named.conf

修改红色部分的,区域部分默认即可

options {

listen-on port 53 { 192.168.10.101; };

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


}


zone "." IN {

        type hint;

        file "named.ca";

};


(2)确认根域的区域数据文件named.ca

[root@localhost ~]# cat /var/named/named.ca

a.root-servers.net. 518400 IN A 198.41.0.4

##VeriSign, Inc.VeriSign公司(美国,弗吉尼亚州)

b.root-servers.net. 518400 IN A 199.9.14.201

##美国加州,玛丽那德尔湾

c.root-servers.net. 518400 IN A 192.33.4.12

##Cogent Communications(美国,弗吉尼亚州)

d.root-servers.net. 518400 IN A 199.7.91.13

##美国 马里兰州立大学公园

e.root-servers.net. 518400 IN A 192.203.230.10

##NASA Ames Research Center美国航空航天管理局(美国加利福尼亚州)

f.root-servers.net. 518400 IN A 192.5.5.241

##Internet Systems Consortium, Inc.因特网软件联盟(美国加利福尼亚州)

g.root-servers.net. 518400 IN A 192.112.36.4

##U.S. DOD Network Information Center美国国防部网络信息中心(美国弗吉尼亚州)

h.root-servers.net. 518400 IN A 198.97.190.53

##美国 马里兰州 阿帕丁

i.root-servers.net. 518400 IN A 192.36.148.17

##Autonomica公司(瑞典,斯德哥尔摩)

j.root-servers.net. 518400 IN A 192.58.128.30

##VeriSign公司(美国,弗吉尼亚州)

k.root-servers.net. 518400 IN A 193.0.14.129

##RIPE NCC(英国,伦敦)

l.root-servers.net. 518400 IN A 199.7.83.42

##ICANN(美国政府授权的互联网域名与号码分配机构)

m.root-servers.net. 518400 IN A 202.12.27.33

##WIDE Project(日本,东京)

由于我们国家互联网起步比较晚,因此13个DNS根服务器没有一个在中国,我们国家虽然错过了ipv4的13个根服务器,但ipv6根DNS服务器中,中国拥有4台服务器,其中,一台为主根,其他三台为辅根。


(3)启动named 服务

[root@localhost ~]# systemctl start named

[root@localhost ~]# netstat -anptu | grep named

备注:

IPv4的DNS使用TCP53端口和UDP53端口

IPv4的DNS使用TCP953端口和UDP953端口

TCP是用来做区域传送

TDP是用来做DNS解析的


(4)验证缓存域名服务器

在局域网内的客户机中,将首选DNS 服务器的地址设为192.168.10.101,生效后,执行“nslookup qq.com”命令对其进行解析,验证其是否能够获得该域名对应的IP 地址信息。

[root@client~]# yum -y install bind-utils

[root@client ~]# nslookup qq.com


2.构建主域名服务器

(1)确认本机的网络地址、主机映射、默认DNS 服务器地址

将主从服务器的IP地址和主机名直接写入到hosts文件,这样可以加快两个服务器之间的域名解析速度

DNS1的配置

[root@localhost ~]# hostnamectl set-hostname ns1.bdqn.com

[root@localhost ~]# bash

[root@ns1 ~]# vim /etc/hosts

192.168.10.101 ns1.bdqn.com  ns1

192.168.10.102 ns2.bdqn.com  ns2


(2)建立主配置文件named.conf

[root@ns1 ~]# vim /etc/named.conf

zone "bdqn.com" IN {

        type master;

        file "bdqn.com.zone";

  allow-transfer { 192.168.10.102; };

};

zone "10.168.192.in-addr.arpa" IN {

        type master;

        file "192.168.10.arpa";

        allow-transfer { 192.168.10.102; };     

};

备注:将文件中原来的zone选项删掉。


(3)建立正向区域数据文件

[root@ns1 ~]# cd /var/named

[root@ns1 named]# vim bdqn.com.zone

$TTL 86400

@ SOA bdqn.com. admin.bdqn.com. (

2011030301

4H

30M

12H

1D

)

@     IN  NS      ns1.bdqn.com.

IN         NS      ns2.bdqn.com.

IN         MX  10  mail.bdqn.com.

ns1    IN  A       192.168.10.101

ns2    IN  A       192.168.10.102

ftp     IN  A       192.168.10.104

mail    IN  A       192.168.10.105

www   IN  A       192.168.10.106

*       IN  A       192.168.10.106


(4)建立反向区域数据文件

[root@ns1 named]# vim 192.168.10.arpa

$TTL 86400

@ SOA bdqn.com. admin.bdqn.com. (

2011030301

4H

30M

12H

1D

)

        IN   NS   ns1.bdqn.com.

  IN   NS   ns2.bdqn.com.

106     IN   PTR  www.bdqn.com.

105     IN   PTR  mail.bdqn.com.

104     IN   PTR  ftp.bdqn.com

101     IN   PTR  ns1.bdqn.com.

102     IN   PTR  ns2.bdqn.com.


(5)为区域文件设置属主与属组

[root@ns1 named]# chown :named bdqn.com.zone

[root@ns1 named]# chown :named 192.168.10.arpa


(6)检测配置文件和区域文件

[root@ns1 named]# named-checkconf /etc/named.conf

[root@ns1 named]# named-checkzone bdqn.com /var/named/bdqn.com.zone

zone bdqn.com/IN: loaded serial 2011030301

OK

[root@ns1 named]# named-checkzone 10.168.192.in-addr.arpa /var/named/192.168.10.arpa

zone 10.168.192.in-addr.arpa/IN: loaded serial 2011030301

OK

注意:在检测区域文件的时候,要分别使用正向区域名对正向区域文件检测,使用反向区域名对反向区域文件进行检测。不能都用正向区域名。


(7)重启动或重载服务

[root@ns1 named]# systemctl restart named


(8)客户端验证主域名服务器

[root@client ~]# nslookup www.bdqn.com

Server: 192.168.10.101

Address: 192.168.10.101#53

Name: www.bdqn.com

Address: 192.168.10.106

泛域名解析的测试:

[root@client ~]# nslookup 123.bdqn.com

Server: 192.168.10.101

Address: 192.168.10.101#53

Name: 123.bdqn.com

Address: 192.168.10.106


3.构建从域名服务器

(1)确认本机的网络地址、主机映射、默认DNS 服务器地址

DNS2的配置

[root@localhost ~]# hostnamectl set-hostname ns2.bdqn.com

[root@localhost ~]# bash

[root@ns2 ~]# vim /etc/hosts

192.168.10.101 ns1.bdqn.com  ns1

192.168.10.102 ns2.bdqn.com  ns2


(2)安装bind服务

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# setenforce 0

[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux

[root@localhost ~]# yum -y install bind bind-utils bind-libs bind-chroot


(3)修改主配置文件

[root@ns2 ~]# vim /etc/named.conf

options {

        listen-on port 53 { 192.168.10.102; };

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


zone "bdqn.com" IN {

type slave;

masters { 192.168.10.101; };

file "slaves/bdqn.com.zone";

};

zone "10.168.192.in-addr.arpa" IN {

type slave;

masters {192.168.10.101; };

file "slaves/192.168.10.arpa";

};


(4)启动named 服务,查看区域数据文件是否下载成功

[root@ns2 ~]# systemctl start named

[root@ns2 ~]# ll /var/named/slaves/

总用量

-rw-r--r--. 1 named named 544 7月   3 10:00 192.168.10.arpa

-rw-r--r--. 1 named named 488 7月   3 09:58 bdqn.com.zone


(5)验证从域名服务器

将客户端的DNS服务器修改为192.168.10.102

[root@localhost ~]# nslookup www.bdqn.com

Server: 192.168.10.102

Address: 192.168.10.102#53

Name: www.bdqn.com

Address: 192.168.10.106