Linux centos7 DNS服务器基于bind正反解析服务的搭建

                                             Linux centos7 DNS服务器基于bind正反解析服务的搭建

DNS的相关基础知识:

一.DNS--什么是DNS(Domain Name System,域名系统)

       因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

      DNS 服务器将域名解析出来,找到域名对应的ip地址的服务,可以高速缓存从其他 DNS 服务器收到的 DNS 记录。 也可以在 DNS 客户服务中使用高速缓存,将其作为 DNS 客户端保存在最近的查询过程中得到的信息高速缓存的方法。 可以提高解析速度。

每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。

主机名到IP地址的映射有两种方式:

1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;通常改 /etc/sysconfig/network-scripts/  下的那个网卡文件就是说的这个方法。

2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。

 

域名结构

通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC ,负责亚太地区。

例如 www.baidu.com这个URL,其顶级域名是 .com  ,二级域名是 .baidu ,三级域名是www ,这也可以称为前缀,标明是基于www协议提供web 万维网服务的域名。

例如 www.nice.ac.cn这个URL,其顶级域名是.cn 国家类别顶级域名,表示这个URL是中国的,二级域名是.ac 三级域名是.nice,四级域名也就是前缀是www,同样标明这是一个提供web万维网的域名。

例如  ftp://hust:[email protected]这个的域名前缀标明它是一个基于ftp协议的提供ftp服务的网站,顶级域名是cn标明是中国的网站。二级域名edu标明是一个教育类的网站。

在域名中大小写是没有区分的。域名一般不能超过5级,从左到右域的级别变高,高的级域包含低的级域。域名在整个Internet中是唯一的,当高级子域名相同时,低级子域名不允许重复。一台服务器只能有一个IP地址,但是却可以有多个域名。

二、常用的DNS解析服务服务器所使用的软件

