程志辉博客 - 一个伪文艺青年
贵在坚持,难在坚持,成在坚持!
程志辉

什么是DNS服务?

DNS[ Domain Name Service(Server | System) ]是“域名服务|服务器|系统”的英文缩写,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

简单点:根据域名查出IP地址。看你可以把它想象成一本巨大的电话本。

它用于TCP/IP网络,为网络中的客户机(linux/windows)提供名称和IP地址关系查询的服务。

举例来说,如果你要访问域名 www.qqzmly.com , 首先要通过DNS查出它的IP地址为 xxx.xxx.xxx.xxx

DNS必备知识点

全球共有13台根域名服务器。这13台根域名服务器中名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。根服务器主要用来管理互联网的主目录,全世界只有13台。

1.为什么要使用DNS服务?

DNS可以理解为数据库服务器,将所有文件保存在数据库,根据需求进行数据的查找。DNS主要分为正向解析和反向解析。互联网非常的大。为了方便跨区域管理,就有了DNS服务。大家访问qqzmly.com这个网站时也许会记住网址,但是服务器的地址,一般不会有人去专门记它。

2.哪些方法可以实现IP地址和域名的转换?

不仅仅是DNS服务能够实现。互联网最初发展的时候是通过host表来进行记录的。在Windows系统中,访问System32-->drivers-->etc-->host文件记录的就是域名以及IP地址相互对应的内容。

DNS查询方式

当用户使用计算机访问www.qqzmly.com这个网站时,背后会发生些什么呢?

DNS查询方式分为两大类:递归查询、迭代查询

递归查询:客户端仅发出一次请求,让DNS服务器去查询返回结果。简单点:提供问题 给予回答的过程(客户端和本地DNS服务器之间)!直接向本地DNS服务器拿到的信息是递归查询(本地查询)

迭代查询:本地没有 向根域名顶级域名服务器多次拿到的内容叫做迭代查询(间接解析) 发生在本地服务器与远程服务器之间。以访问 www.qqzmly.com 为例叙述迭代查询过程。当客户端向本地 DNS 服务器发出请求后,本地 DNS 服务器查询本机缓存,如果有记录,则直接返回;如果没有,则本地 DNS 服务器以客户端的身份将查询请求发给根名称服务器,这个过程是递归查询过程。根名称服务器通过查询返回给本地 DNS 服务器 .com 顶级名称服务器的IP地址;本地DNS服务器收到 .com 顶级名称服务器的IP地址后继续向.com顶级名称服务器发出请求,顶级名称服务器收到请求后查询缓存,如果有记录则直接返回本地DNS服务器,如果没有,则返回qqzmly.com二级名称服务器的IP地址;本地名称服务器继续发出请求,二级名称服务器同样查找缓存返回www.qqzmly.com的IP地址。

简单点理解:客户端与本地DNS服务器之间为递归查询。本地DNS完成不了就使用迭代查询

DNS服务器类型

