Linux(RHEL7及CentOS7)下DNS服务器的搭建与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

一、基本概念

DNS即Domain Name System,域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明(摘自百度百科)。 DNS服务器的功能 每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。主机名到IP地址的映射有两种方式: 1.静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用; 2.动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,需要到DNS服务器上查询主机所对应的IP地址。 通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。 DNS常用的资源记录类型 A:地址 此记录列出特定主机名的 IP 地址。这是名称解析的重要记录。 CNAME:标准名称 此记录指定标准主机名的别名。 MX:邮件交换器此记录列出了负责接收发到域中的电子邮件的主机。 NS:名称服务器此记录指定负责给定区域的名称服务器。 搭建DNS服务器需要的三个软件:bind,bind-chroot,bind-utils。

二、环境配置

1、系统、相关软件版本:CentOS Linux release 7.4.1708 (Core)、bind-chroot-9.9.4-51.el7_4.1.x86_64、bind-9.9.4-51.el7_4.1.x86_64、bind-utils-9.9.4-51.el7_4.1.x86_64。 2、DNS服务器的IP配置:10.1.1.21。 3、正向解析设计思路:以10.1.1.21的机器为DNS服务器,10.1.1.23通过DNS服务器10.1.1.21解析后以域名user.geeklp来访问10.1.1.23,在10.1.1.23上通过域名test.geeklp来登录10.1.1.21。 4、反向解析设计思路:以10.1.1.21为DNS服务器,通过10.1.1.23主机的IP来查询其域名:tomcat.geeklp

三、安装DNS服务器相关软件,修改配置文件

1、DNS服务器需要安装bind、bind-chroot、bind-utils

[root@Geeklp-DNS ~]# yum -y install bind bind-utils bind-chroot

编辑配置文件/etc/named.conf,找到listen-on这一行,改为:

listen-on port 53 { any; };

找到allow-query这一行,改为:

allow-query     { any; };

对DNS配置文件进行一下语法检查:

[root@Geeklp-DNS ~]# named-checkconf /etc/named.conf

启动dns服务:

[root@Geeklp-DNS ~]# systemctl start named

配置防火墙:

[root@Geeklp-DNS ~]# firewall-cmd --permanent --add-service=dns
[root@Geeklp-DNS ~]# firewall-cmd --reload

测试:

[root@Geeklp-DNS ~]# dig www.baidu.com @10.1.1.21

返回数据无异常。初步配置完成! 2、配置正向解析。 (1)根据named.conf中include “/etc/named.rfc1912.zones”这一行,我们需要在named.rfc1912.zones中新增需要解析的域。当然,我们也可在直接在named.conf文件中操作,均能起到同样的效果。在末尾加上如下几行:

zone "geeklp"  IN {
        type master;
        file "data/master.geeklp.zone";
};

(2)从第三步可以看出,我们把test这个域放到了/var/named/data目录下,创建文件master.test.zone(touch master.test.zone),加入以下内容:

$TTL 3600
@          IN  SOA  geeklp  admin.geeklp. (
                                           0         ; serial
                                           1D      ; refresh
                                           1H      ; retry
                                           1W     ; expire
                                           3H )    ; minimum
@           IN       NS     10.1.1.21.
test        IN       A      10.1.1.21
user        IN       A      10.1.1.23

注意:当前区域10.1.1.21后面的点不可省略,否则报错。 SOA是Start Of Authority(开始验证)的意思,与域有关,后面共会接7个参数,这7个参数的意义依次是:

        1> Master DNS 服务器主机名,即在这个域中哪个DNS作为主服务器,在本例中,即geeklp。
        2> 管理员的Email。即出现问题可给管理员发邮件。在本例中,是admin.geeklp。
        3> 序号。这个序号代表这个数据库档案的陈旧,序号越大,代表越新。当slave要判断是否主动下载新的数据库时,就以序号是否比slave上的还有新来判断。
        4> 刷新频率(Refresh)。即slave向master要求数据更新的频率。
        5> 失败重新尝试时间(Retry)。如果因为某些因素,导致slave无法对master达成联机,那么在多久的时间内,slave会尝试重新联机到master。
        6> 失效时间(Expire)。如果一直失败尝试时间,持续联机到达这个设定值时限,那么slave将不再继续尝试联机。
        7> 存活时间(Minimum TTL)。如果在这个数据库zone file中,每笔记录都没有显性设定TTL快取时间的话,那么就以这个值为主。

