主机名:DNS服务器

来源:互联网 发布:it unbelievable 编辑:程序博客网 时间:2024/06/08 17:50

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.net.cn 这个URL的情况为:cn是domain 而net则是主机名,而net.cn为domain,则michael则成为了hostname,以此类推,如果www是主机名,而domain

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

这样以此类推到.ksu.edu.cn 服务器查询才会找到我要的那部主机名www.ksu.edu.cn 的 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.cn 的详细主机名对应 IP 的数据就是请管理 .ksu.edu.cn 那个领域的服务器搞定的,那么领域查询授权指的是.ksu.edu.cn 必须要向 .edu.cn 那部主机注

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

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

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

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

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

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

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

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

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

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

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

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

3.  dns.vbird.org 服务器内的数据库数据编写不一致时: 如果是在自己服务器的数据库内的 dns.vbird.org 所记录的 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.cn那部DNS服务器内的记录信息我们可以称呼为数据库,而在数据库里面针对每个要解析的领域(domain),我们称为一个区域(zone),那么有哪些要解析的领域呢?

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

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

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

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

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

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

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

的领域范围才行,例如*.cn

正解的重点在由主机名查询到 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.org:记录 .vbird.org 这个正解的 zone。

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

正反解是否一定要成对?

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

到211-74-253-91.adsl.dynamic.seed.net.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.cn 的例子来说,如果必须要有三部主机提供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.org 的 IP  host linux.vbird.org

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

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

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

毕竟我们不是 vbird.org 的系统管理员,当然没有权限可以读取整个vbird.org 的领域设定,这个『 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.vbird.org 吧

在这个范例当中,我们可以看到整个显示出的讯息包括有几个部分:

QUESTION(问题):  显示所要查询的内容,因为我们是查询 linux.vbird.org的 IP,所以这里显示 A (Address);

ANSWER(回答): 依据刚刚的 QUESTION 去查询所得到的结果,答案就是回答IP 啊!

AUTHORITY(验证):由这里我们可以知道 linux.vbird.org 是由哪部 DNS服务器所提供的答案

# 2. 查询 linux.vbird.org 的 SOA 相关信息吧! dig -t soa linux.vbird.org  你也可以透过『 -t type 』 的功能去查询其他服务器的设定值

# 3. 查询 120.114.100.20 的反解信息结果 dig -x 120.114.100.20,你现在要知道的是,反解的查询领域名,跟正解不太一样即可,尤其是那个怪异的 in-addr.arpa. 结尾的数据

查询领域管理者相关信息: whois:如果你想要知道整个领域的设定,使用的是『 host -l 领域名 』去查而如果想要知道的是【这个领域是谁管得】的信息?whois是由jwhois这个软

件提供的,因此,如果找不到 whois 时,请用 yum 去安装这个软件, whois domainname这个指令可以查询到当初注册这个domain的用户的相关信息,不过,由于近年来很多

网络信息安全的问题,这个whois所提供的信息真的是太详细了,为了保护使用者的隐私权,目前这个 whois 所查询到的信息已经不见得是完全正确的了,而且,在显示出 whois

的信息之前,还会有一段宣告事项的告知.

DNS 服务器的软件、种类与 cache only DNS 服务器设定

谈一谈最简单的仅有快取的 DNS 服务器(Caching only DNS server) 

架设 DNS 所需要的软件  rpm -qa | grep '^bind'  安装比较重要的是那个『 bind-chroot 』,chroot代表的是【change to root(根目录)】的意思,root代表的就是根目录,早期的

bind默认将程序启动在/var/named当中,但是该程序可以在根目录下的其他目录到处转移,因此若bind的程序有问题,则该程序会造成整个系统的危害,为了避免这个问题

所以我们将某个目录指定为bind程序的根目录,由于已经是根目录,所以 bind 便不能离开该目录,若该程序被攻击,了不起也是在某个特定目录下搞破坏而已,CentOS默认将

bind锁在/var/named/chroot 目录中。

我们主程序是由 bind, bind-chroot 所提供,每部DNS服务都要有的 . (root) 这个 zone file 是由bind所提供的

BIND 的默认路径设定与 chroot:要架设BIND需要设定的数据主要有两个数据要处理:

BIND 本身的配置文件: 主要规范主机的设定、zone file 的所在、权限的设定等;

正反解数据库档案 (zone file):记录主机名与 IP 对应的等

BIND 的配置文件为 /etc/named.conf,在这个档案里面可以规范zone file的完整档名,也就是说你的zone file其实是由 /etc/named.conf 所指定的,所以zone file档名可以随便取

只要 /etc/named.conf 内规范为正确即可,CentOS6的默认目录是这样的:

/etc/named.conf :这就是我们的主配置文件啦!

/etc/sysconfig/named :是否启动 chroot 及额外的参数,就由这个档案控制;

/var/named/ :数据库档案默认放置在这个目录

/var/run/named : named 这支程序执行时默认放置 pid-file 在此目录内

/etc/sysconfig/named 与 chroot 环境,一般默认就已经自动将你的bind相关程序给他chroot了,chroot所指定的目录记录在/etc/sysconfig/named里面

cat /etc/sysconfig/named ==》ROOTDIR=/var/named/chroot 意思是要将named给他chroot,并且变更的根目录为/var/named/chroot,由于根目录已经被变更到

/var/named/chroot 了,但 bind 的相关程序是需要 /etc, /var/named, /var/run ...等目录的,所以实际上咱们 bind 的相关程序所需要的所有数据会是在:

/var/named/chroot/etc/named.conf

/var/named/chroot/var/named/zone_file1

/var/named/chroot/var/named/zone_file

/var/named/chroot/var/run/named/

新版本的 CentOS 6.x 已经将 chroot 所需要使用到的目录, 透过 mount --bind 的功能进行目录链接了,参考/etc/init.d/named内容,例如我们需要的/var/named在启动脚本中透过

mount --bind /var/named /var/named/chroot/var/named 进行目录绑定,所以在CentOS 6.x 当中,你根本无须切换至 /var/named/chroot/ 了,使用正规的目录即可

单纯的 cache-only DNS 服务器与 forwarding 功能:先简单介绍单纯修改配置文件,而不必设计zone file的环境,那就是不具有自己正反解zone的仅进行快取的DNS服务器

什么是 cache-only 与 forwarding DNS 服务器?

有个只需要 . 这个 zone file 的简单 DNS 服务器,我们称之为没有自己公开的DNS数据库的服务器cache-only(仅快取)DNS server,这个DNS server只有快取搜索结果的功能

也就是说,他本身没有主机名与IP正反解的配置文件,完全是由对外的查询来提供他的数据源。如果连. 都不想要,那就得要指定一个上层DNS服务器作为你的forwarding

(转递)目标,将原本自己要往. 查询的任务,丢给上层DNS服务器去烦,如此以来这部具有forwarding功能的DNS服务器,甚至连 . 都不需要了,因为. 有记录在上层DNS上头了

cache only的DNS并不存在数据库,因此不论谁来查询数据,这部DNS一律可以从自己的快取及. 找起,那如果具有 forwarding 功能呢?那即使你的 DNS 具有 . 这个 zone file,

这部 DNS 还是会将查询权『委请』上层 DNS 查询的,这部 DNS 服务器当场变成客户端了。那么既然forwarding机制甚至不需要.的zone,那为什么要架设这样的DNS呢?

什么时候有架设 cache-only DNS 的需求?

