共计 4644 个字符,预计需要花费 12 分钟才能阅读完成。
整个 Internet 大家庭中连接了数以亿计的服务器,个人主机,其中大部分的网站、邮件服务器都使用了域名形式的地址。很显然这种地址形式要比使用 IP 地址更加直观,且更容易被用户记住。
在 Windows 搭建 DNS 服务,可以参考博客:Windows Server 2016 搭建 DNS 服务
如果想要搭建并管理好 DNS 服务器,那么必须了解的知识点有:
DNS 系统在网络中的作用就是维护一个地址数据库,其中记录了各种主机域名和 IP 地址的对应关系,以方便客户程序提供正向和反向的地址查询服务,即:
正向解析: 根据域名查找 IP 地址,即将指定的域名解析为相对应的 IP 地址;
反向解析: 根据 IP 地址查域名,即将指定的 IP 地址解析为相对应的域名。
DNS 的组成:
常见的顶级域名、国家域名:
DNS 服务的工作原理:
根据所管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型,在同一台 DNS 服务器中,相对于不同的区域来说,也拥有不同的身份,常见的几种类型如下:
缓存域名服务器: 只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器是,必须设置根域或指定其他 DNS 服务器作为解析来源;
主域名服务器: 维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。构建主域名服务器时,需要自行建立所负责区域的地址数据文件;
从域名服务器: 与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS 服务器的热备份。对于客户机来说,无论使用主域名服务器还是从域名服务器,查询的结果都是一样的。区别在于:从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
DNS 服务器的角色只是针对某一个特定的区域而言,比如:一个区域的主域名服务器可以同时是另一个区域的从域名服务器。
接下来详细介绍如何在 CentOS 7 中搭建 DNS 服务:
搭建主域名服务器:
[root@localhost ~]# yum -y install bind*
#通过 yum 的方式安装 bind 服务
编写主配置文件
[root@localhost ~]# vim /etc/named.conf
#编写 bind 服务的主配置文件
………… #省略部分内容
12 options {13 listen-on port 53 { any;};
# 指定域名服务监听的网络端口,默认是本机,不能对外提供服务,#建议改为 any,表示任意主机,也可以删除;14 listen-on-v6 port 53 {::1;};
15 directory "/var/named";
# 指定从 /var/named 目录下读取 DNS 数据文件;16 dump-file "/var/named/data/cache_dump.db";
# 当执行导出命令时将 DNS 服务器的缓存数据存储到指定的文件中;17 statistics-file "/var/named/data/named_stats.txt";
# 指定 named 服务的统计文件,#当执行统计命令时会将内存中的统计信息追加到该文件中;18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 allow-query {any;};
# 允许哪些客户端访问 DNS 服务,默认是本机,#建议改为“any”,表示任意主机,也可以删除;………… #省略部分内容
56 zone "benet.com" in {
57 type master;
#类型为主区域
58 file "benet.com.zone";
59 };
# 添加正向解析数据文件的信息,服务器类型是主服务器,#文件名为“benet.com.zone”60 zone "10.168.192.in-addr.arpa" in {
61 type master;
62 file "192.168.10.arpa";
63 };
#编写反向区域文件
区域类型:master(主区域);slave(辅助区域);hint(根区域)
编写区域配置文件
[root@localhost ~]# cd /var/named
[root@localhost named]# cp named.localhost benet.com.zone
#复制原本正向区域的模板
[root@localhost named]# cp named.loopback 192.168.10.arpa
#复制原本反向区域的模板
[root@localhost named]# vim benet.com.zone
#编写正向区域配置文件
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.benet.com.
ns1 IN A 192.168.10.1
www IN A 192.168.10.10
ftp IN CNAME www
serial:序列号。可以供从服务器判断何时获取新数据的。refresh:指定多长时间从服务器要与主服务器进行核对,retry:如果从服务器试图检查主服务器的序列号时,主服务器没有响应,则经过这个时间后将重新进行检查
expire:将决定从服务器在没有主服务器的情况下权威地持续提供域数据服务的时间长短
minimum:高速缓存否定回答的存活时间
配置选项详解:
[root@localhost named]# vim 192.168.10.arpa
#编写反向区域配置文件
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.benet.com.
1 IN PTR ns1.benet.com.
10 IN PTR www.benet.com.
编写完成后
[root@localhost named]# named-checkconf -z /etc/named.conf
#检查对应的数据库文件
zone benet.com/IN: loaded serial 0
zone 10.168.192.in-addr.arpa/IN: loaded serial 0
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
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: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
[root@localhost named]# named-checkconf /etc/named.conf
#检查主区域配置文件
[root@localhost named]# named-checkzone benet.com benet.com.zone
#检查区域配置文件
zone benet.com/IN: loaded serial 0
OK
[root@localhost named]# systemctl start named
#启动 DNS 服务
[root@localhost named]# nslookup
> www.benet.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.benet.com
Address: 192.168.10.10
> ns1.benet.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: ns1.benet.com
Address: 192.168.10.1
主域名服务器经过测试没问题!
搭建从域名服务器
[root@localhost ~]# yum -y install bind*
#安装 bind 服务
[root@localhost ~]# vim /etc/named.conf
#编写主配置文件
……………… #省略部分内容
12 options {13 listen-on port 53 { any;};
14 listen-on-v6 port 53 {::1;};
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 allow-query {any;};
20 forwarders {192.168.10.1;};
#转发器,本机解析不了转发到 192.168.10.1
……………… #省略部分内容
57 zone "benet.com" in {
58 type slave;
#区域类型为辅助区域
59 masters {192.168.10.1;};
#主服务器为 192.168.10.1
60 file "slaves/benet.com.zone";
#复制下来的文件保存到 /var/named/slaves/ 目录下
61 allow-transfer {192.168.10.1;};
#允许从服务器上下载正向区域配置文件
62 };
63 zone "10.168.192.in-addr.arpa" {
64 type slave;
65 masters {192.168.10.1;};
66 file "slaves/192.168.10.arpa";
67 };[root@localhost slaves]# named-checkconf -z /etc/named.conf
#检查 named 服务数据库配置文件
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
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: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
[root@localhost /]# systemctl start named
[root@localhost /]# nslookup
> www.benet.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.benet.com
Address: 192.168.10.10
> ns1.benet.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: ns1.benet.com
Address: 192.168.10.1
[root@localhost /]# ls /var/named/slaves/
benet.com.zone
#从主域名服务器复制的正向区域文件
从域名服务器验证完成!
在 Windows 客户机上如果出现错误可使用命令“ipconfig /flushdns”刷新一下本地的 DNS 缓存!
: