linux-centos-DNS 域名解析服务(理论加操作)

前言

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。

一:DNS服务基础

DNS服务软件BIND(Berkeley Internet Name Domain,伯克利因特网域名)
服务:可通俗理解为主配置文件+运行脚本

1.1:DNS系统的作用及类型

1.1.1:DNS系统的作用

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

正向解析:根据主机名称(域名,如www.baidu.com)查找对应的IP地址
反向解析:(一般维护的时候使用)根据IP地址查找对应的主机域名
DNS系统的分布式数据结构
在这里插入图片描述
分析www.sina.com.cn
部分 解释
www 主机位
sina 二级域名
com.cn 顶级域名
. 根域名

1.1.2:DNS系统的类型

实际上,每一台DNS服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和IP地址的对应关系,这些特定的DNS域或IP地址段称为“zone”(区域)
根据地址解析的方向不同,DNS区域相应地分为正向区域(包含域名到IP地址的解析记录,)和反向区域(包含IP地址到域名的解析记录)
根据所管理的区域数据的来源不同,DNS系统可以分为不同的类型。
在同一台DNS服务器中,相对于不同的区域来说,也拥有不同的身份。

1.2常见的DNS服务器几种类型

1.2.1缓存域名服务器

只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。
构建缓存域名服务器时,必须设置根域或者指定其他DNS服务器作为解析来源

主域名服务器
维护某一个特定DNS区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器,官方服务器。
构建主域名服务器时,需要自行建立所负责区域的地址数据文件

从域名服务器
与主域名服务器提供完全相同的DNS解析服务,通常用于DNS服务器的热备份。
构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库

二 . BIND 的安装和控制

2.1 BIND 的安装

BIND 不是唯一能够提供域名服务的 DNS 服务程序,但它却是应用最为广泛的,BIND 可以运行在大多数 Linux/UNIX 主机中。其官方站点位于 https://www.isc.org/。
1.安装 BIND 软件

在 CentOS 系统中, 系统光盘自带了 BIND 服务的安装文件, 主要包括以下几个软件包。
bind-9.9.4-37.el7.x86_64.rpm。
bind-utils-9.9.4-37.el7.x86_64.rpm。
bind-libs-9.9.4-37.el7.x86_64.rpm。
bind-chroot-9.9.4-37.el7.x86_64.rpm。各软件包的主要作用如下。
bind:提供了域名服务的主要程序及相关文件。
bind-utils:提供了对 DNS 服务器的测试工具程序,如 nslookup 等。
bind-libs:提供了 bind、bind-utils 需要使用的库函数。
bind-chroot:为 BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为 BIND 服务的根目录),以提高安全性。
默认已安装 bind-utils 和 bind-libs,因此只需要安装 bind 和 bind-chroot 即可。

[root@localhost Server]# rpm -qa | grep "^bind"	//查询是否已安装与BIND 相关的软件包
bind-utils-9.9.4-37.el7.x86_64 bind-license-9.9.4-37.el7.noarch bind-libs-lite-9.9.4-37.el7.x86_64 bind-9.9.4-37.el7.x86_64
bind-libs-9.9.4-37.el7.x86_64 bind-chroot-9.9.4-37.el7.x86_64

2.2.BIND 服务控制

BIND 软件包安装完毕以后,会自动增加一个名为 named 的系统服务,通过 systemctl 工具可以控制 DNS 域名服务的运行。例如,执行以下操作可以查询 named 服务的运行状态。

[root@localhost ~]# systemctl status named
●named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: inactive (dead)

2.3BIND 服务的配置文件

使用 BIND 软件构建域名服务时,主要涉及两种类型的配置文件:主配置文件和区域数据文件。其中,主配置文件用于设置 named 服务的全局选项、注册区域及访问控制等各种运行参数;区域数据文件用于存放某个 DNS 区域的地址解析记录(正向记录或反向记录)。
1.主配置文件
主配置文件 named.conf 通常位于/etc/目录下,在 named.conf 文件中,主要包括全局配置、区域配置两个部分,每一条配置记录的行尾以分号“;”表示结束,以“#”号或“//”开始的部分表示注释文字(大段注释可以使用“/* …… */”的格式)。
1)全局配置部分
全局配置参数包括在形如“options { };”的大括号中,如可以设置监听的地址和端口、区域数据文件存放的目录、允许哪些客户机查询等。

options {
listen-on port 53 { 173.16.16.1; };	//监听地址和端口
directory	"/var/named";	//区域数据文件的默认存放位置allow-query   { 192.168.1.0/24; 173.16.16.0/24;};	//允许使用本DNS 服务的网段
};

上述配置内容中,除了 directory 配置项通常会保留以外,其他的配置项都可以省略。