在某些公司里头,为了预防员工利用公司的网络资源作自己的事情,所以都会针对 Internet 的联机作比较严格的限制。当然啦,连 port 53 这个 DNS 会用到的

port 也可能会被挡在防火墙之外的~这个时候, 你可以在『防火墙的那部机器上面,加装一个 cache-only 的 DNS 服务! 就是你自己利用自己的防火墙主机上的 DNS 服务去

帮你的 Client 端解译 hostname <--> IP,因为防火墙主机可以设定放行自己的DNS功能,而Client端就设定该防火墙IP为DNS服务器的IP即可,这样就可以取得主机名与IP

的转义了,所以,通常架设 cache only DNS 服务器大都是为了系统安全

实际设定 cache-only DNS server:只需要.的zone支持即可,所以只要设定一个档案(就是named.conf主配置文件)即可,cache-only 只要加上个 forwarders 的设定即可指定

forwarding 的数据

编辑主要配置文件: /etc/named.conf

虽然我们具有chroot的环境,不过由于CentOS6.0已经透过启动脚本帮我们进行档案与目录的挂载链接,所以请你直接修改/etc/named.conf即可,不要去/var/named/chroot/etc

/named.conf 修改,这个档案主要是定义跟服务器环境有关的设定,以及各个 zone 的领域及数据库所在文件名,在这个案例当中,因为使用了 forwarding 的机制,所以这个

cache-onlyDNS 服务器并没有 zone (连 . 都没有),所以我们只要设定好跟服务器有关的设定即可,这个档案设定的时候请注意:

批注数据是放置在两条斜线『 // 』后面接的数据

每个段落之后都需要以分号『 ; 』来做为结尾!

cp /etc/named.conf /etc/named.conf.raw 备份

vim /etc/named.conf  // 在预设的情况下,这个档案会去读取 /etc/named.rfc1912.zones 这个领域定义档  // 所以请记得要修改成底下的样式啊!

options {

listen-on port 53 { any; };  //可不设定,代表全部接受

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; };  //可不设定,代表全部接受

recursion yes;  //将自己视为客户端的一种查询模式

forward only;  //可暂时不设定

forwarders {  //是重点!

168.95.1.1;  //先用中华电信的 DNS 当上层

139.175.10.20;  //再用 seednet 当上层

};

};
//最终记得要结尾符号!

将大部分的数据都予以删除,只将少部分保留的数据加以小部分的修订而已,在named.conf的结构中,与服务器环境有关的是由 options 这个项目内容设定的,因为 options 里面

还有很多子参数, 所以就以大括号 { } 包起来,至于 options 内的子参数在上面提到的较重要的项目简单叙述如下:

listen-on port 53 { any; }; 监听在这部主机系统上面的哪个网络接口,预设是监听在 localhost,不合理,所以需要改成any对整个主机系统的所有接口进行监听

directory "/var/named"; 如果此档案底下有规范到正、反解的 zone file 档名时,该 档名预设应该放置在哪个目录底下,预设放置到 /var/named/下,由于 chroot 的关系,最终这些

数据库档案会被主动链接到/var/named/chroot/var/named/ 这个目录

dump-file, statistics-file, memstatistics-file  与 named 这个服务有关的许多统计信息

allow-query { any; }; 针对客户端,预设仅针对localhost开放,我们要改成对所有的用户开放,(当然啦,防火墙也得放行才行)。不过,默认 DNS 就是对所有用户放行

forward only ;这个设定让你的DNS服务器仅进行forward,即使有. 这个zone file的设定,也不会使用.的数据,只会将查询权交给上层DNS服务器而已,是cache only DNS最常

见的设定。

forwarders { 168.95.1.1; 139.175.10.20; } ; 既然有forwardonly,那么到底要对那部上层DNS服务器进行转递,那就是forwarders,防止上层挂点,可设定多部上层DNS服务器

一个 forwarder 服务器的 IP 都需要有『 ; 』来做为结尾

设定完成后启动 named 并观察服务的埠口 /etc/init.d/named start         chkconfig named on

netstat -utlnp | grep named 查看用了多少端口  我们知道 DNS 会同时启用 UDP/TCP 的 port 53,而且是针对所有接口,不过,怎么会有port 953且针对本机来监听呢?其实那么

named的远程控制功能,称为远程名称解析服务控制功能,预设的情况下,仅有本机可以针对 rndc来控制

检查 /var/log/messages 的内容讯息 (极重要!)  tail -n 30 /var/log/messages | grep named,如果看到couldn't add command channel 127.0.0.1#953: not found错误信息则表示

你还需要加入rndc key,后面的 利用 RNDC指令管理 DNS 服务器 的介绍,将他加入你的 named.conf 中

测试: dig www.google.com @127.0.0.1 这个指令执行看看,如果找到google的IP,并且输出数据的最底下显示『 SERVER: 127.0.0.1#53(127.0.0.1) 』的字样,那就代表

应该是成功了

特别说明:Forwarders 的好处与问题分析

利用 Forwarder 的功能来增进效能的理论:  因为 forwarder 服务器里面有较多的快取记录了, 所以包括 forwarder 本身,以及所有向这部 forwarder 要求数据的 DNS 服务器,

都能够减少往 . 查询的机会, 因此速度当然增加

利用 Forwarder 反而会使整体的效能降低: 这是因为当主 DNS 本身的『业务量』就很繁忙的时候,那么你的 cache only DNS 服务器还向他要求数据,而太多的下层DNS还向

他要求数据,所以他的查询速度会变慢,因为查询速度变慢了,而你的 cache only server 又是向他提出要求的,所以自然两边的查询速度就会同步下降

不过总的来说,如果上层的 DNS 速度很快的话,那么他被设定为 forwarder 时,或许真的可以增加不少效能

DNS 服务器的详细设定

1. DNS 服务器的架设需要上层 DNS 的授权才可以成为合法的 DNS 服务器(否则只是练功);

2. 配置文件位置:目前 bind 程序已进行 chroot,相关目录可参考/etc/sysconfig/named;

3. named 主要配置文件是 /etc/named.conf;

4. 每个正、反解领域都需要一个数据库档案,而文件名则是由/etc/named.conf 所设定

5. 当 DNS 查询时,若本身没有数据库档案,则前往 root (.) 或 forwarders服务器查询;

6. named 是否启动成功务必要查阅 /var/log/messages 内的信息

因为我们没有向上层ISP注册合法的领域名,所以当然就没有权利架设合法的DNS服务器了,而由于担心我们的DNS服务器会与外部因特网环境相互干扰,所以这里以一个

centos.vbird 的领域名来架设 DNS 服务器,如此一来咱们就可以好好的玩一玩自己局域网络内的 DNS 啦

正解文件记录的数据 (Resource Record, RR)

正解文件资源记录 (resource record, RR) 格式,当使用dig指令输出结果中,可以发现输出的数据格式似乎是固定的,查询 www.ksu.edu.tw 的 IP 时,输出的结果为:

主要查询的是A的标志,在认证阶段,则是提供ksu.edu.cn的 NS 服务器为哪一部的意思。格式非常接近,只是 A 后面接 IP,而 NS 后面接主机名而已,输出的格式简化成为如下的

说明:

[domain]        [ttl]                         IN                [[RR type]           [RR data]]

[待查数据]    [暂存时间(秒)]      IN                [[资源类型]          [资源内容]]