区域配置文件格式如下: [名称] [TTL] [网络类型] 资源记录类型 数据 名称:指定资源记录引用的对象名,可以是主机名,也可以是域名。对象名可以是相对名称也可以是完整名称。完整名称必须以点结尾。如果连续的几条资源记录类型是同一个对象名,则第一条资源记录后的资源记录可以省略对象名。相对名称表示相对与当前域名来说的,如当前域名为geeklp.com,则表示www主机时,完整名称为www.geeklp.com.,相对名称为www。 TTL:指定资源记录存在缓存中的时间,单位为秒。如果该字段省略,则使用在文件开始出的TTL所定义的时间。网络类型:常用的为IN资源记录类型:常用的有SOANSAPTRMXCNAME在定义资源记录时,一般情况下是SOA记录为第一行,NS记录第二行,接着是MX记录,其他的记录可以随便写。;:表示注释():允许数据跨行。通常用于SOA记录@:表示当前域。根据主配置文件zone中所定义的区域名称。∗:用于名称字段的通配符。TTL所定义的时间。 网络类型:常用的为IN 资源记录类型:常用的有SOA、NS、A、PTR、MX、CNAME 在定义资源记录时,一般情况下是SOA记录为第一行,NS记录第二行,接着是MX记录,其他的记录可以随便写。 ;:表示注释 ():允许数据跨行。通常用于SOA记录 @:表示当前域。根据主配置文件zone中所定义的区域名称。 *:用于名称字段的通配符。 ORIGIN :ORIGIN后面跟上的是字符串,即要补全的内容。


IP地址的格式可以是如下的几种形式: 单一主机:x.x.x.x,如172.17.100.100 指定网段:x.x.x.或x.x.x.x/n,如172.17.100.或者是172.17.100.0/24 指定多个地址:x.x.x.xx.x.x.x如,172.17.100.100;172.17.100.200 使用!表示否定:如!172.17.100.100,则排除172.17.100.100 不匹配任何:none 匹配所有:any 本地主机(bind本机):localhost 与bind主机同网段的所有IP地址:localnet (4)搭建完毕,测试一下。重启named服务(systemctl restart named)。把10.1.1.23的DNS改为10.1.1.21(可以通过nmtui或编辑网络配置文件),重启网络(systemctl restart network)。

[root@JDK-Tomcat ~]# ping test.geeklp
PING test.geeklp (10.1.1.21) 56(84) bytes of data.
64 bytes from 10.1.1.21: icmp_seq=1 ttl=64 time=0.178 ms
64 bytes from 10.1.1.21: icmp_seq=2 ttl=64 time=0.450 ms

再试一下本机10.1.1.21,从配置文件中我们可以看到本机的域名为test.geeklp。从10.1.1.23ssh登录10.1.1.21。

[root@JDK-Tomcat ~]# ssh test.geeklp
The authenticity of host 'test.geeklp (10.1.1.21)' can't be established.
ECDSA key fingerprint is 98:00:32:6a:c1:a1:a6:fa:6f:be:08:53:94:6e:6b:f7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test.geeklp,10.1.1.21' (ECDSA) to the list of known hosts.
root@test.geeklp's password: 
Last login: Tue Jan  2 09:04:27 2018 from 10.1.1.1

正向解析搭建完成。 3.配置反向解析。 (1)修改配置文件:/etc/named.rfc1912.zones,复制zone “1.0.0.127.in-addr.arpa” 这一行到花括号结束的分号末尾,修改为如下内容:

zone "1.1.10.in-addr.arpa" IN {
        type master;
        file "data/named.23.zone";
        allow-update { none; };
};

注意:反向解析的IP需要反过来写,并且只写前三位。 按照上面配置新建/var/named/data/named.23.zone文件,并将一下内容添加到文件内部,保存退出。

$TTL 3600
@   IN  SOA  test.geeklp.  admin.test.geeklp.    (
                                    2017111301; Serial
                                    1H; Refresh
                                    15M; Retry
                                    7D; Expire
                                    1H; TTL
                                    )
   IN   NS        test.geeklp.
23 IN   PTR      tomcat.geeklp.

(2)重启服务,添加开机启动。

[root@Geeklp-DNS ~]# systemctl restart named
[root@Geeklp-DNS ~]# systemctl enable named

(3)测试反向解析过程。

[root@Geeklp-DNS ~]# nslookup 10.1.1.23
Server:     10.1.1.21
Address:    10.1.1.21#53
23.1.1.10.in-addr.arpa  name = tomcat.geeklp.
[root@Geeklp-DNS ~]# dig +trace 10.1.1.23
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> +trace 10.1.1.23
·············中间省略
23.1.1.10.in-addr.arpa  name = tomcat.geeklp.

四、附加资料

