本文包括了解DNS所需的基础知识和LinuxDNS服务器安装、配置和维护的具体操作知识。一、DNS域名结构和域名服务器域名系统DNS(DomainNameSystem)是互联网用来将人们容易使用的机器名转换成IP地址的命名系统。域名系统实际上是一个名称系统。为什么不叫“名字”而是叫“域名”呢?这是因为在这个互联网命名系统中使用了很多“域”,所以出现了“域名”这个词。“域名系统”特指在互联网中使用该系统。1、域名结构在了解DNS服务器之前,需要先了解一下互联网上的域名空间结构,如下图所示:顶级域名是域名的最后一部分,也就是域名最后一点后的字母,例如在http://域名example.com中,顶级域名为.com(或.COM),大小写相同。二级域名是域名的倒数第二部分。例如域名http://example.com中,二级域名为example。等等。2、域名服务器互联网上的DNS服务器是分层排列的。根据不同级别域名服务器所起的作用,域名服务器可分为4种不同类型。【根域名服务器】最高级别的域名服务器(如国家总理)也是最重要的域名服务器。全球共有13个根域名服务器名称,分别是(按字母顺序命名):a.root-servers.net.b.root-servers.net.c.root-servers.net.d.root-服务器.net.e.root-servers.net.f.root-servers.net.g.root-servers.net.h.root-servers.net.i.root-servers.net.j.root-servers。net.k.root-servers.net.l.root-servers.net.m.root-servers.net。当然,并不是一个名字对应一个物理服务器的地址,一个根服务器的名字可以作为一个入口对应一组服务器集群提供域名解析服务。【顶级域名服务器】就好比是国家总理手下的省长,管辖省级单位。在DNS中,他们负责管理在该顶级域名服务器上注册的下一级域名(二级域名)。所有顶级域名服务器的名称和IP地址都向根服务器注册,即根域名服务器知道所有顶级域名服务器的名称和IP地址。【权威域名服务器】负责一个区的域名服务器,就像省长以下的市长、镇长、乡长等行政人员。顶级域名服务器也可以看作是权威域名服务器,但由于其特殊性,我们特将其归为一类。因此,权威域名服务器通常是指管理二级、三级、四级域名的顶级域名以下的服务器。以上三种服务器之间的关系可以用这张图来表示:[本地域名服务器]这类服务器不属于上述层次结构。当主机(个人电脑)发送DNS请求时,查询请求被发送到本地域名服务器。本地域名服务器负责回答查询,或者代替主机向域名空间中不同级别的权威域名服务器进行查询,然后将查询结果返回给主机。下图展示了一个域名的解析过程和各类域名服务器的位置。3、为什么要使用DNS服务器域名服务器提供域名到IP地址的解析服务,互联网上的域名数量庞大,不可能将所有的域名信息都存储在一个域名服务器中,也不可能每一个以上节点使用域名服务器。在实际的公网DNS系统中,域名服务器是分区管理的。服务器管辖的区域称为区域。如果我们把域名空间结构中的根比作国家,顶级域名比作省级行政单位,二级域名比作市级单位,三级、四级想想说乡镇,那我们自然会想到总理管国家,省长管省单位,还有市长、镇长等等。假设一个域名http://abc.com的层次结构分布如图所示。如果采用方法(a),则abc节点下的整个子树成为一个区,由一个(通常是一组)域名服务器管理,就好像http://abc.com是一个北京市,以下一切事项由北京市市长说了算;如果采用方法(b),那么abc节点下面的单词数分为两个区域:x节点下面的子树和y节点下面的子树,这两棵子树由对应的域名服务器管理tox和y,好像http://abc.com是福建省,x是福州市,y是厦门市,福建省省长只管福州市和厦门龙市,不会直接管单位低于福州和厦门。福州市和厦门市以下单位分别由福州市市长和厦门市市长管辖。将一个域中子树的一部分分配给另一个域名服务器称为“委托”。做了“委托”之后,域名服务器的管理范围明显变小了,其子节点由域名服务器控制。任命下一级名称服务器管理人员。互联网上的域名结构是树形分布的,所以DNS服务器也是对应的树形结构,每个DNS服务器都可以提供部分域名(其管辖的域名)到IP地址的解析。4、DNS查询方式递归查询:客户端计算机请求自己的DNS服务器进行解析。迭代查询:服务器查询服务器方法。上位机一般采用递归查询本地域名服务器。所谓递归查询就是:如果主机查询的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器将继续向其他根域名服务器发送查询请求报文作为DNS客户端查询),而不是让主机自己执行下一个查询。所以递归查询返回的查询结果要么是要查询的IP地址,要么报错,查询不到想要的IP地址。从本地名称服务器到根名称服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发送的迭代查询请求报文时,要么给出要查询的IP地址,要么告诉本地服务器:“你接下来要查询哪个域名服务器?”.然后让本地服务器做后续的查询。根域名服务器通常会把它知道的顶级域名服务器的IP地址告诉本地域名服务器,然后让本地域名服务器去查询顶级域名服务器。顶级域名服务器收到本地域名服务器的查询请求后,要么给出要查询的IP地址,要么告诉本地服务器接下来要查询哪个权威域名服务器。最后知道要解析的IP地址或报错,然后将结果返回给发起查询的主机。下图是这两种查询DNS解析顺序的区别:(由/etc/nsswitch.conf决定)Localcache本地/etc/hosts文件a)Format:DNSservercachespecifiedbyIPFQDNAlaisa)Clearcache:rhdc刷新指定的DNS服务器(/etc/resolv.conf)a)格式:搜索http://example.comnameserver202.103.24.68nameserver202.103.149.50DNS查询命令gethostipa)是syslinux包的一部分b)传递主机文件和DNS解析主机nametoIPc)将IP计算成8位16进制,在PXE中有特殊用途hosta)只能通过DNS查询b)查询主机名到IP解析nslookupa)windows分析工具,linux通用,目前使用较少b)提供简单正反反向分析查询diga)linux中强大的查询工具,可以查询更详细的信息,应用最广b)可以追踪非权威的DNS5、DNS服务器DNS服务器分为三种。主DNS服务器这些服务器存储特定域名的配置文件,并据此权威地指定特定域名的地址。主DNS服务器知道其管辖下的所有主机和子域的地址。二级DNS服务器这些服务器充当主DNS服务器的备份,并承担一些负载。主服务器知道辅助DNS服务器并将更新推送给它们。缓存DNS服务器这些服务器不存储域特定的配置文件。当客户端请求缓存服务器解析域名时,该服务器将首先检查其本地缓存。如果未找到匹配项,则查询主服务器。然后这个响应将被缓存。您还可以轻松地将自己的系统用作缓存服务器。二、LinuxDNS服务器的安装、配置和维护1、搭建LinuxDNS服务器Linux下实现DNS功能的包有很多,我们这里只关注BINDDNS服务器。它用于世界上大多数DNS服务器。如果您使用的是基于RedHat的Linux发行版,例如CentOS,您可以这样安装它:$dnf-yinstallbind如果您使用的是基于Debian的操作系统,例如Ubuntu:$apt-getinstallbind9安装完成后就可以启动了,也让它在电脑开机的时候启动。$systemctl启动命名$systemctl启用命名2。配置BIND服务以使用/etc/named.conf作为配置文件。BIND在该文件中使用如下语句:options:用于全局BIND配置。logging:配置什么需要记录,什么需要忽略。我建议您看一下Linux系统日志服务器。区域:定义DNS区域。include:在named.conf中包含另一个文件。在options语句中可以看到BIND的工作目录是/var/named。zone语句可用于定义DNS区域,例如域http://google.com,其中包含子域http://mail.google.com和http://analytics.google.com。上述所有三个域(主域和子域)都有一个由zone语句定义的区域。3.定义主域名服务器我们知道DNS服务器的类型有主域名服务器、二级域名服务器和缓存域名服务器。与缓存名称服务器不同,主名称服务器和辅助名称服务器在应答过程中处于同等地位。在配置文件/etc/named.conf中,您可以使用以下语法定义主域服务器:zone"http://likegeeks.com"{typemaster;filelikegeeks.com.db};包含主要区域信息的文件存储在/var/named目录中,从选项中可以看出这是一个工作目录。注意:软件服务器或托管面板会根据您的域名自动为您创建主域服务器信息的文件名,所以如果您的域名是http://example.org,那么您的主域服务器的文件信息是/var/named/example.org.db。类型是master,这意味着这是一个主域服务器。4.定义副域服务器与定义主域服务器相同。副域服务器的定义略有改动:zone"http://likegeeks.com"{typeslave;mastersIPAddresslist;;像geeks.com.db这样的文件};对于副域服务器,其域名与主域服务器相同。上面语法中的slave类型表示这是一个二级域服务器,“mastersIPAddresslist”表示二级域服务器的区域文件中的信息是从主域服务器的区域文件中的信息复制而来的.5.定义缓存服务器即使你已经配置了主域或副域服务器,仍然有必要(非强制)定义缓存服务器,因为这样可以减少DNS服务器的查询次数。在定义缓存服务器之前,需要先定义三个区域选择器:zone"."在{typehint;file"root.hint";};zone"."在{typehint;file"root.hint";};zone"."IN{typehint;file"root.hint";};zone"localhost"IN{typemaster;file"localhost.db";};第三个区域被定义为反映对本地主机的查找。此反向查找将本地IP地址指向本地主机。zone"0.0.127.in-addr.arpa"IN{typemaster;file"127.0.0.rev";};将这三个区域信息放在/etc/named.conf文件中,你的系统就可以充当缓存服务器。但是,您如何引用likegeeks.com.db、localhost.db和127.0.0.rev等文件?这些文件包含具有特定选项的每个区域的DNS记录类型。那么,这些DNS记录类型是什么,又是怎么写的呢?6.DNS记录类型数据库文件包含SOA、NS、A、PTR、MX、CNAME和TXT等记录类型。让我们看看每种类型是如何记录的。SOA:权威记录开始SOA记录开始描述站点的DNS条目,如下所示:example.com。86400在SOAns1.example.com中。mail.example.com。(2017012604;serial86400;refresh,seconds7200;retry,seconds3600000;expire,seconds86400;minimum,seconds)第一行以域名http://example.com开头,以句号结尾——这个语句是一致的使用/etc/named.conf文件中的区域定义。我们应该永远记住DNS配置文件非常挑剔。IN告诉域名服务器:这是一条网络记录。SOA告诉域名服务器:这是一个权威记录的来源。ns1.example.com。是文件所在域名服务器的完全限定域名(FQDN:FullyQualifiedDomainName)。mail.host.com.是域管理员的电子邮件地址。您会注意到电子邮件地址没有“@”符号,而是被一个句点代替,最后还有一个句点。第2行是一个序列号,用于告诉名称服务器文件何时更新。因此,如果更改区域代码,则必须增加此序列号。此序列号的格式为YYYYMMDDxx,其中xx从00开始。第3行是每秒的刷新率。该值用于告诉第二个名称服务器多久查询一次主服务器以获取已更新的记录。第4行是每秒重试的频率。如果第二台服务器多次尝试连接主域名服务器进行更新检测,均未连接成功,则第二台服务器将每秒重试指定次数。第5行是超时指示。其目的是让第二个服务器缓存区域数据。该值告诉这些服务器,如果它们无法连接到主服务器进行更新,它们将在指定的秒数后丢弃该值。第6行告诉缓存服务器,如果它们无法连接到主名称服务器,它们在超时之前应该等待多长时间。NS:名称服务器记录(NameServerRecords)NS记录用于指定哪个名称服务器维护该域的记录。你可以这样写NS记录:INNSns1.example.com。在NSns2.example.com中。不必有2个NS记录,但通常最好有备份名称服务器。A和AAAA:地址记录A记录用于提供从主机名到IP地址的映射,支持INA192.168.1.5。如果您的主机位于http://support.example.com,地址为192.168.1.5,您可以像上面的示例一样输入它。请注意,我们编写的主机没有句点。PTR:PointerRecordsPTR记录用于执行反向名称解析,允许某人指定一个IP地址,然后找到相应的主机名。这与A记录的作用相反:192.168.1.5INPTRsupport.example.com。在这里,我们键入带点的完整主机名。MX:邮件交换记录(MailExchangeRecords)MX记录告诉其他站点您所在域的邮件服务器地址:example.com。在MX10邮件中。当然,这个域以句点结尾。数字10是邮件服务器的重要性标志,如果您有多个邮件服务器,则较小的数字不太重要。CNAME:规范名称记录(权威名称记录)CNAME记录允许您为主机名创建别名。当您想提供一个易于记忆的名称时,这很有用。假设一个站点有一个主机名为http://whatever-bignameis.exa...的Web服务器,并且由于系统是一个Web服务器,可以为名为www的主机创建一个CNAME记录或别名。您可以为名为http://www.example.com的域名创建CNAME记录:whatever-bignameisINA192.168.1.5wwwINCNAMEwhatever-bignameis第一行通知DNS服务器别名的位置。第二行创建一个指向www的别名。TXT记录您可以在TXT记录中存储任何信息,例如您的详细联系信息或您希望人们在查询您的DNS服务器时能够获得的任何其他信息。您可以像这样存储TXT记录:example.com。在TXT中“您的信息在这里”。此外,RP记录被创建为主机联系信息的显式容器:example.com。在RPmail.example.com中。HTTP://example.com。7.DNSTTL值位于/etc/named.conf文件的顶部,其中有一个$TTL条目。这个条目告诉BIND每个单独记录的TTL值(生存时间,time-to-live)。它是一个以秒为单位的值,比如14400秒(4小时),所以DNS服务器缓存你的域文件最多4个小时,然后它会重新查询你的DNS服务器。您可以降低此值,但默认值通常是合理的。除非你知道你在做什么。8.捕捉配置错误也许你在编写域文件时忘记了一个句点或空格或其他一些任意错误。您可以从日志中诊断LinuxDNS服务器错误。BIND服务将错误传递到/var/log/messages,可以使用tail命令查看实时错误日志。您必须使用-f选项:$tail-f/var/log/messages。所以当你编写域文件或修改/etc/named.config并重启服务时,出现错误后,你可以很容易地从日志中识别错误类型。9、host命令成功添加或修改记录后,可以使用host命令查看host是否解析正确。host命令允许您将主机名解析为IP地址:$hosthttp://example.com。此外,您可以执行反向查找:$host192.168.1.5。您可以在这篇文章中找到有关host和dig命令的更多信息https://likegeeks.com/linux-n...10.Whois命令whois命令用于确定域名的所有权及其所有者的电子邮件地址和联系电话:$whoisexample.com。11.Rndc命令rndc工具可以用来安全地管理名字服务器,因为所有的通信都是通过数字签名来验证的。此工具用于控制名称服务器和调试问题。您可以使用以下命令检查LinuxDNS服务器的状态:$rndcstatus。此外,如果您更改了任何区域文件,则无需重新启动命名服务即可重新加载服务:$rndcreloadhttp://example.com。在这里我们重新加载http://example.com域文件。您可以重新加载所有域:$rndcreload。或者您可以添加新域或更改服务配置。您可以按如下方式重新加载配置:$rndcreconfig。12.LinuxDNS解析器我们已经知道LinuxDNS服务器如何工作以及如何配置它。另一部分当然是客户端与DNS服务器交互(与DNS服务器通信以将主机名解析为IP地址)。在Linux上,解析器位于DNS的客户端。要配置解析器,请检查/etc/resolv.conf配置文件。在基于Debian的发行版中,查看/etc/resolvconf/resolv.conf.d/目录。/etc/resolv.conf文件包含客户端获取其本地DNS服务器地址所需的信息。第一个代表默认搜索域,第二个代表主机名服务器(nameserver)的IP地址。名称服务器行告诉解析器要使用哪些名称服务器。只要您的BIND服务在运行,您就可以使用自己的DNS服务器。