主名称服务器(primary name server):从域管理员构造的本地磁盘文件中加载域信息,该文件(区域文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。

从名称服务器(secondary name server):它可从主服务器中复制一整套域信息。区域文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为”区域文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。

唯高速缓存名称服务器(caching-only server):可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得域名服务器查询的结果,一 旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。 当BIND被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器。

DNS代理服务器:严格来讲不能算作DNS服务器。同时这个不需要向相关部门备案。很多企业为了防止信息泄露,同时很多老板对于员工在工作时间做非工作内容是非常痛恨的,所以会采取通过路由或者其他的一些手段,来让内网和万维网进行隔离,阻断一些不必要的数据传输。那么跟DNS代理服务器有什么关系呢?同时DNS代理服务器与唯缓存DNS服务器有什么区别呢?

很多员工为了能够与外界进行通讯会采用DNS代理服务器的方式。通过DNS代理服务器进行一个中转,来询问其他的DNS服务器,从而达到能够访问万维网。它与唯缓存DNS服务器的区别在于他只是进行一个中转,不进行数据的缓存(保存)。

DNS服务器常见使用方法

8.8.8.8是Google提供的免费DNS服务器的IP地址

202.103.24.68是武汉电信提供的DNS服务器的IP地址

那日常客户端中会需要添加DNS服务器地址我们该如何填写呢?一般来说都是首选使用本地运营商提供的DNS服务,备用使用谷歌提供的DNS服务器IP地址。为什么呢?原因很简单!当你在访问国内的网站时,如果你首选是8.8.8.8地址,它是美国的服务器。你得先通过互联网向美国发送请求,最后经过反复的查询绕一大圈回到国内。速度自然比不上本地运营商的DNS服务,因为在国内绕肯定比国外绕快啊。

还有一种特殊的情况,8.8.8.8可以解析,但是本地无法解析。原因是国内某墙........

主DNS服务器挂了,从DNS服务器回应内容是否权威?

不权威!你得了解从DNS服务器的工作原理,它实际上是对主服务器进行一个同步,默认情况下从服务器资源是只读性的。修改数据表上的内容还是得回到主DNS服务器上。当主DNS服务器挂了,从服务器承担工作任务。这期间涉及一个有效期事件,从服务器也许有的内容还没有进行更新,有一个时效性,可信度大大降低,所以不权威!

为什么有的时候QQ能够访问,而无法访问baidu等网站?

在登录QQ的时候实际上也是访问了他的服务器,只不过作为一款客户端软件,它默认告诉你指向了一个IP地址,所以QQ可以使用。而你本地终端没有设置DNS地址或者说DNS地址设置有问题,无法正确的查询到你需要访问的网站IP地址,这样导致无法访问任何网页。

DNS域名解析收费服务?

很多站长做网站都不大了解DNS域名解析的过程。再加上做网站越来越简单。域名解析的过程经常会被忽略掉!对于个人站长来说主机商提供的免费DNS域名解析也就足够了。但是对于企业来讲,一个付费的DNS域名解析还是有一定作用的。比如在解析的速度上,付费肯定是由于免费!(以前不了解DNS以为这些都是免费的,后来发现原来好的服务还是得花钱来购买)

实验环境

VMware 、Red Hat Enterprise Linux 6

DNS可以用于Linux也可以用于Windows下,但windows中查询DNS记录只有一种方法nslookup,而linux上自带有三种,而且linux上的nslookup与windows上的使用方法完全一致,所以此次试验不进行windows上的演示!

DNS服务配置要求

某公司搭建一台主DNS服务器,负责y.com名称域的解析工作,服务器已安装Linux系统,该DNS服务器需要对公司内部各服务器的域名进行正向和反向解析。

具体解析信息如下表所示,且域名均能实现正反向解析:

服务器初始化操作

1.Linux主机需要修改正确网卡标识

2.Linux主机需要修改主机名

3.Linux主机需要关闭和禁用防火墙

4.Linux主机需要禁用Selinux

5.DNS服务器需要配置本地YUM源仓库

6.Linux主机初始化配置完成需要重新启动

以上几步操作由于在Linux——DHCP服务中操作过一遍,所以不进行二次演示。

经过测试,实验机器的网卡设备,主机名,禁用Selinux,禁用防火墙均已配置成功。

正式开始配置 DNS 服务

本次实验我们使用的DNS服务器软件是BIND(Berkeley Internet Name Domain 伯克利互联网域名)最早有伯克利大学的一名学生编写。每天了解一点点知识,装起13都得劲。

服务进程名: named 服务端口号:TCP/UDP-53

搭建流程 工作流程是重点!!!

​ 1.构建网络,规划好名称空间(保证唯一性)

​ 2.设置服务器静态IP地址

​ 3.关闭防火墙或者方行DNS服务的相关端口

​ 4.查看BIND是否安装 没有安装就去安装

​ 5.修改全局配置文件 named.conf

​ 6.在另一个配置文件里面配置named.rfc1912.zones

​ 7.建立解析数据库文件并编辑需要记录的资源

​ ........

不管做什么事情,第一件事都应该是将这件事情进行一个规划,否则没有头绪,没有目标,瞎折腾不如打打游戏跑跑步放松一下!

1.查看 DNS 服务相关软件是否安装?

# rpm -qa | grep bind
# yum -y install bind    //没有安装就安装一下

2.查看 DNS 服务软件包所生成的重要文件和目录

# rpm -ql bind

配置文件太多太多,只展示一部分~

初学者只需要搞清楚本文档所用到的几个配置文件!

DNS 服务端配置1

# vim /etc/named.conf    //编辑主配置文件

由于我配置好了这个文件,同时希望更好的展现给大家。使用过滤的方式,过滤掉//开头以及空格开头剩下的就是生效起作用的配置文件了!

# grep -v ^"//" /etc/named.conf | grep -v ^$

named.conf文件详解

options {                ----> 全局配置段
    listen-on port 53 { any; };        //ipv4监听端口
    //listen-on-v6 port 53 { ::1; };    //用来设定监听进入服务器的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";
    allow-query     { any; };        //设置允许DNS查询的客户端地址
    recursion yes;
    dnssec-enable no;        //是否支持DNSSEC开关,默认为yes
    dnssec-validation no;    //是否进行DNSSEC确认开关,默认为no
    //dnssec-lookaside auto;    //当设置dnssec-lookaside,它为验证器提供另外一个能在网络区域的顶层验证DNSKEY的方法
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
logging {                ----> 日志配置段
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {            ----> 区域配置段,可定义在主配置文件,也可定义在"/etc/named.rfc1912.zones"文件中
    type hint;
    file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

注:每个配置语句必须以分号结尾。

DNS 服务端配置2

# vim /etc/named.rfc1912.zones    //编辑子配置文件

由于我配置好了这个文件,就直接给大家查看一下。整个文件没有进行修改的操作,只是在后面加了我们需要配置的正向以及反向内容,所以使用tail查看配置文件的最后几行

# tail /etc/named.rfc1912.zones

named.rfc1912.zones文件详解

zone "czh.com" IN{            ----> 正向解析配置    域定义格式
    type master;            ----> [hint|master|slave|forward] 根、主、从、转发
    file "czh.com.zone";    ----> 自定义解析域文件名称
};

zone "42.168.192.in-addr.arpa" IN{    ----> 反向解析配置
    type master;
    file "czh.com.arpa";
};

type设置了master,也就代表着告诉访问者自己是主服务器,具有权威性!

服务器端获取反向域名的方法

arpaname IP地址
    (将反馈结果的第一个部分隐去,即为该网络的反向域名)

很多时候记不住反向域名地址,用这个方法非常实用!

注意点:

自定义解析域文件名记牢,待会儿还得用,见名知义,zone,arpa结尾一目了然!

每个配置语句必须以分号结尾。

DNS 服务端配置3

复制生成正向和反向区域解析数据库文件

# cp -p /var/named/named.localhost /var/named/czh.com.zone
# cp -p /var/named/named.loopback /var/named/czh.com.arpa
# ll /var/named

cp复制文件或目录 -p保持文件属性

复制的两个文件,你可以理解为是一个模板!

如果在复制文件时没有使用-p,那你需要配置的两个文件所属的用户组应该是root,这个在后续是非常糟糕的!DNS无法正常工作,所以大家务必将该文件的权限属组更改成系统默认设定权限。

当然也可以利用chmod进行赋权。

这里的两个文件跟上面的named.rfc1912.zones文件里面配置的自定义解析域文件名是一样的

DNS 服务端配置4

# vim /var/named/dh.com.zone    //编辑正向区域解析数据库文件

由于我配置好了这两个文件,就直接给大家查看一下。

# cat /var/named/czh.com.zone
# cat /var/named/czh.com.arpa

正向解析,反向解析基本框架都差不多。SOA后面的第一个czh.com.代表着根域名地址。后面的root.czh.com.代表着邮箱地址。

dhcp            A    192.168.42.1
dhcp.czh.com.    A    192.168.42.1

上面两种写法都对,第一种写法没有czh.com.是因为在配置文件上面定义了,会自动的掉下来补全。说到这里大家一定要记住,在写域名地址的时候后面一定要带一个点.

smtp    CNAME    mail.czh.com.
pop3    CNAME    mail.czh.com.    

向上面这样,都是结尾都是有点的,至于为什么,建议你看看本文档上面的DNS查询过程。

配置文件测试

1)配置文件检测

# named-checkconf /etc/named.conf                //无结果反馈表示配置文件无语法错误
# named-checkconf /etc/named.rfc1912.zones        //无结果反馈表示配置文件无语法错误

2)正向和反向区域解析测试

# named-checkzone czh.com /var/named/czh.com.zone
            //反馈结果包含OK即通过测试
# named-checkzone 42.168.192.in-addr.arpa /var/named/czh.com.arpa
            //反馈结果包含OK即通过测试

如果测试报错,那就返回到文件配置,检查一下哪里有问题,最常见的问题就是域名地址后面忘记加点.

启动服务并将服务设置为开机自启动

# service named start
# service named status    //反馈结果包含正在运行即成功

# chkconfig named on
# chkconfig named --list    //反馈结果在2-5的运行级别中均为启用即成功

查看 DNS 相关服务进程已运行

# ps -ef | grep named

查看 DNS 相关服务端口已监听

# netstat -tunlp | grep named

客户端测试前准备

由于学习的是DNS服务,客户端测试得在网卡配置文件中指定DNS服务器地址

# vim /etc/sysconfig/network-scripts/ifcfg-eth0        //修改客户端网卡配置文件

增加 ---->>    DNS1=192.168.42.3

# service network restart    //重启网络服务

重启网络服务的好处:不用重启服务器

客户端正式开始测试

一共有三种测试方法dig host nslookup 下面的测试中都会用到

dig  默认情况下解析的是A记录
            -t NS    解析NS记录
            -t MX    解析MX记录
            -x        解析PTR记录
host 默认情况下解析的是A记录和PTR记录
            -t NS    解析NS记录
            -t MX    解析MX记录
nslookup 默认情况下解析的是A记录和PTR记录
            在交互模式下可使用set q=  或者set type= 改变解析类型

在 Linux 客户端使用 dig 解析 dhcp.czh.com

# dig dhcp.czh.com

在 Linux 客户端使用 host 解析 dhcprelay.czh.com

# host dhcprelay.czh.com

在 Linux 客户端使用 nslookup 解析 www.czh.com

# nslookup www.czh.com

在 Linux 客户端使用 dig 解析 192.168.42.5

# dig -x 192.168.42.5

在 Linux 客户端使用 host 解析 192.168.42.6

# host 192.168.42.6

在 Linux 客户端使用 nslookup 解析 192.168.42.7

# nslookup    192.168.42.7

在 Linux 客户端使用 dig 解析 czh.com 域的 MX 记录

# dig -t MX czh.com

在 Linux 客户端使用 host 解析 czh.com 域的 NS 记录

# host -t NS czh.com

在 Linux 客户端使用 nslookup 交互模式解析 czh.com 域的 NS 记录和 MX 记录

# nslookup
> set q=NS    / type=NS    //两者用法一致
> czh.com

在 Linux 客户端使用 ping 命令测试客户端到 masterdns.czh.com 的 连通性(2 个包即可)

# ping -c2 masterdns.czh.com

上面的测试几乎把所有用法都演示了一遍,此刻应有浩哥牛逼

注意点:

1.dig仅支持A解析 host,nslookup支持A记录和PTR记录

2.nslookup进入交互模式切换类型时可以用set type=...也可以使用set q=...

3.ping其实也可以进行测试,但是他主要用途在于测试连通性

4.经过测试,dig展现的内容最为齐全!

总结一下

到此关于Linux——DNS服务配置的教程就结束了。最开始的初始化配置由于篇幅问题没有过多描述,可以去参考一下我写的Linux——DHCP服务。每一个环节都是紧密结合的,当出现报错,应该看看前面的步骤哪里有问题一步步排错。一般都是配置文件有问题,当然也不能疏忽细节上的问题:主机之间的连通性。最后的最后感谢浩哥的指导。本文由程志辉原创独自编辑,难免会出现一些错误,欢迎大家在评论区指出,同时转载请留下版权!

2019年05月06日
Icefox Theme . 鄂ICP备16001608号-1