Bind可以使用的区域类型及其说明如下: master:主DNS区域。拥有该区域的区域数据文件,对该区域提供管理。 slave:从DNS区域。拥有master区域的区域数据文件的只读副本,slave区域从master区域获取所有的数据,这个过程称为区域传输。 forward:转发区域。用于转发DNS客户端的查询。 stub:存根区域。和slave区域类似,但是只复制master区域的NS记录和NS记录对应的A记录。 hint:提示区域,定义根所在的位置。用于查找根DNS服务器的位置。 主配置文件参数(options块): listen-on port:指定DNS监听的端口和地址。如果监听在本机的所有地址,可以用any。如listen-on port 53 { 172.17.100.1; }; listen-on-v6 port:指定DNS监听的IPV6的地址和端口。如listen-on-v6 port 53 { ::1; }; directory:指定区域数据文件所在的路径。默认为”/var/named”。如果使用了chroot,则该路径为相对路径,为/var/named/chroot/var/named query-source port:指定DNS客户端在查询时必须使用的源端口。该参数通常不设置。 allow-query:允许哪些客户端进行查询,如果没有定义此选项,则表示允许所有的客户端提交的DNS查询请求。如:allow-query { 172.17.100.200; 172.17.100.210; };则允许172.17.100.200和172.17.100.210这两个客户端提交的DNS查询请求。由外向内。通常都是any。允许所有的客户端查询。 allow-recursion:允许哪些客户端执行递归查询。如果该DNS服务器不对外开放,即不给互联网的用户执行查询时,则开启该选项。与allow-query不同的是,不执行客户端提交的递归查询。allow-query允许迭代查询和递归查询。allow-recursion由内向外。通常需要放行本地网段和127.0.0.0/8的。 recursion yes:默认为yes,则表示给所有的客户端执行递归。这样就成为一个开放的DNS服务器了。 forwarders:指定转发服务器。如果定义了多个转发服务器,则依次进行尝试,直到获得查询信息为止。本地的DNS服务器会将查询请求转发到转发服务器。如果该项目设置在区域定义之外的话,是对所有非本地区域的解析都转发到指定的DNS服务器;如果定义在某个区域内,则是将对该区域的解析转发到指定服务器。 forward only|first:only表示只将查询请求转发到所定义的转发服务器,不通过本机查询。first表示先将查询转发到所定义的转发服务器,如果没有响应,则通过本机进行迭代查询。默认为first。 querylog:yes启用查询日志记录功能。no关闭查询日志记录功能。 allow-transfer:允许哪些slave DNS服务器进行区域传输。 recursion:选项指定是否允许客户端递归查询其他域名服务器。如果希望对本地客户端的查询允许递归,但对来自外部的查询请求禁止递归,可以通过“allow-recursion”选项进行定义。allow-recursion选项可以指定一个允许执行递归查询操作的地址列表。 transfer-source x.x.x.x:指定slave在向master进行区域传输时所使用的源地址。 notify:是否启用notify功能。yes表示当Master端数据修改时,通知Slave进行区域传输,no表示不通知slave。 allow-update:是否允许通过DHCP获取IP地址的机器动态更新DNS信息,none表示不允许。 dnssec-enable:设定BIND是否支持DNSSEC,该技术并不对数据进行加密,它只是验证您所访问的站点地址是否有效。是一种端到端的安全协议。默认为yes。在做子域授权时,需要设置为no dnssec-validation:默认为yes,在做子域授权时,需要设置为no 参考资料:http://blog.csdn.net/xrwwuming/article/details/51505031

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

由MasterProcWals状态日志过多导致的HBase Master重启失败问题

本文主要讲述如何解决由MasterProcWals状态日志过多导致的HBase Master重启失败问题。

1.5K50
来自专栏Java帮帮-微信公众号-技术文章全总结

java.io.IOException 断开的管道【面试+工作】

查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但是最多还是这个:

93930
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第27章 DNS域名系统基础知识

本章节为大家讲解DNS(Domain Name System,域名系统),通过前面章节对TCP和UDP的学习,需要大家对DNS也有个基础的认识。

21930
来自专栏运维小白

10.11 Linux网络相关

linux网络相关 ifconfig查看网卡ip(yum install net-tools) ifup ens33/ifdown ens33 设定虚拟网卡en...

32760
来自专栏电光石火

Nexus3.x安装及配置

1.9K60
来自专栏酷玩时刻

Android依赖管理与私服搭建

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 *本篇文章视频 慕课网之Android依赖管理与私服搭建

18750
来自专栏IT笔记

linux下 Error running javac compiler

由于Linux版本更新,虽然软件都拷贝过来了,但是系统环境重新配置。 旧系统配置了ANT一键部署功能的脚本,由于部署需要,所以这里又重新配置了下环境。 1、A...

42350
来自专栏蓝天

thrift使用小记

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL...

19510
来自专栏肖洒的博客

GitHub Pages自定义域名

最早用GitHub Pages做个人博客,初始的二级域名就是https://x-nicolo.github.io/,之后用了一个免费顶级域名,在Freenom ...

49450
来自专栏Java工程师日常干货

对缓存击穿的一点思考前言什么是缓存击穿?避免缓存击穿的思路分析代码抽象

缓存(内存 or Memcached or Redis.....)在互联网项目中广泛应用,本篇博客将讨论下缓存击穿这一个话题,涵盖缓存击穿的现象、解决的思路、以...

25220

扫码关注云+社区

领取腾讯云代金券