上表中,关键词 IN 是固定的, 而 RR type 与 RR data 则是互有关连性的,例如刚刚提过的A就是接IP而不是主机名的,此外,在domain部分,若可能的话,请尽量使用 FQDN

,亦即是主机名结尾加上一个小数点的 (.) 就被称为 FQDN 了,例如刚刚 dig www.ksu.edu.tw 的输出结果中,在答案阶段时,搜寻的主机名会变成www.ksu.edu.tw. 后面有个小数点

至于 ttl 就是 time to live 的缩写,意思就是当这笔记录被其他DNS服务器查询到后,这个记录会保持在对方 DNS 服务器的快取中,保持多少秒钟的意思。

由于 ttl 可由特定的参数来统一控管,因此在 RR 的记录格式中,通常这个 ttl 的字段是可以忽略的,我们将正解文件的 RR 记录格式汇整如下:

常见的正解文件 RR 相关信息

[domain]    [[RR type]    [RR data]]

主机名.         A                 IPv4 的 IP 地址

主机名.       AAAA           IPv6 的 IP 地址

领域名.        NS              管理这个领域名的服务器主机名字.

领域名.        SOA            管理这个领域名的七个重要参数(容后说明)

领域名.        MX              顺序数字  接收邮件的服务器主机名字

主机别名.    GNAME     实际代表这个主机别名的主机名字。

接下来设定DNS,包括 ksu.edu.tw 这个领域 (domain, zone),以及 www.ksu.edu.tw 这个主机名 (FQDN) 的查询结果来跟大家解释每个 RR 记录的信息为何

A, AAAA :查询 IP 的记录 :A的RR类型实在查询某个主机名的IP,也是最长被查询的一个RR标志  举例来说,要找到 www.ksu.edu.tw 的 A 的话,就是这样查:

dig [-t a] www.ksu.edu.tw

结果 www.ksu.edu.tw.   2987    IN   A     120.114.100.101  这部主机的 IP 就是,指令中的【-t a】可以不加,而最左边主机名结尾都会有小数点

左边是主机名,当然,你也可以让你的 domain 拥有一个 A 的标志,例如『 dig google.com 』也能找到 IP,再次强调主机名如果是全名,结尾部分务必加上小数点,

如果你的 IP 设定的是 IPv6 的话,那么查询就得要使用 aaaa 类型才行

NS :查询管理领域名 (zone) 的服务器主机名

如果你想要知道 www.ksu.edu.tw 的这笔记录是由哪部 DNS 服务器提供的,那就得要使用 NS (NameServer) 的 RR 类型标志来查询,不过,由于 NS 是管理整个领域的

因此, 你得要查询的目标将得输入 domain, 亦即 ksu.edu.tw 才行

dns1.ksu.edu.tw.           577            IN              A                  120.114.50.1

# 除了列出 NS 是哪部服务器之外,该服务器的 IP 也会额外提供,  NS 后面会加服务器名称,而这个服务器的 IP 也会额外提供才对!因此 NS 经常伴随 A 的标志啊!这样你才能到

NS 去查询数据

SOA :查询管理领域名的服务器管理信息

如果你有多部 DNS 服务器管理同一个领域名时,那么最好使用 master/slave 的方式来进行管理。既然要这样管理, 那就得要宣告被管理的 zone file 是如何进行传输的

,此时就得要 SOA (Start Of Authority) 的标志了。先来瞧瞧设定是怎样:

 dig -t soa ksu.edu.tw

输出结果  abuse.mail.ksu.edu.tw.

2010080369 1800 900 604800 86400  输出结果是同一行

SOA 主要是与领域有关,所以前面当然要写 ksu.edu.tw 这个领域名,而 SOA 后面共会接七个参数,这七个参数的意义依序是:

1. Master DNS 服务器主机名: 这个领域主要是哪部 DNS 作为 master 的意思。在本例中, dns1.ksu.edu.tw 为 ksu.edu.tw 这个领域的主要 DNS 服务器

2. 管理员的 email: 由于 @ 在数据库档案中是有特别意义的,因此这里就将abuse@mail.ksu.edu.tw 改写成 abuse.mail.ksu.edu.tw 

3. 序号 (Serial):序号代表的是数据库档案的新旧,序号越大就代表越新,当slave要判断是否从主matster下载新数据库时,就是以序号判断,序号通常使用日期格式 

YYYYMMDDNU来记忆,例如2010/08/03当天的第69次更新的感觉,不过,序号不可大于2的32次方,以及必须小于 4294967296 才行

4. 更新频率(Refresh): slave会向master要求数据更新的判断? 就是这数值定义的,1800就表示每1800秒进行一次slave向master要求更新,每次更新slave序号大才会下载更新

5. 失败重新尝试时间:如果更新失败,会在多久的时间内slave尝试重新联机大master,也就是说每1800秒slave会主动向maser联机,如果失败,再过900秒,再次尝试更新

6. 失效时间:如果一直失败,持续到这个设定值,那么slave将不再继续尝试联机,并且尝试删除这份下载zonfile信息,意思就是每900尝试达到604800秒后,slave就不再尝试

7. 快取时间 (Minumum TTL):如果这个数据库 zone file 中,每笔 RR 记录都没有写到TTL快取时间的话,那么就以这个 SOA 的设定值为主。

上面这些参数会有一些限制,基本上是这样的:

Refresh >= Retry *2                  Refresh + Retry < Expire                   Expire >= Rrtry * 10                  Expire >= 7Days

通常将上述的相关数值可以设定的小一些,如果 DNS RR 是很稳定的, 为了节省带宽,则可以将 Refresh 设定的较大一些。

CNAME :设定某主机名的别名 (alias):如果不想要针对某个主机名设定A的标志,而是想通过另外一部主机名的A来规范这个新主机名时,可以使用CNAME的设定,

例如:

www.google.com.             557697                 IN                 CNAME                   www.l.google.com.

www.l.google.com.           298                        IN                      A                          72.14.203.99

意思就是当你要追查www.google.com时,请找www.1.google.com那个主机,那个主机的A就上面第二行的显示了,这个CNAME的好处是如果一个IP是给很多主机名使用的,

那么当你的IP更改时,所有的数据就得通通更新A标志才行,如果你只有一个主机名设定A,而其他的标志使用CNAME时,那么当IP更改,你只要修订一个A的标志,其他的

CNAME就跟着变动了,处理起来比较容易

MX :查询某领域名的邮件服务器主机名

MX 是 Mail eXchanger (邮件交换) 的意思,通常你的整个领域会设定一个 MX , 代表,所有寄给这个领域的 email 应该要送到后头的 email server 主机名上头才是

dig -t mx ksu.edu.tw 意思是说,当有邮件要送给ksu.edu.tw 这个领域时,则预先将信件传给mx01.ksu.edu.tw 这部邮件服务器管理,当然啦,这部 mx01.ksu.edu.tw 自然就是

管理的邮件服务器才行,MX后面接的主机名通常就是合法的mail server,而想要当MX服务器,就得要有A的标志才行~所以上表后面就会出现 mx01.ksu.edu.tw的 A

在 mx01 之前的 8 是担心邮件会遗失,因此较大型的企业会有多部这样的上层邮件服务器来预先收受信件,那么就以数字较小的那部优先,例如,如果你去查google.com

的MX标志,就会发现有5部这样的服务器

反解文件记录的 RR 数据

先来说说正解主机名的追踪方式,以www.ksu.edu.tw. 来说,整个网域的概念来看,越右边出现的名称代表网域越大,例如.(root) > tw > edu 以此类推,因此追踪时,是由大范围