若不指定 listen-on 配置项,则 named 默认在所有接口的 UDP 53 端口监听服务;若不指定
allow-query 配置项,则默认会响应所有客户机的查询请求。
2)区域配置部分
区域配置参数使用“zone …… { };”的配置格式,一台 DNS 服务器可以为多个区域提供解析,因此在 named.conf 文件中也可以有多个 zone 配置段。区域类型按照解析方向可分为正向区域、反向区域。

zone "dfzr.com" IN {	//正向"dfzr.com"区域type master;		//类型为主区域
file "dfzr.com.zone";	//区域数据文件为dfzr.com.zone allow-transfer    { 173.16.16.2; };	//允许下载的从服务器地址
};
zone "16.16.173.in-addr.arpa" IN {	//反向"173.16.16.0/24"区域type master;
file "173.16.16.arpa";	//区域数据文件为 173.16.16.arpa
};

在上述配置内容中,有几个地方需要注意:
每个 zone 区域都是可选的(包括根域、回环域、反向域),具体根据实际需要而定,zone 配置部分的“IN”关键字也可以省略。
反向区域的名称由倒序的网络地址和“.in-addr.arpa” 组合而成。例如, 对于
192.168.1.0/24 网段,其反向区域名称表示为“1.168.192.in-addr.arpa”。
file 配置项用于指定实际的区域数据文件,文件名称由管理员自行设置。
区域配置中的部分参数(如 allow-transfer)也可以放在全局配置中。
修改完主配置文件以后,可以执行“named-checkconf”命令对 named.conf 文件进行语法检查。如果文件中没有语法错误,该命令将不给出任何提示;反之,则会给出相应的提 示信息,然后根据出错提示修正文件中的错误即可。带“-z”选项的“named-checkconf”命令还可以尝试加载主配置文件中对应的区域数据库文件,并检查该文件是否存在问题。例 如,当出现“…file not found”的错误时,表示找不到对应的文件。

[root@localhost ~]# named-checkconf -z /etc/named.conf
zone dfzr.com/IN: loading from master file dfzr.com.zone failed: file not found zone dfzr.com/IN: not loaded due to errors.

_default/dfzr.com/IN: file not found
……	//省略部分内容

关于 named.conf 文件中各种配置项的详细说明,可以执行“man named.conf”命令查看手册页,也可参考配置样本文件/usr/share/doc/bind-9.9.4/sample/etc/named.conf。
2.区域数据配置文件
区域数据配置文件通常位于/var/named/目录下,每个区域数据文件对应一个 DNS 解析区域,文件名及内容由该域的管理员自行设置。
根域“.”的区域数据文件比较特殊。Internet 中所有的 DNS 服务器都使用同一份根区域数据文件,其中列出了所有根服务器的域名和 IP 地址。根区域数据文件可以从国际互联网络信息中心(InterNIC)的官方网站地址 http://www.internic.net/下载。
在区域数据文件中,主要包括 TTL(Time To Live,生存时间)配置项、SOA(Start Of Authority,授权信息开始)记录、地址解析记录。文件中的注释信息以“;”(分号)开始。
1)TTL 配置及 SOA 记录部分
第一行的 TTL 配置用于设置默认生存周期,即缓存解析结果的有效时间。SOA 记录部分用于设置区域名称、管理邮箱,以及为从域名服务指定更新参数。

$TTL	86400	//有效解析记录的生存周期
@    IN    SOA  dfzr.com. admin.dfzr.com.(	//SOA 标记、域名、管理邮箱
2011030501	//更新序列号,可以是10 位以内的整数
3H	//刷新时间,重新下载地址数据的间隔
15M	//重试延时,下载失败后的重试间隔
1W	//失效时间,超过该时间仍无法下载则放弃
1D	//无效解析记录的生存周期
)

上述配置内容中,时间单位默认为秒(s),也可以使用 M(分)、H(时)、W(周)、D
( 天) 等单位。文件中的“@” 符号表示当前的 DNS 区域名, 相当于“dfzr.com.” 或“admin.dfzr.com.”,表示域管理员的电子邮箱地址(由于“@”符号已有其他含义,因此将电 子邮件地址中的“@”用“.”代替)。SOA 记录中的更新序列号用来同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。

2)地址解析记录部分
地址解析记录用来设置 DNS 区域内的域名、IP 地址映射关系,包括正向解析记录和反向解析记录。反向解析记录只能用在反向区域数据文件中。

@	IN	NS	ns1.dfzr.com.
IN	MX	10	mail.dfzr.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.dfzr.com 对应的 IP 地址是 173.16.16.1。
CNAME(Canonical Name,别名):记录某一个正向解析条目的其他名称。例如, “ftp IN CNAME www”表示域名 ftp.dfzr.com 是 www.dfzr.com 的别名。
其中,NS、MX 记录行首的“@”符号可以省略(默认继承 SOA 记录行首的@信息),但是必须保留一个空格或 Tab 制表符。
在反向区域数据文件中,不会用到 A 记录,而是使用 PTR 指针(Point)记录。例如, 对于反向区域 16.16.173.in-addr.arpa,添加的反向解析记录可以是以下形式。

