admin管理员组

文章数量:1533099

DNS 服务器

DNS服务器的正解,反解zone的意义,解析主机名的授权概念与整体查询流程,以及master/slave DNS服务的配置等等

目前网络的IP为第四版的IPV4,这个IPV4由32位所组成,为了人脑记忆已经转成四组十进制的数字了,internet传输数据的时候,需要这个IP

单一档案处理上网的年代: /etc/hosts,早期是利用/etc/hosts文件将主机名与IP做一个对应,如此可以透过主机名来取得该主机的IP了,可惜这个方法有缺陷,那就是主机名

与IP的对应无法自动在所有的计算机内更新,客户端计算机每部每次修改后,其他的计算机就都要下载一次档案才能顺利联网,目前/etc/hosts中最重要的就是localhost对应到

127.0.0.1,你不能删除该笔记录的,在你的私有网域内部,最好将所有的IP与主机名对应都写入这个档案中

分布式、阶层式主机名管理架构: DNS 系统,/etc/hosts单一档案对于计算机数量多的情况下就会出现上述的问题,而DNS系统不需要知道主机的IP,只要知道该主机的名称

就能够轻易的连上该主机了,DNS 利用类似树状目录的架构,每部DNS服务器记录的信息不会很多,如果已经申请到主机名解析的授权,那么在你自己的DNS服务器中,就能

够修改全世界都可以查询到的主机名了,而不用透过上层ISP的维护,DNS的有关的包括:FQDN、Hostname 与 IP 的查询流程,正解与反解、合法授权的 DNS 服务器之意

义,以及 Zone 等等的知识作一个认识才行。Bind软件则是提供这个DNS服务的软件

完整主机名: Fully Qualified Domain Name (FQDN), 例如021-64374455其中021就是域名domain name,而电话号码就是主机名,领域名底下还可以记录各个主机名,

组合起来才是完整的主机名(FQDN)..

www.michael 这个URL的情况为:cn是domain 而net则是主机名,而net为domain,则michael则成为了hostname,以此类推,如果www是主机名,而domain

name则是由michael那个名字所决定的,自然,我们的主机就是让管理michael这个domain name的DNS服务器所管理的,

DNS 的主机名对应 IP 的查询流程:约略了解了 FQDN 的 domain name 与 hostname 之后,接下来谈谈DNS的阶层架构和查询原理:

整个DNS系统最上方是. (小数点)这个DNS服务器(称为root),

一般最上层领域名 (Generic TLDs, gTLD):例如 , , .gov 等等

国码最上层领域名 (Country code TLDs, ccTLD):例如 .tw, .uk, .jp, 等

此后的上述六大一般上层域名开放了后,还有asia,info,jobs等领域名的开放,此外某些国家也能够有自己的最上层域名,因此就有所谓的ccTLD了,这样的好处是:自己国

家内有最上层的ccTLD,所以如果有domainname的需求,则只要想自己的国家申请即可,不需要再到最上层去申请了,

授权与分层负责:TLD是不能随便自己设定的,必须要得向上层ISP申请领域名的授权才行,例如cn,管理这个领域名的主机在中国,但是cn这部服务器必须要向root(.)注册

领域名查询授权才行,还有就是DNS 系统是以所谓的阶层式的管理,所以cn只记录edu的这个领域的机器,而例如ksu.edu这部机器则是直接授权交给edu那部机器

去管理的,也就是说每个上一层的DNS服务器所记录的信息只有下一层的主机名而已,至于再下一层,则直接授权给下层的某部主机来管理的,DNS就是这样管理的

这样的好处就是下层Client端如果有问题,只要询问上一层的DNS server即可,不需要跨越上层的,除错比较简单

透过 DNS 查询主机名 IP 的流程

当浏览器输入网址时,你的计算机就会依据/etc/resolv.conf这个档案所提供的DNS的IP去进行联机查询了, 那部DNS收到用户的请求,先查看本身有没有记录,若无则向. 查询

由于DNS是阶层式的架构,每部主机都会管理自己辖下的主机名解译而已,因此就无法直接回报给客户端,而是向最顶层的.(root)的服务器查询相关IP信息,但是root只记录

了cn的信息(因为只有cn向.注册而已), 此时他会把cn的地址在哪里,接着又到 去查询,而这部机器仅仅管理.edu,所以只会告诉你.edu.tw 这个网域的主机那里查询