找到小范围的,但是 IP 则不一样啊!以 120.114.100.101 来说好了, 120 > 114 >100 > 101 ,左边的网域最大! 与预设的DNS从右边向左边查询不一样,为了解决这个问题,所以

反解的zone就必须要将IP反过来写,而在结尾时加上上 .in-addr.arpa. 的结尾字样即可。所以,当你想要追踪反解时,那么反解的结果就会是:

dig -x 120.114.100.101

;; ANSWER SECTION:

101.100.114.120.in-addr.arpa.              3600              IN              PTR                  www.ksu.edu.cn.

上述的结果中, 我们要查询的主机名竟然变成了 IP 反转的模样!所以才称为反解嘛!而反解的标志最重要的就是 PTR 了

PTR :就是反解啊!所以是查询 IP 所对应的主机名:要进行反解时,要注意的就是zone的名称了,要将IP反转过来写,并且结尾加上 .in-addr.arpa. 才行,例如

120.114.100.0/24 这个 class C IP 网段的反解设定,就必须要写成: 100.114.120.in-addr.arpa. 这样的 zone 名称才行。而 PTR 后面接的自然就是主机名

在反解最重要的地方就是:后面的主机名尽量使用完整 FQDN,亦即加上小数点(.) ,这是因为例如100.114.120.in-addr.arpa. 为例,如果你只是填写主机名,并没有填写领域名,

那么当人家追踪你的主机名时,你的主机名会变成: www.100.114.120.in-addr.arpa. 的怪模样。 这是比较需要注意的地方,主机名的设定则通通记得是要填写 FQDN 就是了! 这样

绝对不会有问题

步骤一:DNS 的环境规划:正解、反解 zone 的预先定义案例说明

现在假设要设定DNS服务器,域名为centos.centos,且搭配的IP网段为192.168.100.0/24 这一段,因此主要的正解网域为centos.centos,而反解的网域则是192.168.100.0/24,

DNS服务器想要自己寻找.(root)而不透过forwarders的辅助,因此还得要. 的领域正解档,综合起来要设定到的档案就有底下这几个:

1.  named.conf (主要配置文件)

2.  named.centos.vbird (主要的 centos.vbird 的正解檔)

3.  named.192.168.100  (主要的 192.168.100.0/24 的反解檔)

4.  named.ca (由 bind 软件提供的 . 正解檔)

至于数据库的正、反解对应上,依据实际的测试环境,规划如下

Linux (192.168.100.254)          master.centos.vbird (NS, A)          www.centos.vbird (A)                        DNS 设置是使用 master.centos.vbird

                                                                                                                  linux.centos.vbird (CNAME)            这个DNS服务器名称,这个DNS服务器的另一个主机名是www.centos.vbird

                                                                                                                  ftp.centos.vbird (CNAME)                 其他的都是 CNAME,这样未来比较好修改。同时给予一个 MX 的标志给主

                                                                                                                  forum.centos.vbird (CNAME)           要主机名

                                                                                                                  www.centos.vbird (MX)

Linux (192.168.100.10)             slave.centos.vbird (NS, A)            clientlinux.centos.vbird(A)                未来作为 slave DNS

WinXP (192.168.1.101)                                                                       workstation.centos.vbird (A)             一部经常用来工作的工作机

WinXP (192.168.100.20)                                                                    winxp.centos.vbird (A)                        一部用来测试的Windows XP

Win7 (192.168.100.30)                                                                       win7.centos.vbird (A)                          一部用来测试的Windows 7

一个IP可以对应给多个主机名,同样一个主机名可以给予多个IP,主要是因为那部www.centos.vbird 的机器未来的用途相当的多,希望那一部主机有多个名称

以方便未来额外的规划啊。 所以就对该 IP 对应了四个主机名

步骤二:主配置文件 /etc/named.conf 的设置:目前这个案例中则必须要将forwarders相关功能取消,并加上禁止传输zone file的参数即可

至于 zone 的设定上,必须要包含上个小节谈到的三个主要的 zone,因此这个档案的任务是:

options:规范 DNS 服务器的权限 (可否查询、forward 与否等);

zone:设定出 zone (domain name) 以及 zone file 的所在 (包含master/slave/hint);

其他:设定 DNS 本机管理接口以及其相关的密钥档案 (key file)

vim /etc/named.conf

options中注意将allow-transfer { none; };  // 不许别人进行 zone 转移

zone "." IN { type hint; file "named.ca"; };

zone "centos.vbird" IN  { // 这个 zone 的名称    type master;   // 是什么类型   file "named.centos.vbird";  // 档案放在哪里 };

zone "100.168.192.in-addr.arpa" IN { type master;  file "named.192.168.100"; };

在 options 里面仅新增一个新的参数,就是 allow-transfer,意义为:是否允许来自slave DNS 对我的整个领域数据进行传送?这个设定值与

master/slave DNS 服务器之间的数据库传送有关。除非你有 slave DNS 服务器,否则这里不要开放喔!因此这里我们先设定为 none

至于在 zone 里面的设定值,主要则有底下几个:

type  该 zone 的类型,主要的类型有针对 . 的 hint,以及自己手动修改数据库档案的 master,与可自动更新数据库的 slave。

file    就是 zone file 的檔名啊!(注意 chroot 与否呦!)

反解 zone  主要就是 in-addr.arpa 这个玩意儿

步骤三:最上层 . (root) 数据库档案的设定:全世界共有 13 部管理 . 的 DNS 服务器相关的最新设定在:  ftp://rs.internic.net/domain/named.root

CentOS 6.x 内的 bind 软件已经提供了一个名为 named.ca 的档案了,鸟哥是直接使用系统提供的数据啦。这个档案的内容有点像这样:

vim /var/named/named.ca  这个档案的内容你不要修改啊~因为这个内容是 Internet 上面通用的数据, 一般来说,也不会常常变动, 所以不需要更动他,将他放置到正确的目录并改成

你所指定的档名即可啊!接下来可以看看其他正解档案

步骤四:正解数据库档案的设定

这个档案的特殊符号也得跟大家报告一下:

整个DNS是由master.centos.vbird 这部服务器管理的,而管理者的email为vbird@www.centos.vbird 这个。整个正解档最终有点像这样:

vim /var/named/named.centos.vbird  # 与整个领域相关性较高的设定包括 NS, A, MX, SOA 等标志的设定处!

$TTL  600

@                                   IN      SOA           master.centos.vbird.               vbird.www.centos.vbird. ( 2011080401 3H 15M 1W 1D ) ;

@                                   IN        NS            master.centos.vbird.               ; DNS 服务器 名称

master.centos.vbird.   IN         A              192.168.100.254                    ; DNS 服务器 IP

@                                   IN        MX           10 www.centos.vbird.             ; 领域名的邮件服务器

# 针对 192.168.100.254 这部主机的所有相关正解设定。

www.centos.vbird.      IN         A              192.168.100.254

linux.centos.vbird.      IN        CNAME   www.centos.vbird.

linux.centos.vbird.      IN        CNAME   www.centos.vbird.

ftp.centos.vbird.          IN        CNAME   www.centos.vbird.

forum.centos.vbird.    IN        CNAME   www.centos.vbird.  

# 其他几部主机的主机名正解设定。

slave.centos.vbird.    IN          A             192.168.100.10

clientlinux.centos.vbird.   IN          A             192.168.100.10

workstation.centos.vbird.  IN          A            192.168.1.101

winxp.centos.vbird.            IN          A            192.168.100.20

win7                                      IN             A          192.168.100.30       ; 这是简化的写法

再次强调,一个正解的数据库设定中,至少应该要有 $TTL, SOA, NS (与这部 NS 主机名的 A)

$TTL  为了简化每笔RR 记录的设定, 因此我们将 TTL 挪到最前面统一设定  因为DNS 服务器还在测试中,所以 TTL 写了个比较小的数值,可以存在对方 DNS 服务器的快取 600 秒

$ORIGIN  这个设定值可以重新指定zone的定义。在预设的情况下,这个正反解数据库档案中的 zone 是由 named.conf 所指定的不过,这个 zone 可以改,用 $ORIGIN 来修订

DNS文件中的. 其实加上.表示这是个完整的主机名(FQDN)  亦即是 "hostname + domain name" 了, 如果没有加上 . 的话,表示该名称仅为 "hostname" 而已

因为我们这个配置文件的 zone 是 centos.vbird, 所以上表的最后一行,只写出主机名(win7) ,因为没有小数点结尾,因此完整的 FQDN 要加上 zone,所以主机名 win7 代表的是:

win7.centos.vbird.

步骤五:反解数据库档案的设定:反解跟正解一样,还都需要 TTL, SOA, NS 等等的,但是相对于正解里面有 A,反解里面则仅有 PTR,由于反解的 zone 名称是很怪 zz.yy.xx.in-

addr.arpa.的模样,因此只要在反解里面要用到主机名时, 务必使用 FQDN 来设定,至于 192.168.100.0/24 这个网域的 DNS 反解则成为:

vim /var/named/named.192.168.100

$TTL   600

@     IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080401 3H 15M 1W 1D )