1	IN	PTR	www.dfzr.com.
4	IN	PTR	mail.dfzr.com.

使用 PTR 记录时,第一列只需要指明对应 IP 地址的“主机地址”部分即可,如“1”或“4” 等,系统在查找地址记录时会自动将当前反向域的网络地址作为前缀。例如,上述文件中的 “4 IN PTR mail.dfzr.com.”表示 IP 地址为 173.16.16.4 的主机的域名是 mail.dfzr.com.。
在区域数据配置文件中,凡是不以点号“.”结尾的主机地址,系统在查找地址记录时都会

自动将当前的域名作为后缀。例如,若当前的 DNS 域为“dfzr.com”,则在文件中的主机地址“www”相当于“www.dfzr.com.”。因此,当使用完整的 FQDN(Fully Qualified Domain Name,完全合格域名/全称域名)地址时,务必记得地址末尾的点号“.”不能省略。
修改完区域数据文件以后,可以执行“named-checkzone”命令对该文件进行语法检查。依次指定区域名称、数据文件名作为参数。如果文件中没有语法错误,系统将给出“OK”的提示信息。例如,若要检查 DNS 区域 dfzr.com 的区域数据文件 dfzr.com.zone,可以执行以下操作。

[root@localhost ~]# cd /var/named/
[root@localhost named]# named-checkzone dfzr.com dfzr.com.zone
zone dfzr.com/IN: loaded serial 2011030501 OK

当一台服务器需要同时承载某个 DNS 区域内的许多个不同的域名(如 IDC 的虚拟主机服务器、提供个人主页空间的网站服务器等)时,可以在区域数据文件的最后一行添加泛域 名解析记录,即使用“*”以匹配任意主机名。

*	IN	A	173.16.16.173

2.4使用 BIND 构建域名服务器

在前面的章节中学习了 DNS 服务器的相关基础知识、BIND 软件包的安装,以及 DNS 服务器的配置文件组成、配置格式等。下面分别讲解构建缓存域名服务器、主域名服务器、 从域名服务器的基本过程。

2.4.1构建缓存域名服务器

缓存域名服务器通常架设在公司的局域网内,主要目的是提高域名解析的速度,减少对 互联网访问的出口流量。例如,在一个小型企业的内部网络(图 3.1)中,可单独建立一台
(或集成在网关主机中)缓存域名服务器,为各部门的员工计算机提供 DNS 解析服务。

在这里插入图片描述
缓存域名服务器的应用环境
参考上述网络结构,本小节案例使用的基本环境和要求如下所述。
缓存域名服务器的 IP 地址为 192.168.1.5,并能够正常访问互联网。
缓存域名服务器代为处理客户端的 DNS 解析请求,并缓存查询结果。
局域网内的各 PC 将首选 DNS 服务器地址设为 192.168.1.5。下面讲解使用 BIND 构建此缓存域名服务器的基本步骤。
1.建立主配置文件 named.conf
若使用范本文件创建 named.conf,应注意修改或删除默认的监听设置、查询控制,以便能够为局域网段的客户机提供服务。另外,logging、view 配置部分一般用不到,可以先注释以避免其干扰。

[root@localhost ~]# vi /etc/named.conf
options {
listen-on port 53 { 192.168.1.5; }; 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";
query-source port 53;
allow-query { 192.168.1.0/24; }; recursion yes;
};

zone "." IN {	//正向"."根区域
type hint;	//类型为根区域
file "named.ca";	//区域数据文件为named.ca
};

上述配置内容中,dump-file、statistics-file 等配置项用于指定缓存数据库文件、状态统计文件的位置。添加了“zone ‘.’ IN { };”部分的根区域设置,尽管缓存服务器并没有自主控制的区域数据,但可以向根服务器进行迭代查询,并将最终获得的解析结果反馈给客户。
有时候为了提高解析效率,也可以不向根区域查询,而是将来自客户端的查询请求转发给国内电信运营商的 DNS 服务器(如北京的 202.106.0.20、202.106.148.1),缓存服务器收到返回的查询结果后再传递给客户端。只要去掉“zone ‘.’ IN {……};”的设置,并在全局配置中正确设置 forwarders 参数即可实现该功能,具体操作如下:

[root@localhost ~]# vi /etc/named.conf
options {
…… //省略部分内容
forwarders { 202.106.0.20; 202.106.148.1; };
};