这样以此类推到.ksu.edu 服务器查询才会找到我要的那部主机名www.ksu.edu 的 IP,接着查询到了之后,会保留一份查询的结果在自己的暂存内存当中,以便下次

的相同要求,最后将结果回报给client端,当然,那个记忆在cache当中的数据,其实是有时间的,当过了DNS设定记忆的时间(通常24小时),那么该记录就会被释放了

整个分层查询的流程就是这样,总是得要先经过 . 来向下一层进行查询,最终总是能得到答案的。这样分层的好处是:

主机名修改的仅需自己的DNS更动即可,不需要通知其他人,如果原始 DNS 的主机名与 IP 对应却修改了,此时若有人再次查询,则会从快取内的取出档案,通常有效时间

是数十分钟到三天之内。因此修改了一个 domain name 之后,可能要 2 ~ 3 天后才能全面的启用的缘故,可持续的向下授权(子领域名授权),那需不需要架设DNS服务器呢?

其实只要主机名合法即可,不见得需要架设 DNS 的。透过 dig命令可以查询DNS的查询流程,查询每个阶段的DNS服务器有几部,使用dig这个命令来追踪(+trace)能够

达到这个目的 dig +trace www.ksu.edu.tw,最终的结果有找到 A (Address) 是 120.114.100.101

DNS 使用的 port number : DNS是网络的查询,且开放的端口时53端口,可以查看/etc/services这个档案,通常DNS查询的时候,是以udp这个较快速的数据传输协议来

查询的,万一没有查询到信息时,就会再以tcp这个协议来重新查询的,所以启动DNS的daemon就是named,会同时启动tcp及udp的port53,记得防火墙要放行tcp和udp53

合法 DNS 的关键:申请领域查询授权

DNS服务器的架设不像其他的服务器一样,架设好之后就查得到,需要向上层领域注册取得合法的领域查询授权,需要申请一个合法的主机名需要注册,注册需要花钱

注册取得的资料有两种,一种是FQDN(主机名),一种是申请领域查询权,所谓FQDN就是我们只需要主机名即可,详细的设定就由ISP帮我们搞定,

那部 www.ksu.edu 的详细主机名对应 IP 的数据就是请管理 .ksu.edu 那个领域的服务器搞定的,那么领域查询授权指的是.ksu.edu 必须要向 .edu 那部主机注

册申请领域授权,因此,未来有任何.ksu.edu 的要求时,都会交由.ksu.edu去处理,此时我们就要架设DNS服务器设定为.ksu.edu 相关的主机名对应才行,

也就是说,上层必须要授权下层工作,那么下层才有权利去工作,必须向你上层请示才行,如果你要架设 DNS ,而且是可以连上 Internet 上面的 DNS 时,你就必须要透过

『上层 DNS 服务器的授权』才行!

要让你的主机名对应 IP 且让其他计算机都可以查询的到,你有两种方式:

1. 上层 DNS 授权领域查询权,让你自己设定 DNS 服务器,或者是;

2. 直接请上层 DNS 服务器来帮你设定主机名对应!

拥有领域查询权后,所有的主机名信息都以自己为准,与上层无关,在向上层ISP申请DNS领域查询授权的时候,ISP会要你填写(1)你的DNS服务器名称以及(2)该服务器IP地址

既然已经在 ISP 就填写了主机名与 IP 的对应了,我的DNS挂点了,在ISP上面的主机就会查不到对应的IP了,因为上层DNS服务器只会告诉你要查询.vbird请到

dns.vbird(NS)去查,这个管理者的IP是【140.116.1.1】,但是这笔记录只是告诉我们要去找下一个服务器找,并不是最终的A(IP Address)的答案,所以你自己得去

找对应的主机,有几种结果会导致dns.vbrd的IP找不到,或者最终的IP与上层记录的结果不同,那就是:

1. dns.vbird 服务器挂点时: 如果 dns.vbird 这部主机挂点,那么在上图显示『查询』箭头的步骤会被中断,因此就会出现『联机不到 dns.vbird 的 IP』的结果

2. dns.vbird 服务器内的数据库忘记补上数据时,如果自己的服务器数据库中,忘记加上dns.vbird 的记录时,最终的结果还是会显示『找不到该服务器的 IP』

3.  dns.vbird 服务器内的数据库数据编写不一致时: 如果是在自己服务器的数据库内的 dns.vbird 所记录的 IP 与 上层服务器 的不同,最终的结果会以本机的记录为准