@     IN NS   master.centos.vbird.

254  IN PTR master.centos.vbird. ; 将原本的 A 改成 PTR 的标志而已

254  IN PTR www.centos.vbird. ; 这些是特定的 IP 对应

10    IN PTR www.centos.vbird.

20    IN PTR  winxp.centos.vbird.

30    IN PTR  win7.centos.vbird.

101  IN PTR  dhcp101.centos.vbird. ; 

102  IN PTR  dhcp102.centos.vbird.

200  IN PTR  dhcp200.centos.vbird.

因为我们的 zone 是 100.168.192.in-addr.arpa. 这一个, 因此 IP 的全名部分已经含有 192.168.100 了, 所以在上表当中的最左边,数值只需要存在最后一个 IP 即可。

因此 254 就代表 192.168.100.254 ,此外,为了担心 DHCP 自动分配的 IP 没有对应的主机名,所以这里也附挂了 192.168.100.{101~200} 的主机名对应

步骤六:DNS 的启动、观察与防火墙  /etc/init.d/named restart   chkconfig named on  查阅 /var/log/messages 的内容才行  tail -n 30 /var/log/messages | grep named

上面的输出讯息中,你得要特别注意有画底线的部分。包括 -t chroot_dir 是设定chroot 目录的位置, 而配置文件 (configuration) 则是 /etc/named.conf,最重要的是你的所有的 zone

(hint 类型的 . 除外) 的序号 (serial) 号码要跟你的数据库内容一致才行!而且不能够有出现『设定的档名:数字』的内容, 否则肯定就是配置文件有问题,

都处理完毕之后, 也能够透过 netstat 去查到 port 53 有在监听, 再来就是要放行人家的查询了! 所以,又得要修改防火墙,假设你还是安装之前的防火墙脚本,那么接下来就是:

vim /usr/local/virus/iptables/iptables.rule  # 找到如下两行,将批注拿掉即可!

iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT

iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j  ACCEPT

/usr/local/virus/iptables/iptables.rule

步骤七:测试与数据库更新:在上面的设定都搞定,并且启动之后,你的 DNS 服务器应该是已经妥当的在运作了,现在进行测试:测试有两种方式:一种是籍由client端的查询功能

目的是检验你的数据库设定有无错误;另外你也可以连上底下这个网站: http://thednsreport.com/ 这个网站可以帮你检验你的 DNS 服务器的主要设定是否有问题!不过,这个网站

的检验主要是以合法授权的 zone 为主,我们自己乱搞的 DNS 是没有办法检查的 真是可惜~好了,要测试首先得将 DNS 服务器自己的/etc/resolv.conf 改成如下模样较佳:

vim /etc/resolv.conf    nameserver 192.168.100.254 <==自己的 IP 一定要最早出现!  nameserver 168.95.1.1,接下来,就让我们针对上面较重要的正、反解信息进行检测

# 1. 检查 master.centos.vbird 以及 www.centos.vbird 的 A 标志   dig master.centos.vbird   dig www.centos.vbird都要显示192.168.100.254

# 2. 检查 ftp.centos.vbird 与 winxp 等等的 A 标志  dig ftp.centos.vbird

# 3. 检查 centos.vbird 这个 zone 的 MX  dig -t mx centos.vbird

# 4. 检查 192.168.100.254 及 192.168.100.10 的反解  dig -x 192.168.100.254   dig -x 192.168.100.10需要在PTR之后显示出主机名才是对的

如果数据库更新了,例如你的某个主机IP或者主机名要变更,也可能是新增某个主机名与IP的对应,通常是这样做的:

1.  先针对要更改的那个 zone 的数据库档案去做更新,就是加入 RR 的标志即是!

2.  更改该 zone file 的序号 (Serial) ,就是那个 SOA 的第三个参数 (第一个数字),因为这个数字会影响到 master/slave 的判定更新与否

3.  重新启动 named ,或者是让 named 重新读取配置文件即可

协同工作的 DNS: Slave DNS 及子域授权设定:ISP 在提供 domain name 注册时,就强调得要有两部以上的 DNS 服务器才行。而为了简化 DNS 管理人员的负担, 主从架构较好

为了不间断的提供 DNS 服务,你的领域至少需要有两部 DNS 服务器来提供查询的功能,这几部DNS服务器应该要分散在两个以上的不同IP网域才好,为方便管理,通常除了一部

主要 Master DNS 之外,其他的 DNS 会使用slave 的模式; slave DNS 服务器本身并没有数据库,他的数据库是由 master DNS 所提供,master/slave DNS 必需要可以相互传输

zone file 的相关信息才行份需要 /etc/named.conf 之设定辅助

master DNS 权限的开放:继续来架设一部支持该案例的 slave DNS

提供 slave DNS 服务器进行 zone transfer 的服务器为master.centos.vbird

centos.vbird 及 100.168.192.in-addr.arpa 两个 zone 都提供给 slave DNS 使用

master.centos.vbird 的 named 仅提供给 slave.centos.vbird 这部主机进行 zone transfer

Slave DNS server 架设在 192.168.100.10 这部服务器上面 (所以 zonefile 要修订)