DNS系统是由各式各样的DNS软件所驱动的,包括: 

  • BIND(Berkeley Internet Name Domain),这是应用最广的DNS软件,也是本文将要使用的软件(其实是只会这一个,没办法的事情嘛)。

  • DJBDNS(Dan J Bernstein's DNS implementation)

  • MaraDNS

  • NSD(Name Server Daemon)

  • PowerDNS

三,DNS 的正向解析和反向解析,以及用途。

正向解析&反向解析:
DNS服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,

正向查找区域就是:通常所说的域名解析,

反向查找区域即是:IP反向解析,它得到作用是通过查找IP地址的PTR记录来得到该IP地址指向的域名。要成功得到域名就必须有该IP地址的PTR记录。

通常,我们最常用的就是正向解析,其实,说人话,正向解析就是 给IP地址取了一个有一定现实意义的别名。就像一个人一样,一个人代表一个IP,这个人是独一无二的,但是,这个人可能有很多的名字,比如,小名狗蛋,大名王五,乳名 旺财,但这么些名字都是指向一个独一无二的人的。DNS就是给IP命名的一个服务。

如果,你走在路上,你突然碰到一个很熟悉的人,可你就是想不起来他(她)的名字,但是,脑子就是瓦特了,想不起名字,DNS服务就是帮你查询他(她)的名字,DNS查询后告诉你,这个人大名就王五,小名叫狗蛋,乳名叫旺财,然后你就可以不尴尬了,任选一个名字假装亲切的喊他(她)名字,然后谈人生,谈理想等等,迅速的就拉近两人之间的关系了,这个时候就是DNS的反向解析了,对吧???

四、实验目标的确定

将一个域名与一台具有固定IP的内网机器绑定,使得在内网的其它机器可以通过另一台安装了bind域名解析服务的机器通过域名访问其上的web服务。说人话,通过域名访问某一个web服务。也就是服务发布后不需要记忆IP,只需要记住具有现实意义的域名就可以访问这个服务。

环境介绍:

1,IP地址为192.168.0.19的机器其上有一个web服务,例如,httpd服务。

2,ip地址为192.168.0.20的机器上安装bind,对内网所有机器提供DNS域名解析服务。解析域名为www.mywebserver.cn,域名绑定在192.168.0.19。

3,内网的任意一台机器,例如,192.168.0.21,修改网卡的DNS服务器地址,指向 192.168.0.20,访问 www.mywebserver.cn 即可获得 部署在192.168.0.19的web服务。192.168.0.19,修改网卡的DNS服务器地址,指向 192.168.0.20,访问 www.mywebserver.cn 即可获得 部署在192.168.0.19的web服务。

五,环境的搭建:

所有的相关机器 防火墙和selinux都关闭。(仅仅是为了避免一些不必要的麻烦,快速的直奔主题罢了)

192.168.0.19:安装httpd,写一个测试页面,标明这个httpd服务的提供者是192.168.0.19

192.168.0.20:安装bind,服务加入开机启动。

192.168.0.21:修改DNS指向为192.168.0.20,等待bind,也就是named服务配置完毕后测试就行了。

六,正式的配置域名解析服务,bind也就是named服务。

(1),利用rndc命令管理DNS服务器

DNS服务默认的监听端口是53,当我们在主机上启动DNS服务之后,用netstat查看监听端口,显示如下:

[root@centos10 named]# netstat -antup | grep named
tcp        0      0 192.168.0.20:53         0.0.0.0:*               LISTEN      3506/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3506/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      3506/named          
udp        0      0 192.168.0.20:53         0.0.0.0:*                           3506/named 

上面结果显示,除了能够看到53号端口之外,还能看到953端口,那是namd在953端口多启动了一个服务,这就是rndc了。

这个rndc的全称是Remote Name Domain Controller,它可以帮助用户更方便地管理DNS服务器,包括可以检查DNS服务器的状态与统计信息、重载配置文件及zone或单独重载某个区域而不需要重新启动整个DNS服务,还有查看已存在DNS缓存当中的资料等。

rndc服务默认监听在tcp的953端口,且默认监听于127.0.0.1地址,因此默认仅允许本地使用。

rndc的常见用法:

rndc reload:在不重新启动DNS服务的情况下,重新加载配置文件及zone.等同于centos7的 systemctl restart named 命令

rndc reload zone:重新加载指定的zone.

rndc status:查看当前DNS服务器的状态。

rndc stats:将当前系统的DNS统计数据记录下来,默认会将数据存储为一个文件:/var/named/data/named_stats.txt.

rndc dumpdb:将当前DNS高速缓存中的数据记录下来,与stats类似,默认会将数据存储为一个文件:/var/named/data/cache_dump.db.、

rndc flush:清空当前DNS服务器上的所有缓存。这一命令常用在DNS缓存服务器上。

(2),关于DNS服务器的配置文件

bind主配置文件/etc/named.conf的格式:

全局配置段:
    options { ... };

日志配置段:
    logging { ... };

区域配置段:
    zone { ... };

全局配置段:

wKiom1jc9MuBCsbpAABQjn9AhZM242.png

至于options内的比较重要的子参数简单叙述如下:

listen-on port 53 { any; };

监听在当前主机上的哪个网络接口。默认是监听在localhost,也就是只有本机才能够查询,这显然是不符合现实需要的,因此可以改为any,表示可以监听多个网络接口,any之后要加上分号才算结束。只要监听在能够与外网主机进行通信的网络接口上,就可以为外网主机提供解析服务,当前前提是别人知道自己主机的IP地址。这里也可以监听在指定的网络接口上,可以监听多个接口,每个地址后面都需要加上分号。

directory  "/var/named";

这里的意思是如果在/etc/named.conf(包括被包含进来的配置文件)中定义了正反解区域解析库文件的文件名时,该文件名默认应该存放于哪个目录下,默认是存放在/var/named/目录下。需要注意的是,如果安装了bind-chroot程序包,则这些区域解析库文件最终会被主动链接到/var/named/chroot/var/named/这个目录。

dump-file、statistics-file、memstatistics-file

与named这个服务有关的许多统计信息,如果想要输出为文件的话,默认的文件名就由这三项指定。

allow-query   { any; };

这是针对DNS客户端的设置,表示谁可以向我的DNS服务提出查询请求的意思。默认设置为localhost,表示仅允许本地查询,这里修改为any,表示对所有的用户开放(当然,防火墙必须放行才行)。

allow-transfer  { none; };

当架设主-从DNS服务器时,允许哪台从DNS服务器向我的这台DNS服务器转发区域解析库文件的数据。

recursion yes;

是否允许为DNS客户端做递归查询。默认为yes.

日志配置段:

wKioL1jc9O_SgkeGAAAR861Pw60833.png

zone的定义也可以写在这个文件内,但并不推荐这么做。

(3),192.168.0.19:安装httpd,写一个测试页面,标明这个httpd服务的提供者是192.168.0.19

登陆 IP为192.168.0.19的服务器,执行命令:

yum install httpd -y && systemctl enable httpd && systemctl start httpd

echo "192.168.0.19">/var/www/html/index.html

(4),ip地址为192.168.0.20的机器上安装bind,对内网所有机器提供DNS域名解析服务。解析域名为www.mywebserver.cn,域名绑定在192.168.0.19。

登陆IP为i192.168.0.20的服务器,执行命令:

yum install bind bind-chroot -y && systemctl enable named && systemctl start named

bind相关的程序包如下:

bind:提供dns server程序,以及几个常用的测试工具。
bind-utils:bind客户端程序集,例如提供dig, nslookup, dig等工具。
bind-libs:提供bind和bind-utils包中的程序共同用到的库文件。
bind-chroot:选装,让bind程序(named进程)运行于jail进程之下。
以上软件包在安装光盘内都包含,因此可选择将系统安装包或者光盘挂载本地配置本地源方式安装,或者配置外部源,yum 外部源安装方式。
当然,也可以选择编译安装方式,但不推荐这个方式。

zone的定义-----

zone,区域,域名的配置,这个可以定义在多个文件内,比如,/etc/named.rfc1912.zones  /etc/named.conf 这两个文件内,通常,为了不让主配置文件过于臃肿,一般是定义在  /etc/named.rfc1912.zones   这个文件内。

编辑该文件,在末尾添加如下内容:

zone "mywebserver.com" IN {
        type master;
        file "mywebserver.zheng";
        allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "mywebserver.fan";
};

以上是正向解析区域定义和反向解析区域定义,区域的实现是依靠其内所定义的文件,也就是定义的 mywebserver.zheng 和mywebserver.fan  这两个文件,当然,这两个文件名字可以任意定义,比如,定义为 a 和b也可以,但没有意义的文件名称不方便后期的维护管理工作, allow-update { none;} 表示禁止动态更新客户端地址。type master 表示使用的是主DNS,也就是192.168.0.20 这个DNS服务器,我们没有做主从DNS,当然就是master啦。

根据以上的区域配置,我们需要编辑两个文件,一个文件名称为 mywebserver.zheng,一个文件名称为mywebserver.fan,分别实现正向解析功能和反向解析功能。这两个文件一般放置在  /var/named/  文件夹下,在该文件夹下有两个模板文件,如下图:

拷贝这两个文件为以上定义的两个文件,localhost后缀的文件是正向解析模板,loopback是反向解析模板。拷贝时请务必加参数a 拷贝以保持 文件属组为named。

[root@centos10 named]# pwd
/var/named
[root@centos10 named]# cp -a named.localhost ./mywebserver.zheng
[root@centos10 named]# cp -a named.loopback ./mywebserver.fan

两个文件的内容为:

mywebserver.zheng

[root@centos10 named]# cat mywebserver.zheng
$TTL 1D
@	IN SOA	mywebserver.com.  mywebserver.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	www.mywebserver.com.
www     A       192.168.0.19

需要指出的是 SOA 这一行后面可以简化,但为了方便管理,还是写一些有意义的字符。比如下面这个,NS 这一行定义的 www 至少在下面必须有一个 www A 192.168.0.19 这么一行,

$TTL 1D
@       IN SOA   @ mywebserver.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      www.mywebserver.com.
www     A       192.168.0.19
bbs     A       192.168.0.19
ftp     A       192.168.0.19

 可以简化成这样的形式

$TTL 1D
@       IN SOA  @ mywebserver.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.0.19
www     A       192.168.0.19
bbs     A       192.168.0.19
ftp     A       192.168.0.19

也可以是这样的,至少 SOA 后面有一个@ 和一个点:

$TTL 1D
@       IN SOA  @  .  (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.0.19
www     A       192.168.0.19
[root@centos10 named]# cat mywebserver.loopback 
$TTL 1D
@	IN SOA	mywebserver.com. rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
        NS      www.mywebserver.com.
19	PTR	www.mywebserver.com.

同样的,反向解析也可以简化成以上的形式,在此就不一一演示了。

以正向解析文件为例,NS这一列声明 域名,在其后 A IP地址,声明绑定的是哪个IP。在一列是声明前缀,一个域名一个文件

很多同学在配置DNS服务器的时候可能有一些困惑,我咋知道配置文件写对了没啊?? bind软件替你想到了,有这么几个命令测试bind的配置文件是否正确的(类似httpd的测试命令哦)。

[root@centos10 named]# named
named               named-checkconf     named-checkzone     named-compilezone   named-journalprint  named-rrchecker

常用命令为named-checkconf 和named-checkzone, 其实也因为搭建DNS服务器主要就named 的主配置文件和zone文件和rr文件。

(1). named-checkconf

named-checkconf [options] [文件名  -h ===> 显示使用情况摘要并且退出。 -z ===> 执行named.conf配置文件中找到的所有主要区域的测试负载 -t <目录> ===> 将现有的目录切换至指定目录以便处理配置文件中的已包括伪命令注意:使用该命令是需要指定配置文件的路径,否则默认检测 /etc/named.conf 文件。

(2).named-checkzone

named-checkzone [options] [区域名] [区域文件名]-q ===> 安静模式 -d ===> 启用调试 -c <类别> ===> 指定区域类别,如果没有指定就使用IN-n <模式> ===> 检测NS记录-k <模式> ===> 使用指定的格式(fail | warn(默认) | ignore)执行检测-m <模式> ===> 检测MX-M <模式> ===> 检测MX是否使用CNAME-S <模式> ===> 检测SRV记录是否使用CNAME

例如:

反向解析zone文件配置,这个是失败的哦

[root@centos10 named]# named-checkzone www.myarcgis.com  ./myarcgis.loopback 
zone www.myarcgis.com/IN: NS 'www.myarcgis.com' has no address records (A or AAAA)

正向解析zone文件配置,这个是成功的。 

[root@centos10 named]# named-checkzone 192.168.0.21 ./mywebserver.zheng 
zone 192.168.0.21/IN: loaded serial 0
OK

(5),DNS域名解析服务器在客户端的使用,以及上述解析的验证。

登陆IP地址192.168.0.21的服务器,安装测试工具。

yum install bind-utils -y

反向解析测试:

[root@centos11 ~]# host www.mywebserver.com
www.mywebserver.com has address 192.168.0.19

正向解析测试:

ping命令测试:

[root@centos11 ~]# ping www.mywebserver.com
PING www.mywebserver.com (192.168.0.19) 56(84) bytes of data.
64 bytes from centos11 (192.168.0.19): icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from centos11 (192.168.0.19): icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from centos11 (192.168.0.19): icmp_seq=3 ttl=64 time=0.052 ms

dig命令测试:

[root@centos11 ~]# dig www.mywebserver.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> www.mywebserver.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10717
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.mywebserver.com.		IN	A

;; ANSWER SECTION:
www.mywebserver.com.	86400	IN	A	192.168.0.19

;; AUTHORITY SECTION:
mywebserver.com.	86400	IN	NS	mywebserver.com.

;; ADDITIONAL SECTION:
mywebserver.com.	86400	IN	A	192.168.0.19

;; Query time: 1 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Sat Jan 16 18:34:07 CST 2021
;; MSG SIZE  rcvd: 94

 dig+short

[root@centos11 ~]# dig www.mywebserver.com +short
192.168.0.19

可以看到正向反向DNS解析都工作正常啦。

总结:

一个DNS服务器要正常解析一个域名,需要编辑至少两个文件,一个是zone文件,一个是正式的解析文件。如果需要反向解析,那么需要在编写一个反向解析文件。

 

猜你喜欢

转载自blog.csdn.net/alwaysbefine/article/details/112690033
今日推荐