总之,你在 ISP 上面填写的主机名只是一个参考用的,最终还是要在你自己 DNS 服务器当中设定好才行,还有就是要让ISP上面的DNS服务器主机名与自己的数据库主机名

一致。

主机名交由 ISP 代管还是自己设定 DNS 服务器:申请主机名或域名主要有两种方式,就是刚刚上头提到的 DNS 授权,或者是直接交给 ISP 来管理,交给ISP管理就可以称

为是域名代管,当然如果你是学校,企业内部的单位,那么还是得请你向上层DNS主机的负责人要求自己管理域名,总之你只有两种选择,要么请上层设定好hostname对应IP

,要么请他直接将某个domain name 段授权给你作为DNS的主要管理网域,自己架设DNS之后,会多出一个port的监听端口,不太安全,而且,由于因特网现在都是透过主机

名在联机,在了解上面谈到的主机名查询流程后, 你会发现,DNS 设定错误是很要命的!因为你的主机名再也找不到了。

需要架设 DNS 的时机:公司有几十部的网络Server,而这些Server都是挂载你的公司网域之下的,这个时候就要架设了,还有就是你会时常修改你Server的名字,或者是你的

Server有随时增加的可能性与变动性

不需要架设 DNS 的时机:网络中的Server比较少,直接向上层DNS主机管理员帮你设定好Hostname的对应,你对DNS的认识不足,架设错误反而会使网络不通

DNS 数据库的记录:正解, 反解, Zone 的意义

关于  .ksu.edu那部DNS服务器内的记录信息我们可以称呼为数据库,而在数据库里面针对每个要解析的领域(domain),我们称为一个区域(zone),那么有哪些要解析的领域呢?

基本上,有从主机名查到IP的流程,也可以从IP反查到主机名的方式,因为最早前DNS的任务就是要将主机名解析为IP,因此:

从主机名查询到IP的流程称为:正解

从IP反解到主机名的流程称为:反解

不管是正解还是反解,每个领域的记录就是一个区域(zone),例如DNS服务器管理的就是*.ksu.edu 这个领域的查询权,任何想要知道*.ksu.edu 主机名的 IP 都得向

dns.ksu.edu这部DNS服务器查询,此时.ksu.edu 就是一个『正解的领域』,而此时这个环境中有几个Class C的子域,例如 120.114.140.0/24,如果这254个可用IP

都要设定主机名,那么这个120.114.140.0/24 就是一个『反解的领域』! 另外,每一部 DNS 服务器都可以管理多个领域,不管是正解还是反解。

正解的设定权以及 DNS 正解 zone 记录的标志: 因为国际INTERNIC 已经定义出 gTLD 以及 ccTLD 了,所以你不能自定义例如 centos.vbird 这种网域,还是要符合上层DNS给予

的领域范围才行,例如*

正解的重点在由主机名查询到 IP,而且每部DNS服务器还是得要定义清楚,同时,你可能还需要架设master/slave 架构的 DNS 环境,因此,正解zone通常具有底下几个标志:

SOA:就是开始验证 (Start of Authority) 的缩写

NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思

A:就是地址 (Address) 的缩写,后面记录的是 IP 的对应 (最重要)

反解的设定权以及 DNS 反解 zone 记录的标志: 反解是由IP找到主机名,因此重点是IP的所有人是谁,因为 IP 都是 INTERNIC 发放给各家 ISP 的,而且我们也知道,IP 可不能乱设

定(路由问题),所以,能够设定反解的就只有IP的拥有人,亦即你的 ISP 才有权力设定反解的,你不能使用向ISP取得的IP拿来自己设定反解,除非你取得的是整个Class C以上

等级的IP网段,那你的 ISP 才有可能给你 IP 反解授权。否则,若有反解的需求,就得要向你的直属上层 ISP 申请才行

反解的zone主要记录的信息除了服务器必备的NS以及SOA之外,重要的就是:PTR 后面记录的数据就是反解到主机名

每部 DNS 都需要的正解 zone: hint:我们知道正解或反解都可以称为一个zone了,那有没有哪个zone是特别重要的?有的,那就是. (小数点),当DNS服务器在自己的数据库中

找不到所需的信息,一定会去找. 所以就要知道.在哪里的记录zone才行,这个记录. 的zone的类型,就被我们称为hint类型,这几乎是每个 DNS 服务器都得要知道的 zone 