# 1. 修订 named.conf,主要修改 zone 参数内的 allow-transfer 项目vim /etc/named.conf,

        zone "centos.vbird" IN {type master;  file "named.centos.vbird"; allow-transfer { 192.168.100.10; }; // 在这里新增 slave 的IP};

        zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; allow-transfer { 192.168.100.10; }; // 在这里新增 slave 的IP};

在上头所列示的那两个数据库档案当中,你必须要新增所需要的 NS 标志才行,NS 对应的主机名为 slave.centos.vbird, IP 则是 192.168.100.10

# 2. 在 zone file 里面新增 NS 标志,要注意需要有 A(正解) 及 PTR(反解) 的设定

vim /var/named/named.centos.vbird新增:

@    IN        NS          slave.centos.vbird.

slave.centos.vbird.     IN A         192.168.100.10

vim /var/named/named.192.168.100新增:

@   IN         NS         slave.centos.vbird.

10  IN         PTR       slave.centos.vbird.

要特别注意一件事,那就是,你的 zone file 内的序号要增加,第 2 次进行,所以序号就以该天的日期为准来设计的!最后记得 restart一下 /etc/init.d/named restart

tail -n 30 /var/log/messages | grep named  从上表的输出来看,会多一个 sending notifies (传送注意事项) 关键词的数据,那就是提醒 slave DNS 来比对序号大小了

Slave DNS 的设定与数据库权限问题:既然 Slave DNS 也是 DNS 服务器,当然也是需要安装 bind, bind-chroot等等的软件,设定named.conf,而既然 Master/Slave 的数据库

是相同的,所以,理论上, named.conf 内容就是大同小异,唯一要注意的就是 zone type 类型的差异, 以及宣告 master 在哪里就是了,至于 zone filename 部分是从master取得的

透过 named 这个程序来主动建立起需要的 zone file,因此这个zone file 放置的目录权限就很重要

zone "centos.vbird" IN { type slave; file "slaves/named.centos.vbird"; masters { 192.168.100.254; }; };

zone "100.168.192.in-addr.arpa" IN { type slave; file "slaves/named.192.168.100"; masters { 192.168.100.254; }; };

# 2. 检查 zone file 预计建立的目录权限是否正确!底下目录为系统默认值:ll -d /var/named/slaves

输出结果为:drwxrwx---. 2 named named 4096 2011-06-25 11:48 /var/named/slaves 注意权限、使用者以及群组三个字段的数据!需要与 named 这个用户及群组有关

ll -dZ /var/named/slaves   drwxrwx---. named named system_u:object_r:named_cache_t:s0 /var/named/slaves  # 也不要忘记与 SELinux 有关的事情

为了方便使用者设定,CentOS 预设在 /var/named/slaves/ 处理好了相关权限,所以你可以轻松的处理权限问题,我们就建议你的 slave zone file 放置在该目录下

除了 named.ca 这个 . 需要主动存在之外,另外两个 type slave 的数据库档案,当然不必存在啊!因为会从 master 处取得,接下来,就让我们来启动 named 并进行观察

/etc/init.d/named start   chkconfig named on    tail -n 30 /var/log/messages | grep named

# 你会看到如上的讯息,重点是还有告知序号喔!非常重要

ll /var/named/slaves 可以看到# 这两个 zone file 会主动被建立起来呢

dig master.centos.vbird @127.0.0.1

dig -x 192.168.100.254 @127.0.0.1

# 上述两个检测的指令如果是正确的显示出 A 与 PTR 的话,那就完成了,你的 master DNS要更新数据库, 只要修改过序号,并重新启动 named ,这部 slave DNS 就会跟着更新

而如果在message中出现 permission denied,那么请再次检查你的数据库档案所放置的目录权限是否可以让 named 写入

建置子域 DNS 服务器:子域授权课题:除了 Master/Slave 需要协同 DNS 服务器共同提供服务之外,DNS 之间如果有上层、下属的关系时,该如何设定?由于网域太大,所以想要

只负责上层的DNS而已,下层希望直接交给个单位负责人来负责,所以就将各个subdomain (子域) 的管理权交给各个系所的主机管理员去管理,这样可以分散设定,那么接下

来假设在master上面建立centos.vbird这个zone为例,假设你是个 ISP,有个人想要跟妳申请 domain name ,他要的 domain 是『 niki.centos.vbird 』那该如何处理?

上层 DNS 服务器:亦即是 master.centos.vbird 这一部,只要在centos.vbird 那个 zone file 内,增加指定 NS 并指向下层 DNS 的主机名与IP (A) 即可,而 zone file 的序号也要增加;

下层 DNS 服务器:申请的领域名必须是上层 DNS 所可以提供的名称, 并告知上层 DNS 管理员, 我们这个 zone 所需指定的 DNS 主机名与对应的 IP 即可

假设我们管理 niki.centos.vbird 的服务器主机名为 dns.niki.centos.vbird , 而这部主机的 IP 为 192.168.100.200, 那接下来就让我们实际来设定

上层 DNS 服务器:只需新增 zone file 的 NS 与 A 即可:新增如下的数据即可:

niki.centos.vbird                IN NS  dns.niki.centos.vbird.

dns.niki.centos.vbird.       IN  A    192.168.100.200

/etc/init.d/named restart   tail -n 30 /var/log/messages | grep named

dig dns.niki.centos.vbird @127.0.0.1  # 你会发现是错误的!找不到 A, 因为 192.168.100.200 尚未设定好 niki.centos.vbird这个领域,所以追踪的结果并没有发现在

192.168.100.200 有 niki.centos.vbird的 zone,此时数据库的管理权在 192.168.100.200 上,再来处理下层 DNS

下层 DNS 服务器:需要有完整的 zone 相关设定

# 1. 修改 named.conf ,增加 zone 的参数,假设档名为  named.niki.centos.vbird   

vim /etc/named.conf     zone "niki.centos.vbird" IN { type master; file "named.niki.centos.vbird"; };

# 2. 建立 named.niki.centos.vbird        vim /var/named/named.niki.centos.vbird

$TTL  600

@           IN          SOA              dns.niki.centos.vbird. root.niki.centos.vbird. (2011080501 3H 15M 1W 1D )

@           IN          NS                dns.niki.centos.vbird.

dns        IN          A                   192.168.100.200

www      IN          A                   192.168.100.200

@           IN          MX               10 www.niki.centos.vbird.

@           IN          A                   192.168.100.200

# 为了简化整个版面,所以鸟哥都使用 hostname 而非 FQDN

# 3. 启动并观察相关登录信息  /etc/init.d/named restart   tail -n 30 /var/log/messages | grep named

dig www.niki.centos.vbird @192.168.100.254

依不同接口给予不同的 DNS 主机名: view 功能的应用,例如我的master.centos.vbird 有两个接口,分别是 192.168.100.254/24 (对内) 及 192.168.1.100/24 (对外),

那当外边的用户想要了解到master.centos.vbird 这部服务器的 IP 时,尽然取得的是192.168.100.254,因此还得要透过 NAT 才能联机到该接口,但明明 192.168.100.254

与外部的 192.168.1.100 是同一台服务器主机,干嘛还得要经过 NAT 转到内部接口呢?此时就要让外部的查询找到的是master.centos.vbird 是 192.168.1.100 而内部

的找到则回应 192.168.100.254,那就透过 view 的功能! view其实就是让不同的来源取得他们自己的zone响应,例如来自10.0.0.1 时,这个来源不可能是内部

(192.168.100.0/24) , 因此这个来源就会使用外部的 zone file 内容来响应,因此,我们就得要准备同一个 zone 需要两个不同的设定,再将个别的设定带入自己的客户端查询当中。

建立一个名为 intranet 的名字,这个名字代表客户端为 192.168.100.0/24 的来源;

建立一个名为 internet 的名字,这个名字代表客户端为非 192.168.100.0/24 的其他来源

intranet 使用的 zone file 为本章前面各小节所建立的 zone filename, internet 使用的 zone filename 则在原本的档名后面累加 inter 的扩展名, 并修订各标志的结果。

vim /etc/named.conf 编辑  acl intranet { 192.168.100.0/24; };  <==针对 intranet 给予的来源 IP 指定

                                               acl internet { ! 192.168.100.0/24; any; }; <==加上惊叹号 (!) 代表反向选择的意思

view "lan" { <==只是一个名字,代表的是内网

match-clients { "intranet"; };  <==吻合这个来源的才使用底下 的 zone

zone "." IN { type hint; file "named.ca"; };

zone "centos.vbird" IN { type master; file "named.centos.vbird"; allow-transfer { 192.168.100.10; }; };

zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; allow-transfer { 192.168.100.10; }; }; };