2.确认根域的区域数据文件 named.ca
根区域的区域数据文件默认位于文件/var/named/named.ca 中,该文件记录了 Internet
中 13 台根域服务器的域名和 IP 地址等相关信息。

3.启动 named 服务
执行“systemctl start named”命令,启动 named 服务,并通过 netstat 命令确认 named 服务的端口监听状态。若服务启动失败或发现没有正常监听 UDP 53 端口,可以根据错误提示信息(或者/var/log/messages 文件中的日志记录)排除错误,然后重启服务即可。

[root@localhost ~]# systemctl start named
[root@localhost ~]# netstat -anpu | grep named

udp	0	0 192.168.1.5:53	0.0.0.0:*	11687/named
udp	0	0 0.0.0.0:53	0.0.0.0:*	11687/named

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

三.正向解析实验

[root@shanan ~]# vi /etc/named.conf
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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };

[root@shanan ~]# vi /etc/named.rfc1912.zones 


19 zone "hello.com" IN {
     20         type master;
     21         file "hello.com.zone";
     22         allow-update { none; };
     23 };

[root@shanan named]# vi hello.com.zone 

在这里插入图片描述

[root@shanan named]# echo "nameserver 192.168.100.48" > /etc/resolv.conf
[root@shanan named]# netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.100.48:53       0.0.0.0:*               LISTEN      9844/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      9844/named          
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      8516/sshd           
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      9844/named          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      8807/master         
tcp        0     52 192.168.100.48:22       192.168.100.1:58252     ESTABLISHED 9720/sshd: root@pts 
tcp6       0      0 ::1:53                  :::*                    LISTEN      9844/named          
tcp6       0      0 :::22                   :::*                    LISTEN      8516/sshd           
tcp6       0      0 ::1:953                 :::*                    LISTEN      9844/named          
tcp6       0      0 ::1:25                  :::*                    LISTEN      8807/master 

开始解析测试

[root@shanan named]# host www.hello.com
www.hello.com has address 192.168.66.66
[root@shanan named]# host mail.hello.com
mail.hello.com has address 192.168.88.88
[root@shanan named]# host smtp.hello.com
smtp.hello.com is an alias for mail.hello.com.
mail.hello.com has address 192.168.88.88
[root@shanan named]# host abc.hello.com
abc.hello.com has address 6.6.6.6

四. 反向解析测试实验

[root@shanan named]# vi /etc/named.rfc1912.zones 

在这里插入图片描述

[root@shanan named]# vi hello.com.zone 

在这里插入图片描述
反向解析测试

[root@shanan named]# systemctl  restart  named
[root@shanan named]# host 192.168.66.66
66.66.168.192.in-addr.arpa domain name pointer www.hello.com.

五 .主从复制实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@ shanan slaves]# vi hello.com.zone 
[root@ shanan slaves]# pwd
/var/named/slaves
[root@ shanan slaves]# rm -rf *   清空从服务器数据配置
[root@ shanan slaves]# 
[root@ shanan slaves]# systemctl restart named   重新启动bind

[root@ shanan slaves]# host www.hello.com    重新解析
www.hello.com has address 192.168.66.66     解析成功

在这里插入图片描述

root@shanan named]# systemctl restart named   重启bind服务
[root@shanan named]# host ftp.hello.com     解析
ftp.hello.com has address 192.168.77.77      解析成功

下面在从服务器测试

[root@ shanan slaves]# rm -rf * 
[root@ shanan slaves]# systemctl restart named
[root@ shanan slaves]# ls
hello.com.zone
[root@ shanan slaves]# host ftp.hello.com
ftp.hello.com has address 192.168.77.77     解析成功

cat /dev/null > /var/named/slaves/hello.com.zone  清空文件内容
systemctl reload named   重新加载 bind 服务 

在这里插入图片描述

[root@shanan named]# systemctl restart named
[root@shanan named]# host aaa.hello.com
aaa.hello.com has address 6.6.6.6

六 .分离解析实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Vi/etc/sysctl.conf 修改主服务器,开启路由功能在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@shanan named]# cd /var/named
[root@shanan named]# ls
chroot      data     dyndb-ldap      named.ca     named.localhost  slaves
chroot_sdb  dynamic  hello.com.zone  named.empty  named.loopback
[root@shanan named]# cp -p named.localhost hello.com.wan  创建配置数据文件
[root@shanan named]# cp -p named.localhost hello.com.lan    创建配置数据文件

[root@shanan named]# ls
chroot      data     dyndb-ldap     hello.com.wan   named.ca     named.localhost  slaves
chroot_sdb  dynamic  hello.com.lan  hello.com.zone  named.empty  named.loopback
[root@shanan named]# vi hello.com.wan 
[root@shanan named]# vi hello.com.lan 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/BIGmustang/article/details/107233088
今日推荐