所以说,一部简单的正解 DNS 服务器,基本上就要有两个 zone 才行,一个是hint ,一个是关于自己领域的正解 zone。例如,至少就要有这两个 zone:

hint (root):记录 . 的 zone;

vbird:记录 .vbird 这个正解的 zone。

你会发现我没有 vbird 这个 domain 所属 IP 的反解 zone ,为什么呢? 简单的说,就是因为反解需要要求 IP 协议的上层来设定才行

正反解是否一定要成对?

通常都是只有正解的设定需求而已,不过不用担心因为使用ADSL上网的话,那么ISP已经帮你设定好反解了,例如:211.74.253.91 这个 seednet 的浮动式 IP 反查的结果会得

到211-74-253-91.adsl.dynamic.seed.tw. 这样的主机名,所以在一般我们自行申请领域名的时候,你只要担心正解的设定即可, 不然的话,反正反解的授权根本也不会

开放给你,你自己设定得很高兴也没有用呀。

事实上,需要正反解成对需求的大概仅有 mail server 才需要,由于目前网络宽带老是被垃圾,广告邮件占光,所以 Internet 的社会对于合法的 mail server 规

定也就越来越严格。如果你想要架设 mail server 时, 最好具有固定 IP ,这样才能,向你的 ISP 要求设定反解

DNS 数据库的类型:hint, master/slave 架构:现在ISP申请的时候需要你填写两部DNS服务器的IP,因为要作为备份之用,如果是两台,那么在网络上会随机取得一部,所以这

两台DNS服务器的内容就得要完全一模一样,否则,由于是随机找到DNS来询问,因此若数据不同步,很可能造成其他用户无法取得正确数据的问题

为了解决这个问题,因此在 . (root) 这个 hint 类型的数据库档案外,还有两种基本类型,分别是 Master (主人、主要) 数据库与 Slave (奴隶、次要) 数据库类型

这个 Master/Slave 就是要用来解决不同 DNS 服务器上面的数据同步问题的。 所以底下让我们来聊聊 Master/Slave 

Master: 这种类型的DNS数据库中,里面所有的主机名相关信息都需要管理员自己动手修改与设定,设定完毕还要重新启动DNS服务去读取正确的数据库内容,才算完成数据库

更新,同时还要能够提供数据库内容给slave的DNS服务器

Slave: Slave 必须要与 Master 相互搭配,若以.ksu.edu 的例子来说,如果必须要有三部主机提供DNS服务,且三部内容相同,那么我只要指定一部服务器为

Master ,其他两部为该 Master 的 Slave 服务器, 那么当要修改一笔名称对应时, 我只要手动更改 Master 那部机器的配置文件, 然后,重新启动 BIND 这个服务后,其他两部Slave

就会自动的被通知更新了,这样一来,在维护上面可就轻松写意的多了,如果你设定 Master/Slave 架构时, 你的Master 主机必须要限制只有某些特定 IP 的主机能够取得你

Master 主机的正反解数据库权限才好,所以,上面才会提到Master/Slave 必须要互相搭配才行。多部DNS当中,领域名的查询是『先抢先赢』的状态,我们不会晓得哪一部

主机的数据会先被查询,为了提供良好 DNS 服务,每部 DNS 主机都要正常工作才好!而且,每部 DNS 服务器的数据库内容需要完全一致,否则就会造成客户端找到的 IP 是错误的

Master / Slave 数据的同步化过程:Slave 是需要更新来自 Master 的数据, 所以当然 Slave 在设定之初就需要存在 Master 才行,不论 Master 还是 Slave 的数据库,

都会有一个代表该数据库新旧的『序号』,这个序号数值的大小,是会影响是否要更新的动作,至于更新的方式主要有两种:

Master 主动告知:例如在 Master 在修改了数据库内容,并且加大数据库序号后, 重新启动 DNS 服务,那 master 会主动告知 slave 来更新数据库, 此时就能够达成数据同步;

由 Slave 主动提出要求:基本上, Slave 会定时的向 Master 察看数据库的序号, 当发现 Master 数据库的序号比 Slave 自己的序号还要大 (代表比较新), 那么 Slave 就会开始更新

设计数据库的序号最重要的目的就是让 master/slave 数据的同步化,那我们也知道 slave 会向 master 提出数据库更新的需求, 问题是,多久提出一次更新,如果该次更新时由于网