view "wan" { <==同样,只是个名字而已

match-clients { "internet"; }; <==代表的则是外网的 internet 来源

zone "." IN { type hint; file "named.ca"; };

zone "centos.vbird" IN { type master; file "named.centos.vbird.inter"; <==档名必须与原有的不同! }; // 外网因为没有使用到内网的 IP,所以 IP 反解部分可以不写于此 };

上表中,有些数据是重复的,有些则需要经过修改。现在,让我们来改改 named.centos.vbird.inter 吧

vim named.centos.vbird.inter

$TTL 600

@         IN         SOA            master.centos.vbird.           vbird.www.centos.vbird. (2011080503 3H 15M 1W 1D )

@         IN          NS              master.centos.vbird.

@         IN           A               192.168.1.100

@         IN          MX            10 www.centos.vbird.

www.centos.vbird.   IN A  192.168.1.100

linux.centos.vbird.   IN CNAME   www.centos.vbird.

ftp.centos.vbird.       IN CNAME   www.centos.vbird.

forum.centos.vbird. IN CNAME   www.centos.vbird.

workstation.centos.vbird. IN A     192.168.1.101

/etc/init.d/named restart                     tail -n 30 /var/log/messages                    

dig www.centos.vbird @192.168.100.254

www.centos.vbird.    600      IN       A          192.168.100.254

dig www.centos.vbird @192.168.1.100

www.centos.vbird.   600       IN      A           192.168.1.100

这样就能让你的 DNS 依据不同的用户来源,分别给予同一个主机名的不同解析

DNS 服务器的进阶设定:例如架设一个合法授权的 DNS服务器以及利用 rndc 控管 DNS 系统,申请一个合法的 domain name ...就是要花钱

选择网站代管或架设DNS模式:可以直接请ISP帮我们设定好host对应IP就好(最多三部),当然也可以自行设定一下我们所需要的 DNS 服务器,如果未来你可能会架设 mail

server ,所以还是自行设定 DNS 主机好了,记得选择『DNS』及填写你的hostname 与正确的 IP 即可,注意: 要填选这个项目,最好你的 IP 是固定制的,浮动制的 IP 不建议用这个

如果你已经以 DNS 服务器的方式申请了一个 domain name ,那么你就必须要设定你的 DNS 主机了,这个情况之下,你只要设定你的注册的网域的正解即可,

反解部分则先不要理会,当然,如果你有办法的话,最好还是请上层的 ISP 帮你设定,架设好之后去http://thednsreport.com/测试对不对

LAME Server 的问题:或许你曾经在 /var/log/messages 里面看到类似这样的讯息 more /var/log/messages,当我们的DNS 服务器在向外面的 DNS 系统查询某些正反解时,

可能由于 『对方』 DNS 主机的设定错误,导致无法解析到预期的正反解结果,这个时候就会发生所谓的 lame server的错误,我们知道 lame server 是对方主机的问题,

对我们主机没有影响,但是却又不想要让该讯息出现在我们的登录档 /var/log/messages 当中,则可以直接利用BIND 这个软件所提供的登录文件参数

在你的 /etc/named.conf 档案当中的最底下,加入这个参数即可:

# 1. 修改 /etc/named.conf           vim /etc/named.conf            // 加入底下这个参数:    logging { category lame-servers { null; }; };

# 2. 重新启动 bind       /etc/init.d/named restart

那个 logging 是主机的登录文件记录的一个设定项目,因为我们不要lameserver 的信息, 才将他设定为无 (null) ,重新启动 named,查看/var/log/messages不会看到 lame server

利用 RNDC 指令管理 DNS 服务器:在 /var/log/messages 老是看到这一句话:  command channel listening on 127.0.0.1#953

而且在本机端的 port 953 还多了个 named 所启动的服务,那就是所谓的rndc 了。 rndc 是 BIND version 9 以后所提供的功能,他可以让你很轻松的管理你自己的 DNS 服务器

包括可以检查已经存在 DNS 快取当中的资料、重新更新某个 zone 而不需要重新启动整个 DNS , 以及检查 DNS 的状态与统计资料等等的, 因为 rndc 可以很深入的管理你的

DNS 服务器,所以当然要进行一些控管,控管的方式是经过 rndc 的设定来建立一支密钥 (rndc key),并将这支密钥相关的信息写入你的 named.conf 配置文件当中,重新启动 DNS

后,你的 DNS 就能够藉由rndc 这个指令来管理,新版的 distributions 通常已经帮你主动的建立好 rndc key 了,不过,  如果你还是在登录档当中发现一些错误,例如:

couldn't add command channel 127.0.0.1#953: not found  那就表示 DNS 的 rndc key 没有设定好,此时就要设定只要先建立一把 rndc key ,然后加到 named.conf 当中去即可

你可以使用 bind 提供的指令来进行这样的工作

# 1. 先建立 rndc key 的相关数据   rndc-confgen, # Start of rndc.conf <==底下没有 # 的第一部份请复制到 /etc/rndc.conf中

key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; };

options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; };

# 至于底下的 key 与 controls 部分,则请复制到 named.conf 且解开 # 

key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; };

controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };  请注意,这个 rndc-confgen 是利用随机数计算出加密的那把 key,所以每次执行的结果都不一样。所

以上述的数据与你的屏幕会有点不同,

# 2. 建立 rndc.key 档案  vim /etc/rndc.key  # 在这个档案当中将原本的数据全部删除,并将刚刚得到的结果给他贴上去

key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; };

# 3. 修改 named.conf     vim /etc/named.conf   # 在某个不被影响的角落建置如下的内容:

key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; };

controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; 

/etc/init.d/named restart  建立了 rndc key 并且启动 DNS 同时你的系统也已经有 port 953 之后,我们就可以在本机执行 rndc 这个指令了。这个指令的用法请直接输入 rndc 查询

rndc  Usage: rndc [-c config] [-s server] [-p port]  [-k key-file ] [-y key] [-V] command  # 其他就给他省略啦!请自行输入这个指令来参考

那如何使用呢?我们举几个小例子来说明,

# 范例一:将目前 DNS 服务器的状态显示出来,输入rndc status 

# 范例二:将目前系统的 DNS 统计数据记录下来  输入rndc stats   # 此时,预设会在 /var/named/data 内产生新档案,你可以去查阅:   cat /var/named/data/named_stats.txt

# 范例三:将目前高速缓存当中的数据记录下来  输入 rndc dumpdb # 与 stats 类似,会将 cache 的数据放置成为一个档案,你可以去查阅:  # /var/named/data/cache_dump.db

如果你在执行 rndc 指令时老是出现如下错误: rndc: connection to remote host closed,这表示你的 /etc/rndc.key 与 /etc/rndc.conf 内密钥的编码不同所致。 请你自行以

