一、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