络问题,所以没有查询到 master 的序号 (亦即更新失败),那隔多久会重新更新一次?这个与 SOA 的标志有关,如果你想要架设 Master/Slave 的 DNS 架构时,两部主机

(Master/Slave) 都需要你能够掌控才行

Client 端的设定:相关配置文件

/etc/hosts :这个是最早的 hostname 对应 IP 的档案;

/etc/resolv.conf :这个重要!就是 ISP 的 DNS 服务器 IP 记录处;

/etc/nsswitch.conf:这个档案则是在『决定』先要使用 /etc/hosts 还是/etc/resolv.conf 的设定,一般先搜寻/etc/hosts,可以从这个文件中查看到先后次序,接着了解一下

/etc/resolv.conf 的内容,假设使用的是 hinet 的 168.95.1.1 这部 DNS 服务器 ,所以你应该这样写:

vim /etc/resolv.conf

nameserver 168.95.1.1

nameserver 139.175.10.20

设定多个DNS服务器的IP是为了当第一部DNS挂点时,我们客户端可以使用第二部(上述是 139.175.10.20) 来进行查询,这多少有点像DNS备援功能,通常建议至少填写两部

DNS服务器的IP,在网络正常的情况下,永远只有第一部 DNS 服务器会被使用来查询,其他的设定值只是在第一部出问题时才会被使用。

例题: 当你的主机使用DHCP取得IP时,系统会主动的使用DHCP服务器传来的数据进行系统配置文件的修订,因此,你必须告诉系统,不要使用DHCP传来的服务器设定值

你的要在/etc/sysconfig/network-scripts/ifcfg-eth0 等相关档案内,增加一行:『PEERDNS=no』,然后重新启动网络即可。还有就是建议将NetworkManager 服务关闭掉。

DNS 的正、反解查询指令: host, nslookup, dig:测试 DNS 的程序

host :  host -l domain [server], host [-a] FQDN [server]

选项与参数:

-a :代表列出该主机所有的相关信息,包括 IP、TTL 与除错讯息等等

-l :若后面接的那个 domain 设定允许 allow-transfer 时,则列出该domain所管理的所有主机名对应数据

# 1. 使用默认值来查出 linux.vbird 的 IP  host linux.vbird

# 2. 查出 linux.vbird 的所有重要参数  host -a linux.vbird

# 3. 强制以 139.175.10.20 这部 DNS 主机来查询 host linux.vbird 139.175.10.20

# 4. 找出 vbird 领域的所有主机对应 host -l vbird  此时会出现无法响应,链接拒绝,这样的响应是因为管理 vbird 领域的 DNS 并不许我们的领域查询,

毕竟我们不是 vbird 的系统管理员,当然没有权限可以读取整个vbird 的领域设定,这个『 host -l 』是用在自己的 DNS 服务器上,服务器设定后,使用这个选项就能够读取

相关的数据了,

nslookup:nslookup [FQDN] [server]

1. 可以直接在 nslookup 加上待查询的主机名或者是 IP ,[server] 可有可无;

2. 如果在 nslookup 后面没有加上任何主机名或 IP ,那将进入 nslookup的查询功能,

在 nslookup 的查询功能当中,可以输入其他参数来进行特殊查询,例如: set type=any :列出所有的信息『正解方面配置文件』,set type=mx :列出与 mx 相关的信息!

# 1. 直接搜寻 mail.ksu.edu.tw 的 IP 信息 nslookup mail.ksu.edu.tw

nslookup 可单纯的将 hostname 与 IP 对应列出而已,不过,还是会将查询的 DNS 主机的 IP 列出来的

nslookup <==进入 nslookup 查询画面

> 120.114.100.20 <==执行反解的查询

> www.ksu.edu.tw <==执行正解的查询

dig (未来的主流,请爱用他!)

dig [options] FQDN [@server]  选项与参数:  @server :如果不以 /etc/resolv.conf 的设定来作为 DNS 查询,可在此填入其他的 IP

options:相关的参数很多,主要有 +trace, -t type 以及 -x 三者最常用

+trace :就是从 . 开始追踪,

-t type:查询的数据主要有 mx, ns, soa 等类型,

-x :查询反解信息,非常重要的项目

# 1. 使用默认值查询 linux.vbi

本文标签: 主机名服务器dns