上述的 rndc-confgen 的方式自行处理你的 rndc key ,并重新启动 named 即可,用这东西管理,你就不需要每次都重新启动 named

架设动态 DNS 服务器: 让你成为 ISP,如果我们本身是以拨接ADSL连上Internet时,我们的IP通常是ISP随机提供的,因此每次上网的IP都不固定,我们没有办法以上面的 DNS

设定来给予这种连上 Internet 的方法一个适当的主机名,如果我们想要利用这种没有固定 IP 的联机方法架设网站时,就得要有特殊的管道了,其中之一的方法就是利用 Internet

上面已经提供的免费动态 IP 对应主机名的服务,例如: http://www.no-ip.org,这样的服务原理是:基本上, DNS 主机还是得要提供 Internet 相关的 zone 的主机名与 IP 的对应数

据才行,所以,DDNS 主机 就必须要提供一个机制,让客户端可以透过这个机制来修改他们在 DDNS 主机上面的 zone file 内的数据才行。那就是利用update-policy这个选项,配合

认证用的 key 来进行数据文件的更新,简单的说, 1)我们的 DDNS 主机先提供 Client 一把 Key (就是认证用的数据, 你可以将他想成是账号与密码的概念), 2) Client 端利用这把

Key ,并配合 BIND 9 的 nsupdate 指令, 就可以连上 DDNS 主机,并且修改主机上面的 Zone file 内的对应表了。

1. DDNS Server 端的设定: 申请的域名是 web.centos.vbird,此时我必需要给他一把密钥,  并且设定我的 named.conf 让 centos.vbird 这个 zone 能够接受来自客户端的数据更新

才行!首先来建立这把密钥, dnssec-keygen -a [算法] -b [密码长度] -n [类型] 名称 选项与参数:

-a :后面接的 [type] 为演算方式的意思,主要有 RSAMD5, RSA, DSA, DH 与 HMAC-MD5 等。建议你可以使用常见的 HMAC-MD5 来演算密码;

-b :你的密码长度为多少?通常给予 512 位的 HMAC-MD5;

-n : 后面接的则是客户端能够更新的类型, 主要有底下两种, 建议给 HOST 即:ZONE:客户端可以更新任何标志及整个 ZONE; HOST:客户端仅可以针对他的主机名来更新

cd /etc/named 执行 dnssec-keygen -a HMAC-MD5 -b 512 -n HOST web 

ls -l  # 上面那把是公钥,下面那把则是私钥档案

接下来你必需要:将公钥的密码复制到 /etc/named.conf 当中,将私钥传给你的web.centos.vbird 那部主机上!好了,那就开始来修改 named.conf 内的相关设定

vim /etc/named.conf  // 先在任意地方加入这个 Key 的相关密码信息!  key "web" { algorithm hmac-md5;   secret "xZmUo8ozG8f2OSg/cqH8Bqxk59Ho8....3s9IjUxpFB4Q=="; };

// 然后将你原本的 zone 加入底下这一段宣示

zone "centos.vbird" IN { type master;  file "named.centos.vbird";  allow-transfer { 192.168.100.10; }; update-policy { grant web name web.centos.vbird. A; }; };

chmod g+w /var/named

chown named /var/named/named.centos.vbird

/etc/init.d/named restart

setsebool -P named_write_master_zones=1

注意到上头的 grant web name web.centos.vbird. A; 那一行, grant 后面接的就是key 的名称,也就是说,我这把 web 的 key 在这个 zone (centos.vbird) 里面可以

修改主机名 web.centos.vbird 的 A 的标志,亦即是修改主机的 IP 对应,语法也就是: grant [key_name] name [hostname] 标签 也就是说,我的一把 key 其实可以给予多种权限

设定好之后,由于未来客户端传来的信息是由我们主机的 named 所写入, 写入的目录在 /var/named/ 当中,所以你必需要修改一下权限! 给他重新启动 DNS,然后观察一下 /var/log

/messages 里面有没有错误即可,如此一来,DDNS 主机端就设定妥当

2. Client 端的更新: 接下来则是 DDNS Client 端的更新了。首先你必须要由 Server 端取得刚刚建立的那两个档案, 请将刚刚建立的 Kweb.+157+36124.key 及

Kweb.+157+36124.private利用 SSH 的 sftp 传送到客户端, 亦即是那部web.centos.vbird 主机上头, 假设你已经将这两个档案放置到 /usr/local/ddns 里面去,然后测试看看:

cd /usr/local/ddns

nsupdate -k Kweb.+157+36124.key

> server 192.168.100.254

> update delete web.centos.vbird   <==删除原有的

> update add web.centos.vbird 600 A 192.168.100.200 <==更新到最新的

> send

> 最后在此按下 [ctrl]+D 即可

请注意到『 update add web.centos.vbird 600 A 192.168.100.200 』这行,他的意 义说的是,新增一笔数据, ttl 是 600 ,给予 A 的标签, 对应到 192.168.100.200 的

至于 nsupdate -k 后面加的则是我们在 Server 端产生的那个 key 档案, 然后你就会发现到在 DNS 服务器端的 /var/named/ 里面多出一个暂存档,那就是named.centos.vbird.jnl

当然,/var/named/named.centos.vbird 就会随着客户端的要求而更新数据

由于手动更新好像挺麻烦的,我们就让 Client 自动更新吧!利用底下这个 script即可

vim /usr/local/ddns/ddns_update.sh

#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

export PATH

# 0. keyin your parameters

basedir="/usr/local/ddns"   # 基本工作目录

keyfile="$basedir"/"Kweb.+157+36124.key"  # 将档名填进去吧!

ttl=600  # 你可以指定 ttl 的时间

outif="eth0"  # 对外的联机接口!

hostname="web.centos.vbird"  # 你向 ISP 取得的那个主机名啦

servername="192.168.100.254" # 就是你的 ISP 啊

# Get your new IP

newip=`ifconfig "$outif" | grep 'inet addr' | awk '{print $2}' | sed -e "s/addr\://"`

checkip=`echo $newip | grep "^[0-9]"`

if [ "$checkip" == "" ]; then

echo "$0: The interface can't connect internet...."

exit 1

fi

# create the temporal file

tmpfile=$basedir/tmp.txt

cd $basedir

echo "server $servername"   >   $tmpfile

echo "update delete $hostname A "   >>    $tmpfile 

echo "update add    $hostname $ttl A $newip"    >>     $tmpfile

echo "send"   >>   $tmpfile

# send your IP to server

nsupdate -k $keyfile -v $tmpfile

你只要将上述的程序里面, 特殊字体的部分给他修改一下,就能够以 /etc/crontab 的 方式在你的系统内自动执行了!这支程序你也可以在底下的连结下载:

http://linux.vbird.org/linux_server/0350dns/ddns_update.sh

利用 BIND 9 所提供的这个服务,我们只要具有一组固定的 IP ,并向 ISP 申请一个合法授权的 domain name, 就可以提供不论是固定或者是非固定的 IP 使用者, 一个合法的主机名

了,并且,使用者也可以自行透过 nsupdate 来修改自己的 IP 对应!以让自己的主机 IP 永远与主机名保持正确的对应!这对只有拨接制上网的用户来说,真是方便
























































































































































































































































































































































































































































































































































































































































































































































 

















































































































































































































































































































































































































































 




































































































































                                                     


































































































































































































































































































































































































































































































































,