我们知道电脑网络系统只认识所谓的 IP ,但是,您可能记得住网络上面所有主机的 IP 吗?
就鸟哥来说,连自己的主机的 IP 都记不起来了,怎么可能连其他的主机 IP 都记的住!
因为,人脑对于数字组成的 IP 的记忆实在是......不怎么样。
但是,相对来说,人们对于由文本所组成的主机名称那可以容易记忆的多了~
所以,才会发展出可以经由主机名称( hostname )对应到电脑
IP 的一个模式,这样我们就可以轻轻松松的记住主机名称即可,电脑 IP 那就交给
Domain Name System ( DNS )去搞定吧!
那个 DNS 系统是由柏克莱大学发展的 bind 这个套件( Berkeley
Internet Name Domain )所提供的啦!基本上,DNS 最主要的工作就是将 Hostname
对应到 IP 这个功能了,不过,要架设一个成功的 DNS 主机的话,还得要对于 DNS
的运作很清楚才行啊!否则架设的不对,还反而会造成大家的问题喔!这个章节当中,
要学会的数据其实还蛮多的,需要了解:什么是正解、什么是反解、什么是 Zone、客户端
( Client ) 是经由什么咚咚来查找得到 IP 的呢?!以及 DNS 的授权问题等等。
哇!赶快清一清脑门,要好好的用功啰! ^_^
原理部分
目前人类的电脑网络里面,使用最普及的是所谓的 IP ( IPv4 )协定,通过这个协定,
我们可以将数据发送到任何一个可以连上 Internet 的地方。
不过,这个 IP 协定所设置的 IP 是由 32 个比特,而转成十进位的话,是由 4 组数字所集合而成的,
例如 123.234.56.78 这样的格式。当我们利用 Internet 发送数据的时候,
就需要这个 IP ,否则数据怎么知道要被送到哪里去?(
当然啦,
发送数据的方法有很多,不见得全部都是通过 IPv4 这个协定,例如 NetBIOS 就是一例。
不过,在这里,我们不讨论其他的传输方法,专门探讨 IPv4 这个协定喔! )
然而人脑对于 IP 这种数字的玩意儿,记忆力实在是不怎么样。但是如上所说,
当我们需要数据传输时,又很需要对方的 IP ,怎么办?为了应付这个问题,
早期的朋友想到一个方法,那就是利用某些特定的文件将主机名称与 IP 作一个对应,
让主机名称与 IP 有关连性,如此一来,我们就可以通过主机名称来取得该主机的 IP 了!
真是个好主意,因为人类对于名字的记忆力可就好多了! ^_^y。
可惜的是,该方法还是有缺憾的,那就是主机名称与 IP 的对应无法自动于所有的电脑内更新。
也就是说,我们必须要手动去所有的电脑里面更新该信息~天呐!哪有这么多时间~~
而为了填补这个缺憾,柏克莱大学发展出另外一套阶层式管理主机名称对应 IP 的系统,
我们称他为 Berkeley Internet Name Domain, BIND ,这个系统可就优秀的多了~
通过阶层式管理,可以轻松的进行维护的工作~太棒了!
这也是目前全世界使用最广泛的领域名称系统(Domain Name System, DNS)哩~
通过他,我们不需要知道主机的 IP ,只要知道该主机的名称,就能够轻易的连上该主机了!
(
在底下的说明当中,我们有时会提到 DNS 有时会提到 BIND ,这有什么不同?
由上面的说明里面,您可以了解到, DNS 是一种互联网的协定名称,
至于 Bind 则是提供这个 DNS 服务的套件~这样您了解了吗?!)
那么要立刻来架设 DNS 主机吗?当然不是~如同上面说的,
互联网上面,
数据的传输最重要的就是得要知道对方的 IP,如此才能达成连接。因此,
架设 DNS 就必须要了解整体互联网的领域名称架构,否则,一旦 DNS 架设错误,
可能会造成您所管辖的主机无法正确的在 Internet 上头传输数据的问题!
所以,要设置 DNS 之前,您必须要就领域名称系统里面惯用的 FQDN、Hostname 与 IP 的查找流程,
正解与反解、合法授权的 DNS 主机之意义,以及 Zone 等等的知识作一个认识才行!
这可是很重要的,不要轻忽他了!
什么是 Domain Name System:
DNS 的全名是『
Domain name system 』,
中文译名为『
领域名称系统』,
这个咚咚的用途是什么哇!为什么我们的电脑或者是
Internet 一定需要他 ( 尤其是以 WWW 的方式来上网时 ) ?呵呵!
他最大的用途就是『
造福懒惰与记忆性薄弱的人类~』
哈哈!没错!为什么说他是造福人类呢?且听我娓娓道来:
- /etc/hosts 的历史:
还记得我们在前几章当中提过的 网络基础
里面吧?目前在 Internet 上面通用的通信协定为 TCP/IP ,那么数据发送是以
TCP 封包来发送,他还是建构在 IP 协定之上的,而众所皆知的, IP 是由四组
8 bit 的数字组成的,也就是类似『
xxx.yyy.zzz.www 』这样的型态,好啦,那么如果我们要连上某一部电脑,
就要在网址列输入该电脑主机的
IP 才能连接的上,如果是一部或两部电脑那还无所谓,如果像目前这种 Internet
的主机数目.....嘿!谁记得住这么多的 IP 呀!?
由于 IP 是一堆数字所组成的,实在不容易被懒惰与记忆性薄弱的人类所接受
( 说的是鸟哥自己 ....) ,那如果将这些数字以『名字』来取代呢?那又如何?
也就是说,
只要输入一个『电脑的名字』而我们的系统就会自动的将这个名字转成电脑了解的
IP !嘿嘿!如此一来,我要记得『名字』总是比 IP
容易的多了!
早期的人类早就想到这个简单又偷懒的方式了,那就是
/etc/hosts 这个文件的由来!例如,只要您输入
『 ping -c 5 localhost 』
您的 Linux 马上可以印出 127.0.0.1 这个 IP
, Why ?您去看一下 /etc/hosts
就知道为什么了!所以啰,只要将您常常上网的『网址对应的 IP 』写到这个 /etc/hosts
底下,您的 IP 搜索速度就会快上很多~(
注:再次强调,在您的私有网域内部,最好将所有的
IP 都写入这个文件中啦!)
- DNS 的历史:
早期(大约20~30年前)的电脑可是贵重物资,一般人是可望而不可及的,因为电脑数量太少,
所以使用 /etc/hosts 来记忆这些 IP 与名称的对应还尚可应付。但是在现代,
Internet 上面这么多主机,并且常常会突然的『噗通』又多出一部主机来服务,
那么我们总不能一个一个的将他输入在 /etc/hosts 里面吧!?对呀!真不聪明!
所以后来的这个时候就有所谓的『领域名称解析系统,
DNS』出现啦!
DNS 利用类似树状目录的型态,将主机名称的管理分配在不同层级的
DNS 主机当中,经由分层管理,所以每一部主机的记忆的信息就不会很多,
而且异动上面也相当的容易修改!那么这个
DNS 的功能您知道了吗?对啦!就是『将电脑主机的名称转译成
IP 』就是了!当然啰,他的额外功能还很多!总之,他的最大功能就是『
让有意义的,人类较容易记忆的主机名称(英文本母),转译成为电脑所熟悉的
IP 地址! 』
举个例子来说好了,奇摩雅虎的网站的 IP 是 202.1.237.21
,所以您可以在您的浏览器上面输入『 http://202.1.237.21 』来连上奇摩雅虎!
不过,我想没有几个人能够将这个
IP 背的起来的吧?!反之,我们却都知道奇摩雅虎的网址为 tw.yahoo.com ,那么您只要输入『
http://tw.yahoo.com 』就可以连上 Internet 啦!很容易记忆吧!
/etc/hosts
:直接在 Client 端的文件内输入主机名称对应的 IP 来查找;
DNS 系统
:利用额外的DNS服务,让Client端可以通过名称解析来取得目的地主机的IP
|
- Fully Qualified Domain Name ( FQDN )
在提到名称与 IP 的解析流程之前,我们还必需来讨论一下『什么是
domain name 与 host name ?』也就是,领域名称与主机名称。
在讨论这个主题之前,我们来聊一聊比较生活化的话题,请注意喔!
底下的例子不涉及政治!呵呵!先提一下,免得大家敏感:
-
我们晓得全台湾有很多个『李登辉』,这个『李登辉』就代表每一个独立的个人!
但是您怎么知道这个李登辉跟前总统李登辉是否为同一个人?咦!
每个李登辉都来自不同的县市嘛!对啦,所以我们就以县市来做为区分,
所以有台北的李登辉跟高雄的李登辉,这两个就可以分辨了!嗄!万一不幸,
台北还有两个李登辉怎么办?那就用乡镇来分呀!所以有台北、三芝的李登辉跟台北、
仁爱的李登辉,如果我们将他列出来,可以这样看:
李登辉、三芝、台北
李登辉、仁爱、台北
李登辉、高雄
....
|
是否就可以分辨他的不同点了呢?呵呵!没错!就是这样!
- 另外一个例子可以使用电话号码来看,假如高雄有个 1234567 而台南也有个 1234567
,那么(1)您在高雄直接拨接 1234567 时,他会直接挂入高雄的 1234567 电话中,
(2)但如果您要拨到台南去,就得加入(06)这个区码才行!我们就是使用区码来做为辨识之用的!
是否还不清楚我要说什么?呵呵!我们常常会发现主机名称都是 www 的网站,例如
www.gov.tw, www.seednet.net, www.hinet.net 等等,那么我们怎么知道这些 www
名称的主机在不同的地方呢?就需要给他领域名称啰!也就是 gov.tw, seednet.net,
hinet.net 等等的不同,所以即使您的主机名称相同,但是只要不是在同一个领域内,
那么就可以被接受啰!
基本上,我们知道
DNS 是有层级之分的,那么每个层级的 Hostname 与 Domain name
可是不一样的咚咚ㄋㄟ~我们可以使用我们的主机来加以说明,如下图所示:
图一、分层次的 DNS 架构
( Hostname 与 Domain name )
在上面的例子当中,由上向下数的第二层里面,那个 .tw 是 domain name ,而 com, edu,
gov 则是主机的名称,而在这个主机的名称之管理下,还有其他更小网域的主机,
所以在第三层的时候,基本上,那个
edu.tw 就变成了 domain name 了!而成大与中山的 ncku, nsysu 则成为了 hostname 啰!
呵呵!以此类推,最后得到我们的主机那个 aerosol 是主机名称,而 domain
name 是由 ev.ncku.edu.tw 那个名字所决定的!自然,我们的主机就是让管理 ev.ncku.edu.tw
这个 domain name 的 DNS 主机所管理的啰!这样是否了解了 domain name 与 hostname
的不同了呢?
DNS 的查找过程:
接下来我们要谈一谈,那么 DNS 的 (1)架构是怎样?
(2)查找原理是怎样?总是要先知道架构才能知道如何查找的呐!所以底下我们先来介绍一下整体的架构。
- DNS 的架构:
图二、DNS 层阶概念示意图
上面就是一个简单的 DNS 阶层架构啰,最上方一定是
. (小数点) 这个 root 的 DNS 主机,他底下管理的就只有 com, edu, gov, mil,
org 与以国家为分类的第二层的主机名称了!例如台湾地区最上层的领域名称是以
.tw 为开头,管理这个领域名称的这部机器的 IP 是在台湾,但是他的记录则是记录在
. (root)那部机器里面的!还有其他的国家的最上层如 .cn 指的是大陆,
.de 指的是德国一样!那么每个国家之下记录的主要的下层有哪些领域呢?
呵呵!主要就是有这六大类:
名称 |
代表意义 |
com | 公司、行号、企业 |
org | 组织、机构 |
edu | 教育单位 |
gov | 政府单位 |
net | 网络、通信 |
mil | 军事单位 |
其实最早之前在 . (root)之下只有这六大类的 domain name
,但是网络成长的速度太快了,因此后来又多出这些以国码来分的
domain name ,如此一来,在该国家之内,只要向该国家申请 domain name
即可,不需要再到最上层去申请啰!也因此,在这些国码之下,还是有这六大类的
domain name 为主的哩!当然啦,在目前,由于互联网持续的发烧,说实在的
domain name 实在是有点不太够用,所以又有相当多的领域名称被设计出来,例如目前台湾
ISP 提供的 .idv.tw 的个人网站啦!
好了,再强调一次, DNS 系统是以所谓的阶层式的管理,所以,请注意喔!那个
.tw 只记录底下那一层的这六个主要的 domain 的主机而已!至于例如 edu.tw 底下还有个
ncku.edu.tw 这部机器,那就直接授权交给 edu.tw 那部机器去管理了!也就是说『
每个上一层的
DNS 主机,所记录的信息,其实只有其下一层的主机名称而已!
』至于再下一层,则直接『授权』给下层的某部主机来管理啰!呵呵!所以您就应该会知道
DNS 到底是如何管理的吧! ^_^
会这样设置的原因不是没有道理的!
这样设计的好处就是:每部机器管理的只有下一层的
hostname 对应 IP 而已,所以减少了管理上的困扰!而下层 Client 端如果有问题,只要询问上一层的
DNS server 即可!不需要跨越上层,调试上面也会比较简单呢!
- DNS 的搜索流程:
刚刚说过 DNS 是以类似『树状目录』
的型态来进行名称的管理的!所以每一部
DNS 主机都『仅管理下一层 DNS 主机的名称转译』而已,
至于下层的下层,则『授权』给下层的
DNS 主机来管理啦!这样说好像很绕口,好吧!我们就以下图来说一说原理啰:
图三、DNS 主机查找流程示意图
首先,当您在浏览器的网址列输入 http://aerosol.ev.ncku.edu.tw 时,您的电脑就会依据相关设置(
在 Linux 底下就是利用
/etc/resolv.conf 这个文件 )
所提供的 DNS 的 IP 去进行连接查找,好了,由于目前最常见的 DNS 主机就属
Hinet 的 168.95.1.1 这个 DNS 了,所以我们就拿他来做例子吧!嗯!这个时候,
hinet 的这部主机会这样工作:
- 先查看本身有没有纪录:
刚刚说过啦,由于 DNS
是层阶式的架构,任何一部 DNS 都仅记录下一层里面的主机名称对应的 IP 而已,由于
hinet 并非学术网络里面的主机,所以自然也就没有办法直接提供给 client 端关于
aerosol.ev.ncku.edu.tw 这部机器的 IP 了,所以啦,一般而言,这个时候 168.95.1.1
就会向最顶层,也就是 . (root) 的主机查找 .tw 这部机器的地址;
- 向最顶层 ( root )查找:
由于 168.95.1.1 没有纪录我们主机的
IP ,这个时候他就会向『最顶层』的 . (root) 这部主机来查找 . (root) 的下一层,也就是
.tw 这部机器的数据了!这个时候, . (root) 就会告诉 168.95.1.1 说『嘿!您要查
.tw 这个网域的管理者呀!?喝!我这里有 .tw 这个网域的管理的主机之
IP 信息,您可以直接去找他!』;
- 向第二层查找:
168.95.1.1 接着又到 .tw 去查找,而该部机器管理的又仅有
.edu.tw, .com.tw, gov.tw... 那几部主机,经过比对后发现我们要的是 .edu.tw
的网域,所以这个时候 .tw 又告诉 168.95.1.1 说:『您要去管理
.edu.tw 这个网域的主机那里查找,我有他的 IP !』;
- 向下层持续查找:
好了,一步一步下来, .edu.tw
可以查到管理 .ncku.edu.tw 的主机 IP ; .ncku.edu.tw 可以查到管理 .ev.ncku.edu.tw
的主机 IP ,而最后我们 aerosol.ev.ncku.edu.tw 就可在管理 .ev.ncku.edu.tw
网域的那部主机的设置纪录当中查找到啦!
- 记录暂存内存:
查到了 IP 之后,这部 168.95.1.1
的 DNS 机器总不会在下次有人查找 aerosol.ev.ncku.edu.tw
的时候再跑一次这样的流程吧!粉远粉累的呐!而且也很耗系统的资源与网络的带宽,所以呢,
168.95.1.1 这个 DNS 很聪明的会先记录一份 aerosol.ev.ncku.edu.tw 对应 IP
的信息在自己的暂存内存当中,以方便下一次又有人对同一个主机名称的要求之查找!最后则将结果回报给
client 端!当然啦,那个记忆在 cache 当中的数据,其实是有时间性的,当过了
DNS 设置记忆的时间(通常可能是 24 小时),那么该记录就会被释放喔!
由这样的分层负责您发现了什么?嗯!那就是:
-
当一个『合法』的 DNS 主机里面的设置修改了之后,来自世界各地任何一个 DNS
的要求,都会正确无误的显示正确的主机名称对应 IP
的信息,因为他们会一层一层的寻找下来,所以,要找您的主机名称对应的
IP 就一定得要通过您的上层 DNS 主机的纪录才行!所以只要您的主机名字是经过上层『合法的
DNS』主机的设置的,那么就可以在 Internet 上面被查找到啦!呵呵!很简单维护吧,机动性也很高。
-
在主机的暂存内存记录当中,由于是有时间性的,所以当您的主机名称在 DNS
当中被修改了之后,但是由于之前的旧信息还记忆在其他的 DNS
主机的暂存内存里面,所以啦,可能在别人以非您的
DNS 主机来查找您的主机名称时,就会得到先前的旧信息,这个时间差不多可能是
10 分钟到 2 天左右,这也是为什么我们常说当您修改了一个 domain name 之后,可能要
2 ~ 3 天后才能全面的激活的缘故啦!
好啦!哇!既然 DNS 这么棒,然后我们又需要架站,所以需要一个主机的名称,因此,
那么我们需要架设 DNS 了吗?!哈哈!当然不是,为什么呢?
刚刚鸟哥提到了很多次的『合法』的字眼,因为他就牵涉到『授权』的问题了!
我们在前面的『申请合法的主机名称』当中也提到,
只要主机名称合法即可,不见得需要架设 DNS 的啦!
- DNS 使用的 port number :
好了,既然 DNS 系统使用的是网络的查找,那么自然需要有开 Listen 的 port
啰 ( 监听的端口号 )!没错!很合理!那么 DNS 使用的是那一个 port 呢?那就是
53 这个 port 啦!您可以到您的 Linux 底下的
/etc/services
这个文件看看!搜索一下 domain 这个关键字,就可以查到 53 这个 port
啦!但是这里需要跟大家报告的是,通常,
DNS 查找的时候,是以 udp 这个较快速的数据传输协定 ( protocol )
来查找的,但是万一没有办法查找到完整的信息时,就会再次的以
TCP 这个协定来重新查找的!所以启动 DNS 的 daemon (就是 named 啦) 时,会同时启动
TCP 及 udp 的 53 这个 port number 喔!
关于『授权』的意义:
很多朋友都认为『
架设 DNS 可以设置主机的名称,而我要架站需要主机有名字,因此一定需要架设
DNS ,只要有 DNS,我的主机就可以有名字了!
』是这样吗?当然不是!这是错误的观念!怎么说呢?
从
上面图三的图标当中,您应该不难发现,当我要搜索
aerosol.ev.ncku.edu.tw 主机时,就需要向管理 .ev.ncku.edu.tw 这个网域的那部机器查找才行,而要查找
.ev.ncku.edu.tw 则需要在 .ncku.edu.tw 上面询问才可以!这是因为『
上层
DNS 主机 .ncku.edu.tw 已经将 .ev.ncku.edu.tw 这个网域的管理权 "授权" 给
green.ev.ncku.edu.tw 这部机器,当有人要查找 .ev.ncku.edu.tw 这个网域的主机
IP 时, .ncku.edu.tw 将会把查找的任务直接转给 green.ev.ncku.edu.tw 去管理了!从此,
.ncku.edu.tw 这个网域的管理主机,将不会再接管 ev.ncku.edu.tw 这个网域的名称管理!
』是否很像人类社会的『授权』的概念?
也就是说,当您老板充分的『授权』给您某项工作的时候,从此,
要进行该项工作的任何人,从老板那边知道您才是真正『有权』的人之后,都必须要向您请示一样!
^_^!所以啰,如果您要架设 DNS ,而且是可以连上 Internet 上面的 DNS
时,您就必须要通过『
上层
DNS 主机的授权』才行!这是很重要的观念喔!等一下我们在底下会介绍一个如何架设一个
『经过合法授权的 DNS 主机』哩!
其实,如果将上面的话改换成:『
我要架站,所以我要让我的主机有一个合法的名字!
』那样就合理了!怎么说呢?因为我可以请上层
DNS 帮我设置主机名称对应 IP 就可以啦!如此一来,要找我的 hostname 对应
IP 的人,都可以直接在我的上层 DNS 里面找到,根本不需要通过我的 Linux 主机呐!例如鸟哥研究室的
aerosol.ev.ncku.edu.tw 就可以在 green.ev.ncku.edu.tw 这部管理 DNS 的 server
上面找到ㄋㄟ~不必亲自来我的 aerosol.ev.ncku.edu.tw 上面找!也就是说,借由
DNS 系统最大的功能『
主机名称转译成 IP 』
这个动作,那么您只要向任何一个合法的
DNS 主机申请一个『
主机名称, hostname 』给您的
Linux 主机,让大家都可以借由该 DNS 主机来查找到您的 Linux 之
IP ,就可以使用该主机名称来架站啦!就是这么简单!
好了,那么您就应该知道了,要让您的主机名称对应 IP 且让 Internet 上面的电脑都可以查找的到,就需要:
- 上层 DNS 的授权让您设置 DNS 主机,或者是;
- 直接请上层 DNS 主机来帮您设置!
这两种模式,那么哪种模式比较好呢?这没有一定的答案,
底下我们来谈一谈,您比较适合哪一种模式的设置呢?
网站代管还是自己设置 DNS:
如果您曾经申请过 domain name 的话,例如向 Hinet 或 Seednet 等台湾各大主要
ISP 申请 domain name 的话,应该都会知道有两种主要的模式,就是刚刚上头提到的
DNS 授权,或者是直接交给 ISP 来管理。交给 ISP 管理的,
就可以称作是网站代管啦!当然啦,如果您是学校单位的话,或者是企业内部的小单位,那么就得请您向上层
DNS 主机的负责人要求啰!无论如何,您只能有两个选择就是了,要不就是请他帮忙您设置好
hostname 对应 IP ,要嘛就是请他直接将某个 domain name 段授权给您做为 DNS
的主要管理网域。那么我怎么知道那个方式对我比较好呢?请注意,由于 DNS 架设之后,会多出一个监听的
port ,所以理论上,是比较不安全的!因此,能不设当然就不要设置比较好啰!所以,这里的建议如下:
- 需要架设 DNS 的时机:
- 您所负责需要连上 Internet 的主机数量庞大:例如您一个人负责整个公司十几部的网络
Server ,而这些 Server 都是挂载您的公司网域之下的。这个时候想要不架设 DNS
也粉难啦!
- 您可能需要时常的修改您的 Server 的名字,或者是您的
Server 有随时增加的可能性与变动性;
- 不需要架设 DNS 的时机:
- 网络主机数量很少:例如家里或公司只有需要一部 mail server 时;
- 您可以直接请上层 DNS 主机管理员帮您设置好 Hostname 的对应时;
- 您对于 DNS 的认知不足时,如果架设反而容易造成网络不通的情况;
- 架设 DNS 的费用很高时!
正解与反解的 Zone 意义:
讲了这许多,还得再提一提关于正解、反解与 Zone 的问题才行啊!
- 什么是正解与反解?
我们在前头的开宗明义当中就提到啦, DNS 系统本来最主要的功能就是在转译
hostname 与 IP 啰,由于电脑在网络上面其实认识的只是 IP
啦,所以,一般来说,我们称『由
hostname 去寻找出 IP 的进程称为 正解 』,
至于由 IP 去查找得到 hostname 那就被称为反解了!正反解的设置情况是差异性很大的!怎么说呢?
- 正解:
在正解的情况之下,我们可以通过主机分层设置的方式来查找(例如前面的图三),而因为是
Hostname 对应 IP ,所以即使在不同网段的 IP ,仍然可以写在同一个 domain
之中!例如我的主机是在学校里面 ( 140.116.xxx.xxx ),但是我申请的是 vbird.idv.tw
这个 domain 的名称,而很多朋友则是以 ISP 提供的 IP ( 例如 61.xxx.xxx.xxx
) 来进行 *.idv.tw 的申请的!呵呵!那么一来,我的 vbird.idv.tw 就与大家的
*.idv.tw 在同一个 domain 的设置当中啰,但是这些主机却是在不同的网域之中喔(140.116.xxx.xxx
不会跟 61.xxx.xxx.xxx 在同一个网段中吧! ^_^) !所以啰,任何一部 DNS 都可以将您的
IP 写入他们的正解当中啰!
- 反解:
但是反之则不行!怎么说呢?因为当初 IP
规划分配的时候,就必需要一个区域一个区域的划分的,所以当然不可能同一个网段的
IP 在不同的地方出现吧!因为这涉及到 TCP/IP 的协定与 router 的架构ㄋㄟ~因此,同一个
IP 网段的反解就真的得要通过上层主机的设置才行了!所以由 IP 反查 hostname
的话,那么大部分的情况下,就需要向直属的上层申请了!
举个例子来说:我想要自己的领域名称的名字,所以我可以去外面的 ISP 申请注册一个合法的名字来架设我的
DNS !从此之后,别人就可以经过我的 DNS 正解查找得到我的主机 IP。但是如果要由
IP 反查回 hostname 的话,我就『一定必需要』请管理我主机所在网域的上层的
DNS 管理员来设置才行ㄋㄟ!这也是目前比较麻烦的地方,因为正解您可以自行设置,
但是反解则必需要请上层的管理员设置!如果是向
ISP 申请的 IP ,那就得向 ISP 申请反解名称改换,这个部分通常很麻烦~
- 什么是 Zone ?
知道正反解之后,再来要来知道一下,什么又是 Zone ( 区域
) 呢?说的简单一点的话,一个正解或反解的设置就是一个
zone ,例如我要规范 vbird.idv.tw 这个 domain 的设置内容,那么他就是一个
zone !通常,『一个设置档就是一个 zone 』!
如果以鸟哥的 vbird.idv.tw 这个例子来说,配合上面的 图三 来说明,
那鸟哥的 vbird.idv.tw 那部主机里面至少需要知道 . (root) 以及鸟哥自身的设置,
所以,这个 domain 的 DNS 设置档里面,必需要有:
- hint( root ) 的设置;
- vbird.idv.tw 这个 domain 的正解设置;
- localhost 的正解设置(非必要);
- localhost 的反解设置(非必要)。
那么我就有四个 zone 了!如果以我们系馆的 DNS 主机 green.ev.ncku.edu.tw
来说的话,他至少要有:
- hint(root);
- ev.ncku.edu.tw 正解;
- ev.ncku.edu.tw 反解以及 ;
- localhost 正解;
- localhost 反解。
等五个 zone 的定义啰!嘿!您会发现,我没有 vbird.idv.tw 这个 domain
的反解设置~为什么呢?请参考上面的说明吧!因为反解需要要求 IP
协定的上层来设置才行!并且,需要特别留意的是,『每一个
zone 都有一个设置档,而规定这些设置档文件名的,就交给
/etc/named.conf 这个参数档来设置!』
( 在新版的 Linux distribution 当中,
也有将这个文件放置在 /var/named/chroot 当中喔!需要特别注意!)也就是说,
DNS server 使用的 bind 这个套件中,他的主要参数档是 /etc/named.conf ,而这个文件当中就是记录了每一个
zone 的设置档文件名!实际上,主机名称与 IP 的对应就是记录在各个 zone 的设置档内~
- 正反解一定要成套吗?
好了,正反解需不需要成套产生,在这里不用多说明了吧!?
^_^!请注意喔,在很多的情况下,尤其是目前好多莫名其妙的领域名称产生出来,
所以,常常会只有正解的设置需求而已。不过也不需要太过担心啦,
因为通常在反查的情况中,如果您是使用目前台湾地区最流行的
ADSL 上网的话,那么 ISP 早就已经帮您设置好反解了!例如:211.74.253.91这个
seednet 的浮动式 IP 反查的结果会得到 91.253.74.211.in-addr.arpa
这样的主机名称!所以在一般我们自行申请领域名称的时候,您只要担心正解的设置即可!
不然的话,反正反解的授权根本也不会开放给您,您自己设置得很高兴也没有用呀! ^_^
设置部分:
在 DNS 的设置上面,基本上,您必须要已经很清楚
zone 是什么了,否则很难继续设置喔!会搞的一塌糊涂的~无论如何,您一定要知道的是,
bind 的设置档,就是 /etc/named.conf (
在新版的 BIND 当中,
这个文件似乎已经被搬移到 /var/named/chroot 当中了!您必须自行寻找~ )
这个文件,如果他不存在的话,请自行创建吧!另外,针对
DNS server 的类型大致上可以分为三类,分别是:
- Master:
这种类型的 DNS 本身含有领域名称的设置档( 就是有Zone啦!
),这个设置档就是设置正解或者是反解的『Database』啰!所以他本身是具有提供
Internet 查找所需的数据喔!例如我可以在我的主机上面设置提供 vbird.idv.tw
这个网域,那么我的主机就是 master 类型的主机啦!
- Slave:
既然想要架设 DNS 主机,自然就是希望自己的主机名称能够在 Internet 上面被查找的到。
而您也晓得,电脑主机这东西什么时候会挂点?网络环境这玩意儿,什么时候会死掉?
是谁也不敢说的~而,您总不希望自己的主机名称无法被查找到吧?
所以,一般来说,
DNS 系统通常会建议您至少要有两部主机提供 DNS 的服务~
不过,如果您有四部 DNS 主机提供这样的名称解析服务,
而且这四部是互相为备援的,也就是说,这四部主机的内容其实是一模一样的,
那么如果您要更动一个 IP 与名称的对应时,就必须要手动去修订四部主机的内容,
这样会不会很麻烦啊?!
这个时候就有 slave 类型的 DNS 主机出现了!不过,slave主机必须要与 master 主机相互搭配喔!
以上面的案例来说明,如果我必须要有四部主机提供 DNS 服务,且四部内容相同,
那么我只要指定一部主机为 Master ,其他三部为该 Master 的 Slave 主机,
那么当要修改一部名称对应时,我只要手动更改 master 那部机器的设置档,然后,
重新启动 BIND 这个服务后,呵呵!其他三部 slave 就会自动的被通知更新了!
这样一来,在维护上面可就轻松写意的多了~
由于目前互联网并不安全,同样的 BIND 服务也不是很安全的~
因此,如果您设置 Master/Slave 架构时,您的 Master 主机必须要限制
只有某些特定 IP 的主机能够取得您 DNS 主机的正反解数据库才好!
所以,上面才会提到 Master/Slave 必须要互相搭配才行!
另外,既然我的所有 DNS 主机是需要同时提供 internet 上面的领域名称解析的服务,
所以不论是 Master 还是 Slave 主机,他都必须要可以同时提供 DNS 的服务才好!
因为在 DNS 系统当中,领域名称的查找是『先抢先赢』的状态,所以,
我们不会晓得哪一部主机的数据会先被查找到的!
为了提供良好的 DNS 服务,每部 DNS 主机都要能正常工作才好啊!
- Cache-only:
通常设置在防火墙上面的呢!这种类型的
DNS 主机没有自己的数据库,单纯仅帮助 Client 端向外部的 DNS
主机要求数据而已~简单的来说,他可以想成是一个『代理人』的角色而已~
那么 Master/Slave 的数据更新到底是如何动作的呢?请注意,Slave
是需要更新来自 Master 的 DNS 数据啊!所以当然 Slave 在设置之初就需要存在
Master 才行喔!好了, Master 与 Slave 的数据同步动作可以由底下的图标来看:
图四、Master/Slave 的 DNS
主机数据同步过程
- 判断是否需要更新(1.1):
我们可以在 Slave 设置好向 Master DNS 主机要求数据更新的周期时间,则每当到达更新时间时,
Slave 会向 Master 索取是否需要更新数据,这个更新数据的判断则以
Serial number 是否不同来进行更新喔!
- 判断是否需要更新(1.2):
除了由 Slave 向 Master 的查找之外,Master 如果 DNS 数据经过变更,且想要 Slave
同步更新时,也可以主动的向 Slave 进行更新通知!
- 数据同步化(2):
最后当然就是数据由 Master 发送到 Slave 来更新 Slave 的 DNS 数据啰!
请注意,如果您想要架设 Master/Slave 的 DNS 架构时,
两部主机
(Master/Slave) 都需要您能够掌控才行!网络上很多的文档在这个地方都有点『闪失』,
请特别的留意啊!
底下我们就来谈一谈几个简单的 DNS 主机,分别是
cache-only ( 单纯 forward ) 与较为详细的 Master 类型的 DNS 主机,最后,我们再以一个简易的
slave 主机设置来作为结尾~
单纯的 forward DNS 主机设置:
什么是单纯的 forward DNS 的主机呢?
好了,了解了 BIND 的缺省路径之后,我们知道了 BIND 主要设置档是 /etc/named.conf
这个文件,但是偏偏我的 /etc 底下就没有这个文件!哈哈!因为您要自行创建啦!
^_^!在介绍怎么设置每一个 zone 之前,我们先来玩一个简单的 DNS 主机!就是
cache-only DNS server !
也称为 forward DNS 啰!顾名思义,这个 DNS server 只有
cache ( 缓存 ) 的功能,也就是说,他本身并没有主机名称与 IP 正反解的设置档,
完全是由对外的查找来提供他的数据源!因为他没有 zone 的设置档,所以他就必须要连上一部合法的
DNS 才行!整个运作的流程可以看成是这个样子:
图五、Cache-Only DNS 主机的运作流程
由上面的图标来看,您可以发现,其实,我们 Client 端虽然都是使用 Cache-Only
的 DNS 在搜索,但是,实际上 Cache-only 的主机都是请一个 ( Forwarders )
DNS 主机来帮忙查找的,本身并没有 zone 的设置档啦!所以说,基本上, cache-only
的 DNS 只是一个中间传递数据的 DNS 主机罢了!那么为什么要架设这样的一个
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 主机其实真的很简单的啦!因为不需要设置正反解的
Zone ,所以只要设置一个文件(就是 named.conf)即可!真是快乐得不得了呐!
- 编辑 /etc/named.conf
在这个文件中,主要是定义跟主机有关的事项,以及各个 Zone 的代表含意与文件,因为
cache-only 没有 Zone ,所以我们只要设置好跟主机有关的设置即可。设置这个文件的时候请注意:
- 注解数据是以『 // 』来作设置的!
- 每个段落之后都需要以『 ; 』来做为结尾!
那么您可以这样设置这个文件啦!
[root@test root]# vi /etc/named.conf
// This settings is only for forwarding DNS Server
options {
pid-file "/var/run/named/named.pid";
forward only; //只允许 forward!
forwarders {
168.95.1.1; //我这里使用 hinet 的 DNS !
139.175.10.20; //这个是 seednet 的 DNS !
};
};
// 我这里有设置 pid-file ,所以得要特别注意了!因为 pid-file
// 所在的目录下,也就是那个 /var/run/named 目录,我的 bind
// 运行档进程的拥有人( 正常应该是 name 这个用户 )必须要
// 能够写入!也就是说, /var/run/named 的 owner 必须
// 是 named 这个 user 才行喔!
[root@test root]# ls -al /var/run/named
total 12
drwxr-xr-x 2 named named 4096 Dec 5 02:28 ./
drwxr-xr-x 10 root root 4096 Dec 5 02:01 ../
# 注意上面那个 ./ 目录的拥有者!
|
我们仅动用到 option 这个参数而已,里面的设置值意义为:
- pid-file
指的是每一个 services 的记录自己的
PID ( Process ID ) 的文件啰!这个文件通常用在重新启动或者是 reload 整个
services 最常被使用到的!因为可以使用 kill -1 PID
来重新启动啊!嗄!忘记什么是 PID
?赶快拿出基础篇复习一下!
- forwarders
(不要忘记那个 s 喔!)就是要设置往前寻找的那个『合法』的
DNS 啰!每一个 forward 的主机之 IP 都需要有『 ; 』来做为结尾!
- forward only
这个设置可以让您的 DNS 主机仅进行
forward 而已!是 Cache-Only 主机最常见的设置了!
很简单吧!这样就已经设置完成了最简单的 cache-only 的 DNS 主机了!
- 启动 named
启动总不会忘记吧!?赶快去启动一下吧!
[root@test root]# /etc/rc.d/init.d/named start
Starting named: [ OK ]
|
- 观察 port 的变化
请特别的注意喔!并不是启动的时候显示 OK 就会成功的!所以,还要赶快的来看一下您的
port 53 有没有启动ㄋㄟ~
[root@test root]# netstat -utln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.2:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
udp 0 0 192.168.1.2:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
|
特别需要留意的是,如果没有指定接口的话,那么所有的网络接口,包含 lo,
eth0, ... 等接口都会被设置为可以接受 domain name 要求的回应接口!此外,
还记得我们在前面提到的,每个接口同时都会提供 TCP 与 UDP 封包的服务喔!
这样看起来似乎真的有启动的样子,不过,我们还是得瞧一瞧设置方面有没有什么大问题呢?
- 检查 /var/log/messages 的内容消息
named 这个服务的记录档就直接给他放置在 /var/log/messages 里面啦,所以来看看里面的几行吧!
[root@test root]# tail -n 15 /var/log/messages | grep named
Dec 5 02:33:33 test named[3010]: starting BIND 9.2.1 -u named
Dec 5 02:33:33 test named[3010]: using 1 CPU
Dec 5 02:33:33 test named[3015]: loading configuration from
'/etc/named.conf'
Dec 5 02:33:33 test named[3015]: no IPv6 interfaces found
Dec 5 02:33:33 test named[3015]: listening on IPv4 interface lo,
127.0.0.1#53
Dec 5 02:33:33 test named[3015]: listening on IPv4 interface eth0,
192.168.1.2#53
Dec 5 02:33:33 test named[3015]: running
Dec 5 02:33:33 test named: named startup succeeded
|
呵呵!看起来似乎是没有问题的样子了!好了!那么就直接来测试看看吧!
- 测试:
这部分请参考: Client 端的测试项目
特别说明:Forwarders 的好处与问题分析
关于 forwarder 的好处与坏处,其实有很多种的意见!大致的意见可分为这两派:
- 利用 Forwarder 的功能来增进性能的理论:
这些朋友们认为,当很多的下层 DNS 主机都使用 forwarder 时,
那么那个被设置为 forwarder 的主机,由于会记录很多的信息记录(请参考图三的说明),
因此,对于那些下层的
DNS 主机而言,会增快很多,亦即会节省很多的查找时间!基本上,这些基本的流程可以看成如下图所示:
图六、Forwarder 参数的运作说明
所有的 cache-only 都设置 forwarder 为『主 DNS 主机』那一部,则由于主
DNS 主机已经记录了较多的信息了(每个人都来要求嘛!)所以,当其他人来要求相同的查找数据时,则主
DNS 那部机器将会直接由其 cache 当中读取,因此,查找效率就变快了!
- 利用 Forwarder 反而会使整体的性能降低:
但是另外一派则持相反的见解!这是因为当主
DNS 本身的『业务量』就很繁忙的时候,那么您的 cache-only
主机还向他要求数据,那么因为他的数据传输量太大,带宽方面可能负荷不量,而太多的下层
DNS 又向他要求数据,所以他的查找速度会变慢!因为查找速度变慢了,而您的
cache-only 主机又是向他提出要求的,所以自然两边的查找速度就会同步下降!
很多种说法啦!鸟哥本人也觉得很有趣哩!只是不知道哪一派较正确就是了
>_<"" ,不过可以知道的是,如果上层的 DNS 速度很快的话,那么他被设置为
forwarder 时,或许真的可以增加不少性能哩!
DNS 主机的详细设置:
接下来我们就来架设一部完整的 DNS 主机吧!如同前面说的,我们必须要设置的文件有几个呢?
- /etc/named.conf
- /var/named/named.root
- /var/named/named.localhost
- /var/named/named.127.0.0
- /var/named/named.正解文件
- /var/named/named.反解文件
大概就是这几个!要注意的是,除了第一个 /etc/named.conf 的文件名是缺省的之外,其他的文件名都是在
/etc/named.conf 里面设置的!那么底下我们就以鸟哥家里的 DNS 主机设置来说明一下俺是如何设置我的
domain name 啰!要注意的是,这里的 DNS 设置是『私有网域的设置』状态,
如果您刚刚看过了『
授权』的概念,那么将会知道,
底下我所设置的皆是属于『不合法的
DNS 主机』,这意味着我的 DNS 主机只能够向外查找,但是别人是查不到我的 DNS
主机里面的设置内容的!除非他使用我的 DNS 主机的 IP 啰!不过,嘿嘿!我使用的是私有
IP ,想要使用我的 DNS !哈哈!门都没有~
- 手动规划 hostname 与 IP 的对应表:
在作任何事之前,先动手设计一下是好事呐!我假设我的 domain name 是 vbird.tw
而网域为 192.168.1.0/24,主机的名称配合 domain name 来设计的共有三部电脑,分别为:
电脑系统 | 电脑 IP | 电脑名称 | 说明 |
MDK 10.0 |
192.168.1.2 |
mdk.vbird.tw forum.vbird.tw www.vbird.tw ftp.vbird.tw |
这部电脑是主要的 DNS 主机,我的主要名称是 mdk.vbird.tw
,其他三个则是『主机别名!』 |
Win2K | 192.168.1.100 | win2k.vbird.tw | 这部主机名称是记录在 mdk.vbird.tw 里面的纪录数据。 |
WinXP | 192.168.1.200 | winxp.vbird.tw | 这部主机名称是记录在 mdk.vbird.tw 里面的喔! |
要注意的是,在 mdk.vbird.tw 那部机器中,因为该电脑的用途相当的多,
所以我希望那一部主机有多个名称!那么因为目前又只有一个正解的领域,所以就仅设置了这个
domain 里面的三个别名了!所以那部主机总共有四个名字呐!
- 设置简易的 /etc/named.conf 文件:
还记得上面提过的,这个文件才是主要的设置档,而其他的 hostname <--> IP
则是在各个 zone 的设置档中!那么这个文件主要的设置首先在于针对主机的设置,
这一点刚刚 forwarder DNS 主机已经说过了!那另一个则是在定义每一个 zone
的文件名称与该设置 domain 的 『 Type (类型)』,底下介绍三种主要类型,
分别为 master ( 主要设置档 ) 、 hint ( 就是 root 啦 )
以及 slave ( 针对 master 来进行数据同步化的设置档 )。
好了,那么如果以我们刚刚上面规划的设置来看,那么应该有的 /etc/named.conf
设置就会变成底下的模样了:
[root@test root]# vi /etc/named.conf
// 设置整体的主机规划!重点在 directory 的意义!
options {
directory "/var/named";
//这个是在规定『我的正反解文件放置的目录』
forwarders {
168.95.1.1;
//不管怎么说,俺就是喜欢 forwarder 的设置
};
pid-file "/var/run/named/named.pid"; //每个版本可能都不同!
allow-query { any; }; //是否允许他人查找?当然啦!
allow-transfer { none; };
}; //上面这个设置项目,主要针对 Master/Slave 的架构,
//亦即是否允许来自 slave 端的要求而提供整个 zone 的发送!
//近年来由于一些安全性的问题,所以,这里我们建议将他设置为 none
// 首先定义出 . (root) 这个 hint type 的文件内容!
zone "." { //看到了没!?这个就是所谓的 zone 啦!
type hint; //选择的 type 为 hint (root . 专用)
file "named.root"; //设置文件的文件名!缺省为 named.root
}; //有的时候也可能是 named.ca 喔!
// 再来则是定义出 localhost 的正反解了!很简单啦!就是 127.0.0.1 而已
zone "localhost" { //这个 zone 表示设置档的缺省 domain
//name 为 localhost 的意思喔!这里请『特别』搞清楚!
type master; //主要的在本机的设置档!
file "named.localhost"; //文件名!可以随自己高兴随便取!
};
zone "0.0.127.in-addr.arpa" { //反解的 IP 网段!那个 in-addr.arpa 是
//固定的 IP 段写法!
type master;
file "named.127.0.0";
};
// 定义出我自己的这一组正反解设置!
zone "vbird.tw" { //我的 zone 的 domain name 为 vbird.tw
type master;
file "named.vbird.tw";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
};
|
要特别留意的是:
- options
- directory:这个设置值就是在规范每一个 zone 的文件放置的目录。
举例来说,如果是 localhost 的正解档,亦即是 named.localhost 时,
那么这个文件的放置位置就是在 /var/named/named.localhost 啦!这样可以了解吗?
未来您可以自己改变自己文件放置的地方,就可以分的比较清楚!不过,习惯上还是放置在 /var/named 里面!
- pid-file:指的是每一个 services 的记录自己的
PID ( Process ID ) 的文件啰!这个文件通常用在重新启动或者是 reload 整个
services 最常被使用到的!因为可以使用 kill -1 PID
来重新启动啊!嗄!忘记什么是
PID
?赶快拿出『鸟哥的 Linux 私房菜 -- 基础学习篇』
复习一下!
- forwarders (不要忘记那个 s 喔!):
就是要设置往前寻找的那个『合法』的
DNS 啰!每一个 forward 的主机之 IP 都需要有『 ; 』来做为结尾!
- 关于 . (root) 的内容:
root 最重要的就是那个 hint 的 type 啦!记得写对喔!
- 关于 localhost 的正反解:
正反解的名称都可以随意设置,不过,要特别留意的就是那个
zone 后面接的其实就是『 domain name 』!这个 domain name
未来在 zone 的设置档当中会使用得很频繁喔!
- 关于其他 domain 的正反解:
其实与 localhost 没有什么不同的,就只是不同的 domain name 就是了!
- 反解的写法:
反解的 Zone 的写法较为特殊,他必须要将
IP 反过来写的,例如 127.0.0.0/24 这个 C class 的网域,要写的话,则必须要反过来写成
0.0.127 这样的形式!其中需要注意的是,最后面务必要加上『
in-addr.arpa』的咚咚!不要忘记了喔!
- 设置 . ( root ) 的内容:
一般来说,如同图三的流程解说一般,如果在本机上查找不到某部主机的 IP,
而我们的 DNS 主机又没有设置 forwarders 时,那么 DNS 主机通常就是直接到
. ( root ) 去查找啰!但是我们怎么知道 root 在哪里呢?总还是需要有 IP 吧!没错啰!
这时候就需要 hint 这个 type 来支持啦!一般来说,在 BIND 这个套件发布时,都会附上 .
也就是 named.root (或 named.ca )这个文件的,如果没有的话,没有关系,我们可以连接上管理国际
domain name 的机器,那就是 rs.internic.net 这部机器去下载啰!您可以这样做:
[root@test root]# ftp rs.internic.net
Connected to rs.internic.net.
Name (rs.internic.net:root): anonymous
331 Guest login ok, send your complete e-mail address as password.
Password: <==your password
230 User ftp logged in. Access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd domain
ftp> get named.root
ftp> bye
|
赶紧来看一下这个 named.root 文件的内容吧!
[root@test root]# vi named.root
; 抱歉,版权声明部分先省略~
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
;
; formerly C.PSI.NET
;
; 以下省略
|
共有若干个的主机,注意喔!那个『 ; 』是设置档的注解,与 /etc/named.conf
又不一样!特别留意,不要搞错了!然后您会发现每个『 . 』都有个 NS 与 A 的对应,
注意看到粗体字的那两行,第一行意思是
. 的 name server (NS) 为 『A.ROOT-SERVERS.NET. 』最后面有没有加上
. 是不一样的!特别留意!而这个 nameserver 的 IP ( 用A对应 ) 为
198.41.0.4 !!其他的用途我们在下一个文件再来谈!总而言之,
这个文件不要去改他 !因为这个是国际上通用的数据,不能修改啦!改了反而会找不到 . 哩!
- 设置本机端 ( localhost ) 的正解文件:
每一部机器都有 localhost 嘛!所以呢,我们就先来针对 localhost 这个网域的电脑对应来设置一下啰!
而由于 localhost 通常其对应的 IP 就是 127.0.0.1 ,所以就直接给他正解有这两个就行啦!
但是要特别留意的是,『我的正解要找哪一个 nameserver !?』因此,在底下的设置档当中,
最重要的其实就是要使用 NS 这个 nameserver 的『主机名称』标志啦!
[root@test root]# cd /var/named
[root@test named]# vi named.localhost
$TTL 600 ; 这个跟清除 cache 的时间有关系!单位是秒!
@ IN SOA localhost. root.localhost. (
2002120601 ; Serial 与 master 及 slave 是否同步有关!
; 一般而言,如果这个数值变大了, slave 才会同步更新!
28800 ; Refresh 定义出 slave 多久会主动的检查 serial
; 的值,以便主动的更新数据库!
14400 ; Retry 定义出,如果 slave 没有连上 master DNS
; 主机则多久之后会重新再次的主动检查!
720000 ; Expire 如果一直没有连接上 mater ,那么到了
; 这个时候slave 就会放弃检查的动作了,不再更新!
86400 ) ; Minimum 这个其实就是 TTL 啦!如果您没有定义
; TTL ,那么 TTL 的值就以这个来设置!
; 开始设置正解的信息内容:
@ IN NS localhost. ; 特别留意最后面有个 . 喔!
localhost. IN A 127.0.0.1
; A 是正解里面 hostname 对应 IP 的标志
|
上面有很多的怪怪的字眼,我们得要先说明一下,否则后面您会『雾煞煞』的!
符号 |
说明 |
$TTL |
- 这个东西主要在:『定义出向外查找的数据可以记录在 DNS 的 cache 当中多久』的意思;
- 后面接的数字单位为秒;
- 通常这个数字如果定义太大的话,例如一天(86400)时,那么当别人更改了他的 DNS 消息时,
由于您的 cache 更新时间为一天,所以得要一天之后 cache 当中的数据才会被取代,因此,在一天之内,
您查找到的信息『都会是旧的!』
- 但是这个数字如果定的太小的话,例如五分钟(300)那么这部 DNS 将会不断的向外要求数据,
则负荷会变的较大啦!
- 其实,除非是在测试阶段,不然的话,通常都会建议定义一天的 cache 时间啰!
- 注意:某些套件上面并不能定义这个咚咚!
|
@ |
这个就是 zone 定义出的那个咚咚啦!以这个文件内容为例,因为我们在 /etc/named.conf
当中就是定义出 localhost 这个 domain name 为一个 zone 的,因此,呵呵!在这里,
这个符号就代表 localhost 啦! |
SOA |
- 这个是 Start of Authority 开始设置的内容的意思啦!也就是接在后面的设置要开始了!
请注意,这个咚咚在每个『zone 的设置档』当中都会存在!所以,每个 zone 的设置都一样即可!
- 在 SOA 后面会接两个咚咚,第一个为主机名称( localhost. ),请特别留意那个 localhost
后面有个小数点 (.) 这个东西很重要!他代表『一个完整的 hostname + domain name 了』!
如果没有加上 (.) 的话,那么就表示该文本『仅为 hostname ,还需要加上 domain name 』!
这里是新手最容易出现的错误喔!第二个为管理员的 e-mail !因为不能使用 @ (已经是特殊符号了),
所以这里也同样的以 (.) 来取代!例如上面我以 root@localhost 来做为我的 e-mail
,所以就写成了 root.localhost. ,同样的,最后面有个 (.) 喔!
- 在最后,会有小刮号 ( ) 括起了五个数字,这五个数字除了最后一个与 TTL 有关之外,
其他的都跟 slave 与 master 的数据同步运作有关!
- Serial :这个数字仅是用来做为 master 与 slave 之间的
update 的参考数值也就是说,当 Slave 的 serial 小于 Master 时,
那么 update 才会动作!由于担心设置者的设置技巧问题,因此通常我们以时间来做为
Serial 的订定依据,例如 2002 年 12 月 6 日第一次设置,可以写成
『2002120601』请注意,这个数字不可超过 10 个数字。
- Refresh :命令 slave 多久进行主动更新的时间;
- Retry :如果到了 Refresh 的时间,但是 slave 却无法连接到 master 时,
那么在多久之后,slave 会再次的主动尝试与主机连接;
- Expire :如果 slave 一直无法与 master 连接上,那么经过多久的时间之后,
则命令 slave 不要再连接 master 了!
- Minimun :这个就有点像是 TTL 啦!
另外,各个值是有大小限制的,他们的限制是:
- Serial <= 2^32
- Refresh >= Retry * 2
- Refresh + Retry < Expire
- Expire >= Retry * 10
- Expire >= 7Days
|
NS |
- 表示 name server 的意思,后面接的都是『hostname 或 FQDN』这个表示前面的 domain
是由后面的这个主机所管理的啦!
- 『 @ IN NS localhost. 』这一行的意思是说,@ ( zone ,亦即是 localhost 这个 domain )
的管理的 Name Server 为 localhost 这部主机,请注意,那个 localhost 后面一定要接 (.)
才行!为什么呢?因为如果没有加上 (.) 的话,那么主机名称将会变成 localhost.localhost ! Why ?
这是因为 BIND 缺省情况中,没有写 . 的话,那么则表示该名称为 Hostname 而已,需要再加上
domain name 才行!
- 由于 Name Server 为主机的名称,所以后续还要加上这个 name server 的正解的 IP
对应(就是底下要谈的 A )才行!
|
A |
这是正解的符号啦!也就是说,前面的 localhost. (还是得要注意那个 . )所对应的 IP 为 127.0.0.1 的意思啦! |
. |
呵呵!再次的给他强调下,在 BIND 的设置档当中,关于主机名称的话,最后面有没有加上 .
是差很多的!加上了 . 表示这个『完整的主机名称,亦即是 hostname + domain name 』了,
如果没有加上 . 的话,表示该名称仅为『 hostname 』而已!切记切记! |
这样可以了解上面的意思了吗?呵呵!这个是最基础的几个项目喔!千万要记得!不要忘记了~
好了,知道了正解之后,我们要来谈一谈那个反解的东西啦!
- 设置本机端 ( localhost ) 的反解文件:
反解跟正解一样,还都需要 SOA 的标号,也需要 NS 这个咚咚,唯一不同的大概就是由
IP 对应成为 hostname 的不同了吧!
[root@test root]# cd /var/named
[root@test named]# vi named.127.0.0
# 这个文件名称是在 /etc/named.conf 里面设置
$TTL 600
; This is about DNS server's settings
@ IN SOA localhost. root.localhost. (
2002120601 ; Serial
28800 ; Refresh
14400 ; Retry
720000 ; Expire
86400 ) ; Minimum
; The server's infomations
@ IN NS localhost.
1 IN PTR localhost.
|
上面前几行跟前面一样,就不提了!只有最后一行不一样,那个是什么呢?
符号 |
说明 |
PTR |
- 这是反解的符号啦!主要还是在于 IP 对应主机名称的咚咚!要注意的是,由于这个文件的 zone
为 127.0.0 ,所以我们只要加一个数字(最后一个数字)就可以啦!而那个 1 表示的就成为了 127.0.0.1 啰!
- 那么万一今天我们规划的是 B Class 的 zone 呢?例如 127.0 这样的 zone 呢?很简单啦!
就填两个数字即可!也就是 0.1 啰!
- 最重要的东西就是:在规划 zone 的时候,是很重要的,而反解的 zone 的名称最后需要接上
in-addr.arpa,这点也请千万不要忘记了!
|
因为这个 domain (localhost) 就只有一部机器,所以我们很简单的就可以将他设置完成了!
底下,我们将要设置我们自行假设置三部主机喔!
- 设置 domain name 的正解:
再来设置的就是刚刚我们先前提到的三部主机了,您可以这样设置:
[root@test root]# cd /var/named
[root@test named]# vi named.vbird.tw
# 这个文件名称是在 /etc/named.conf 里面设置
$TTL 600
; 跟上面提到的一样,设置主机的一些基本信息!
@ IN SOA mdk.vbird.tw. root.mdk.vbird.tw. (
2004102901 ; Serial
28800 ; Refresh
14400 ; Retry
720000 ; Expire
86400 ) ; minimum
; 主机的设置参数部分
@ IN NS mdk.vbird.tw.
; 这个 zone (vbird.tw) 的主机
@ IN MX 10 mdk.vbird.tw.
; 邮件转递的主要邮件主机!
mdk IN A 192.168.1.2
mdk IN TXT "The testing DNS server"
; 仅是说明文档
phorum IN CNAME mdk
;注意这行与下一行的写法!
www IN CNAME mdk.vbird.tw.
; 其他主机的设置信息上面
win2k IN A 192.168.1.100
win2k IN HINFO "AMD-K6-III""Windows 2000"
winxp IN A 192.168.1.200
|
除了先前的 master 与 slave 相关的时间参数之外,还有那个重要的 NS 以及
A 这些参数之外,里面的参数主要有底下几个新鲜玩意儿:
符号 |
说明 |
SOA |
特别注意到 SOA 那一行的设置喔!因为我们要设置的已经是 vbird.tw 这个 Zone
了,所以请修改一下您的主机名称,还有 DNS 主机的管理员邮件地址喔!
- 另外,还是再次的提醒那个 . 是什么东西!
|
MX |
- 这个东西就是 Mail eXchanger (MX) 的简写,他的用途在使用于邮件主机时,
需要的信件转递站!用于一般主机是没有多大的影响,但是对于 mail server 则有相当重要的影响哩!
- 如果不知道如何使用这个玩意儿,没有关系,您可以直接将您的主机名称(FQDN)写入!
以我上面的例子来说,我就将邮件主机写成我自己的主机,注意,最好是 FQDN 喔!
- 如果您的邮件主机没有 MX 这个设置其实也没有关系啦,信件还是可以发送到达的,但是,
有时后就是会比较慢一些些收到对方寄来的信件就是了!
- 请注意 MX 后面要接上一个数值喔!您可以设置多个邮件主机,但是请特别留意的是,
被设置的邮件主机必须要能够支持您的邮件之 relay 才行,否则设置会变成无效的!
|
TXT |
- 这个东西在进行『说明』而已!亦即是前面那部主机的一些信息。
- 特别注意的是,没事的话,『信息不要写得太详细,有的时候甚至应该要写些错误的消息!』
为什么呢?如果写得太详细的话,那么那些个 cracker 不就很简单的就可以将您的网站信息取得,
并进而入侵了吗? @_@
|
CNAME |
这个东西就是设置主机别名的咚咚啦!因为我们的主机有很多个名字,
没有必要为每个名字都创建一个 A 的标号,这个时候,我们就可以使用 CNAME
来设置另外一个别名!以上面为例,我设置了两个别名在我的主机上面,特别留意的是两个 CNAME
的写法都指向同一部机器,上面关于 CNAME 的那两行最大差异性在于写的是否为 FQDN
与后面有没有加上 . 这个标志啦! ^_^ |
HINFO |
这个东西后面接两个咚咚,第一个接的是硬件的等级,第二个接的则是操作系统,
这两个咚咚最好不要用在公开的 DNS 主机上面,跟 TXT 一样的问题啦!如果要设置的话,
最好使用双引号分隔开来喔! |
这样应该就设置妥当啰!请额外注意喔!在 DNS 的正解部分,他的重要信息特别的多,
比较难设置的意思就对了~所以,您需要特别留意每个设置值是否为正确喔!一般而言,
我们会建议大家,设置完成之后,并且运行完启动的 script ,千万要记得去
/var/log/messages 里头看一看有没有错误消息喔!
- 设置 domain name 的反解:
设置反解要简单的多了~只要找到对应的 hostname 即可:
[root@test root]# cd /var/named
[root@test named]# vi named.192.168.1
# 这个文件名称是在 /etc/named.conf 里面设置
$TTL 600
@ IN SOA mdk.vbird.tw. root.mdk.vbird.tw. (
2004102901 ; Serial
28800 ; Refresh
14400 ; Retry
720000 ; Expire
86400 ) ; minimum
; 其他主机的信息!
@ IN NS mdk.vbird.tw.
2 IN PTR mdk.vbird.tw.
; The following is about other hosts
100 IN PTR win2k.vbird.tw.
200 IN PTR winxp.vbird.tw.
|
很简单吧!就是 IP 的对应即可!
- 启动 named 与 port 及消息确认:
又到了启动的时刻了!加油!
1. 开始启动!
[root@test root]# /etc/rc.d/init.d/named start
Starting named: [ OK ]
2. 关于 port 观察:
[root@test root]# netstat -tuln | grep 53
tcp 0 0 192.168.1.2:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
udp 0 0 192.168.1.2:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
3. 关于消息的内容!
[root@test root]# tail -n 15 /var/log/messages
Oct 29 17:30:33 test named[27159]: using 1 CPU
Oct 29 17:30:33 test named[27159]: loading configuration from
'/etc/named.conf'
Oct 29 17:30:33 test named[27159]: listening on IPv4 interface
lo, 127.0.0.1#53
Oct 29 17:30:33 test named[27159]: listening on IPv4 interface
eth0, 192.168.1.2#53
Oct 29 17:30:33 test named[27159]: zone 0.0.127.in-addr.arpa/IN:
loaded serial 2002120601
Oct 29 17:30:33 test named[27159]: zone 1.168.192.in-addr.arpa/IN:
loaded serial 2004102901
Oct 29 17:30:33 test named[27159]: zone localhost/IN: loaded serial
2002120601
Oct 29 17:30:33 test named[27159]: zone vbird.tw/IN: loaded serial
2004102901
Oct 29 17:30:33 test named[27159]: running
Oct 29 17:30:33 test named[27159]: zone vbird.tw/IN: sending notifies
(serial 2004102901)
Oct 29 17:30:33 test named: named start succeeded
|
- 可能的设置错误问题:
基本上,DNS 算是很难设置的一个 Server 了,所以在调试方面请务必小心!
他的设置错误通常有两种情况:
- 语法设置错误:
这个问题比较好解决,因为在 /var/log/messages
里面都已经说的很清楚了!按照内容去修订即可;
- 逻辑设置错误:
这个就比较困扰了!为什么呢?因为他主要发生在您设置
DNS 主机的时候,考虑不周所产生的问题!例如忘记加上 (.) ,
系统不会显示错误消息,但是却会造成查找的误判,而
MX 设置的主机名称错误,也不会出现有问题的消息,但是 mail server
就是会收不到信等等~这些错误都需要很详细的
DNS client 的测试才能知道问题的所在。
我们这里先就语法设置错误方面进行介绍,至于逻辑设置的问题,那个就需要多多的进行测试才能知道了~
底下的错误消息都会记录在 /var/log/messages 里面喔!
Dec 10 11:34:21 test named[31185]: /etc/named.conf:18: missing ';'
before '}'
Dec 10 11:34:21 test named[31185]: loading configuration: failure
Dec 10 11:34:21 test named[31185]: exiting (due to fatal error)
# 这样的错误就是发生在 /etc/named.conf 的地 18 行,忘记加上 ;
# 符号了!去修正即可!
Dec 10 11:37:20 test named[31236]: dns_rdata_fromtext:
named.localhost:9: near eol: unexpected end of input
Dec 10 11:37:20 test named[31236]: zone localhost/IN:
loading master file named.localhost: unexpected end of input
# 这样的错误通常就是发生在 named.localhost 的第 9 行处,去修正看看,
# 通常在前面几行很有可能是 SOA 后面接的五个数字没有写全的原因!
Dec 10 11:42:28 test named[31338]: dns_master_load:
named.localhost:14: unexpected end of line
Dec 10 11:42:28 test named[31338]: dns_master_load:
named.localhost:13: unexpected end of input
Dec 10 11:42:28 test named[31338]: zone localhost/IN:
loading master file named.localhost: unexpected end of input
# 同样的,告诉您在该文件 named.localhost 有问题!请查证!
|
通常最大的原因真的就是打错字啦!总之,赶紧去看看 /var/log/messages
的内容,一定可以让您更了解错误的问题喔!
- 测试:
这样就设置完成了!接下来,请查阅 在 Client 端的测试 吧!
Master/Slave 架构的详细设置:
如同我们在前面提到的,如果您有多部 DNS 主机管理同一个领域名称的话,
那么为了节省维护成本,以 Master/Slave 架构来规划主机的配置实在是不错的一个方式!
因为,如果需要修改 zone 的主机名称与 IP 的对应数据,则只要更改 Master 那部主机即可!
在 Master/Slave 的架构下,Master 的设置与前一小节的设置是相同的,
只不过需要设置预定被发送的 zone 的 allow-transfer 项目值而已!
至于 slave 部分,他不需要预定要发送的 zone 的文件,因为该文件会自动产生~
底下我们就来设置一下吧!
- 草案规划
同样的以上一小节的案例来说明,我的 Master 管理的是 vbird.tw 这个领域名称,
他所需要设置的文件有六个,分别是设置档 /etc/named.conf,以及 zone 的数据表,
在 /var/named 里面的 named.root, named.localhost, named.127.0.0, named.vbird.tw
named.192.168.1 等等。
至于 slave 方面,同样需要设置 /etc/named.conf ,不过,在 zone file 方面,他仅需要
named.root, named.localhost, named.127.0.0 而已,另外两个文件会自动创建!
- Master 的设置
Master 的设置与上一小节几乎完全相同,只是要变一个设置值,请修改 /etc/named.conf 成为这样:
....(略)....
zone "vbird.tw" {
type master;
file "named.vbird.tw";
allow-transfer { 192.168.1.21; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
allow-transfer { 192.168.1.21; };
};
....(略)....
|
亦即我仅允许 192.186.1.21 取得我的 zone file 的所有内容之发送啊!其他的几个文件都与前一小节相同。
- Slave 的设置
至于 Slave 的设置方面,在 /var/named 里面的 named.root, named.localhost,
named.127.0.0 都可以直接由 Master 拷贝过来,而 /etc/named.conf 也可以直接拷贝过来,
只要修改成底下这样即可:
[root@test2 root]# vi /etc/named.conf
....(略)....
zone "vbird.tw" {
type slave;
file "named.vbird.tw";
masters { 192.168.1.2; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "named.192.168.1";
masters { 192.168.1.2; };
};
....(略)....
|
看到了吗?在 Master 的部分允许来自 192.168.1.21 这个 slave 的要求,而 slave
就是向 192.168.1.2 这个 master 要求 zone file 的发送!在这样的设置完毕之后,
两边均同时启动 named ,在 Slave 就会自动的创建两个 zone file 啰!
未来,您要增加其他的主机名称与 IP 对应的数据,只要在 Master 那部主机上设置好,
并重新启动 named ,那么 Master 会依据 serial number 来判断是否通知 slave 前来更新,
此外, Slave 也会依据设置的时间值,自动的来 Master 读取数据喔!
如此一来,管理上面是否真的比较容易呢! ^_^y
Client 端的设置:
说完了在 DNS Server 端的设置,接下来,我们再来聊一聊关于 Client 端的设置与测试!
从前面的说明里面,我们晓得主机名称对应到 IP 有两种方法,早期的方法是直接写在文件里面来对应,
后来比较新的方法则是通过 DNS 架构!那么这两种方法目前的使用状态是怎样的呢?
- 文件设置:
既然已经完成了 DNS 主机的设置,接下来自然要进行 Client
端的连接测试啦!要怎么测试呢?底下有几个文件请特别留意喔:
- /etc/hosts :刚刚上面就提过了,这个是最早的 hostname 对应 IP 的文件;
- /etc/resolv.conf :这个重要!就是 DNS 主机的 IP,您的
Client 就是利用这里面设置的 IP 去追踪名称解析的。
- /etc/nsswitch.conf:这个文件则是在『决定』先要使用
/etc/hosts 还是 /etc/resolv.conf 的设置!
一般而言, Linux 的缺省 hostname 搜索都是先 /etc/hosts 来的,
为什么呢?您可以查看一下 /etc/nsswitch.conf ,并找到 hosts 的项目:
[root@test root]# vi /etc/nsswitch.conf
hosts: files nisplus nis dns
|
上面那个 files 就是使用 /etc/hosts 而最后的 dns 则是使用 /etc/resolv.conf
的 DNS 主机 IP 搜索啦!因此,您可以先以 /etc/hosts 来设置 IP 对应ㄋㄟ!
当然啦,您也可以将他调换过来,不过,总是
/etc/hosts 比较简单,所以将他摆在前面比较好啦!
好啦,既然我们是要进行 DNS 测试的,那么 /etc/resolv.conf 的内容,自然就要填写我们自己的
IP 啰!所以您应该这样写:
[root@test root]# vi /etc/resolv.conf
nameserver 192.168.1.2
nameserver 168.95.1.1
nameserver 139.175.10.20
|
DNS 主机的 IP 可以设置多个,这可以让您的个人电脑有备援的功能!举例来说,
我上面共设置了三部主机作为我的 DNS 查找,当 192.168.1.2 那部主机挂点时,
我的 Client 电脑会立刻以第二部主机作为 DNS 查找的主要主机。所以,
通常我们都会建议人家在这个文件内可以设置三个左右的 DNS 主机名称!以保不时之需啊~
另外,上面三个 DNS 的 IP 那个会先被使用?当然是照顺序来的~
所以会先以 192.168.1.2 那部主机来查找,若 192.168.1.2 挂了,才会使用 168.95.1.1 那部来查找。
有个观念得要提醒一下,我们常常建议人家,在自家设的,
没有经过合法授权的 DNS 最好不要以 Internet 上面已经存在的领域名称来练习架设!
举例来说,假设今天我以我的 192.168.1.2 那部机器来架设 *.yahoo.com 的领域,
也就是说,在 192.168.1.2 那部机器是有提供 yahoo.com 的 zone 的数据的(注:那是虚拟的~)
但是因为我将 192.168.1.2 放置在第一位,导致每次的查找其实 yahoo.com
这个领域的数据都是直接由 192.168.1.2 所提供,这很不好~因为可能会造成您的用户端的不便~
好了,我们要测试我们的 DNS 主机设置是否正确啰!
- 测试 DNS 设置:
测试 DNS 的程序有很多,我们先来使用最简单的 host 吧!然后还有 nslookup 及 dig 哩!
host
语法:
[root@test root]# host [-a] [FQDN] [server]
[root@test root]# host -l [domain] [server]
参数说明:
-a :所有的信息都列出来,列出的信息包含有 TTL
DNS 主机的IP,所欲寻找的主机的 IP 等等,数据丰富啊!
-l :将后面接的 domain 内的所有的 host 都列出来!不过,这个项目要能够
被利用,就必须要有 allow-transfer 的项目在 /etc/named.conf 里面被启动!
server:这个参数可有可无,当想要利用非 /etc/resolv.conf 内的 DNS 主机
来查找主机名称与 IP 的对应时,就可以利用这个参数了!
范例:
# 强制以我的 192.168.1.2 这部 DNS 主机来查找
[root@test root]$ host mdk.vbird.tw 192.168.1.2
Using domain server: <==如果加上最后的 192.168.1.2 这个 server 的参数
Name: 192.168.1.2 <==那就会出现这三行字眼,表示用的 DNS 主机不是
Address: 192.168.1.2#53 <==/etc/resolv.conf 所欲设的 DNS 主机!
mdk.vbird.tw has address 192.168.1.2
# 很简单吧!立刻找到 IP 啰!
[root@test root]$ host -a mdk.vbird.tw 192.168.1.2
Trying "mdk.vbird.tw"
Using domain server:
Name: 192.168.1.2
Address: 192.168.1.2#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41087
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1,
ADDITIONAL: 0
;; QUESTION SECTION:
;mdk.vbird.tw. IN ANY
;; ANSWER SECTION:
mdk.vbird.tw. 600 IN A 192.168.1.2
mdk.vbird.tw. 600 IN TXT "The testing DNS"
;; AUTHORITY SECTION:
vbird.tw. 600 IN NS mdk.vbird.tw.
Received 95 bytes from 192.168.1.2#53 in 6 ms
# 在这个范例当中,我们可以看到整个显示出的消息包括有几个部分:
# HEADER(标题)部分==>显示查找的内容有哪些,包括一个 query, 两个 answer
# 及一个验证部分。
# QUESTION(问题)====>显示所要查找的内容,因为我们是查找 mdk.vbird.tw
# 所以这里自然就是显示这个消息。
# ANSWER(回应)======>依据刚刚的 QUESTION 去查找所得到的结果,因为在我们的
# 设置当中仅有设置了 A 与 TXT 的标签,所以这里自然就....
# AUTHORITY(验证)===>由这里我们可以查阅 vbird.tw 这个领域是由 mdk.vbird.tw
# 来设置的~
# 里面那个 600 是什么呢?很简单,他就是我们所设置的 ttl 那个数值啦!
[root@test root]$ host -l vbird.tw 192.168.1.2
Using domain server:
Name: 192.168.1.2
Address: 192.168.1.2#53
Aliases:
vbird.tw name server mdk.vbird.tw.
mdk.vbird.tw has address 192.168.1.2
win2k.vbird.tw has address 192.168.1.100
winxp.vbird.tw has address 192.168.1.200
# 上面的信息可就熟悉多了吧?!没错!那就是我们在
# /var/named/named.vbird.tw 里面的设置值啊!
# 不过,并不是所有的 domain 都可以作这样的事情~举例来说,如果我们下达:
# host -l tw.yahoo.com 则将会得到:
# Host tw.yahoo.com not found: 5(REFUSED)
# ; Transfer failed.
# 这样的回应,这是因为在 /etc/named.conf 里面并没有设置 allow-transfer
# 那个设置选项的原因啊!
|
事实上,使用 host 几乎就可以达到我们的要求了~也不需要什么其他的指令~
不过,其实还是得要知道其他的查找指令啦~
nslookup
语法:
[root @test root]# nslookup [FQDN]
[root @test root]# nslookup
参数说明:
如果在 nslookup 后面没有加上任何主机名称或 IP ,那将进入 nslookup 的查找功能
在 nslookup 的查找功能当中,可以输入两个参数来进行特殊查找:
set type=any :列出所有的信息『正解方面设置档』
set type=mx :列出与 mx 相关的信息!
范例:
[root@test named]# nslookup win2k.vbird.tw 192.168.1.2
Server: 192.168.1.2
Address: 192.168.1.2#53
Name: win2k.vbird.tw
Address: 192.168.1.100
# 单纯的将 hostname 与 IP 对应列出而已,不过,
# 还是会将查找的 DNS 主机的 IP 列出来的!
[root@test named]# nslookup <==进入 nslookup 查找画面
> 192.168.1.2<==运行反解的查找
Server: 192.168.1.2
Address: 192.168.1.2#53
2.1.168.192.in-addr.arpa name = mdk.vbird.tw.
> www.vbird.tw <==运行正解的查找
Server: 192.168.1.2
Address: 192.168.1.2#53
www.vbird.tw canonical name = mdk.vbird.tw.
Name: mdk.vbird.tw
Address: 192.168.1.2
> tw.yahoo.com <==运行非本机上的查找
Server: 192.168.1.2
Address: 192.168.1.2#53
Non-authoritative answer:
tw.yahoo.com canonical name = vip1.tw.tpe.yahoo.com.
Name: vip1.tw.tpe.yahoo.com
Address: 202.43.195.52
> set type=any <==显示所有查找的信息
> mdk.vbird.tw
Server: 192.168.1.2
Address: 192.168.1.2#53
Name: mdk.vbird.tw
Address: 192.168.1.2
mdk.vbird.tw text = "The testing DNS server"
> exit
|
在上面的案例当中,请注意,如果您在 nslookup 的查找画面当中,输入 set type=any 或其他参数,
那么就无法再进行反解的查找了!这是因为 any 或者是 mx 等等的标志都是记录在正解 zone 当中的缘故!
dig
语法:
[root @test root]# dig [@server] [-t type] [FQDN]
参数说明:
-t type :查找某主机的某个标签,例如 MX/NS 等等,以及所有标签 any 等
@server :如果不想以 /etc/resolv.conf 来作为 DNS 主机,则可在此填入
其他的 DNS IP!
范例:
[root@test root]$ dig @192.168.1.2 mdk.vbird.tw
; <<>> DiG 9.2.3 <<>> @192.168.1.2 mdk.vbird.tw
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40211
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;mdk.vbird.tw. IN A
;; ANSWER SECTION:
mdk.vbird.tw. 600 IN A 192.168.1.2
;; AUTHORITY SECTION:
vbird.tw. 600 IN NS mdk.vbird.tw.
;; Query time: 4 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Sun Oct 31 12:24:00 2004
;; MSG SIZE rcvd: 60
# 我用我的 DNS 主机 192.168.1.2 去查找 mdk.vbird.tw 这个主机,
# 可以得到 A 与 NS 的结果!与 host -a mdk.vbird.tw 是否很类似啊!
[root@test root]$ dig @192.168.1.2 -t mx mdk.vbird.tw
; <<>> DiG 9.2.3 <<>> @192.168.1.2 -t mx mdk.vbird.tw
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15056
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;mdk.vbird.tw. IN MX
;; AUTHORITY SECTION:
vbird.tw. 600 IN SOA mdk.vbird.tw.
root.mdk.vbird.tw. 2004102901 28800 14400 720000 86400
;; Query time: 4 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Sun Oct 31 15:51:29 2004
;; MSG SIZE rcvd: 71
# 在这个查找方面,则主要在查找正解 zone 的 MX 标志。
|
事实上, host 与 dig 的查找输出结果挺类似的,而且 dig 的输出信息更多,
如果您的 DNS 发生不明原因的设置错误问题,可以利用 dig 的相关功能来查找喔!
whois
语法:
[root@test root]# whois domainname
范例:
[root@test root]# whois redhat.com
Registrant:
Red Hat, Inc. (REDHAT-DOM)
P.O. Box 13588
Research Triangle Park, NC 27709
US
Domain Name: REDHAT.COM
Administrative Contact, Technical Contact:
Network, Operations (22271962I) noc@REDHAT.COM
Network Operations Center
Red Hat, Inc.
1801 Varsity Drive
Raleigh, NC 27606
US
919-754-4177 fax: 919-754-3704
Record expires on 25-May-2006.
Record created on 26-May-1994.
Database last updated on 31-Oct-2004 02:57:02 EST.
Domain servers in listed order:
NS3.REDHAT.COM 66.187.229.10
NS2.REDHAT.COM 66.187.224.210
NS1.REDHAT.COM 66.187.233.210
这个指令可以查看注册这个 domain name 的帐号数据,
例如上面的例子当中,就是以红帽公司的领域名称来查找注册者的数据的啊!
|
whois 这个指令可以查找到当初注册这个 domain 的用户的相关信息。不过,
由于近年来很多网络信息安全的问题,这个 whois 所提供的信息真的是太详细了,
为了保护用户的隐私权,所以,目前这个 whois 所查找到的信息已经不见得是完全正确的了~
而且,在显示出 whois 的信息之前,还会有一段声明事项的告知呢~ ^_^y
无论如何,我们都可以通过 nslookup, host, dig 等等的指令来查找主机名称与 IP 的对应,
这些指令的用法可以请您以 man command 来查找更多的用法喔!
高端设置:
其实, DNS 主机的运作原理与架设方式的变化,真的很高深莫测的!在这里,
我们额外的提出一些比较高端的内容给大家参考参考,例如子网域的授权问题,
以及架设一个合法授权的 DNS 主机。
子网域授权问题
好了,那么万一我的网络很大,我只负责上层的 DNS 而已,
下层希望直接交给各单位的负责人来负责,要怎么设置呢?
举个例子来说,以成大为例,成大计中仅管理各个系所的的主机 IP
而已,由于各个系所的主机数量可能很大,如果每个人都要请计中来设置,
那么管理员可能会疯掉,而且在实际设计上也不太人性化。所以啰,计中就将各个
subdomain (子网域) 的管理权交给各个系所的主机管理员去管理,如此一来,
各系所的设置上面会比较灵活,且上层 DNS 主机也不用太麻烦呐!
好了,那么如何开放子网域授权呢?我这里仅说明正解的部分,因为在 ISP
方面通常已经帮我们搞定反解了,所以先不理他!而目前我们去注册的信息上面,
通常仅取得的是正解的设置权,例如鸟哥的个人网域 vbird.idv.tw 就是一个例子!好了,
现在假设在我的 mdk.vbird.tw 上面,要将 win2k.vbird.tw 这个子网域切割出去给
win2k.vbird.tw 管理,那么该怎么办呢?
- 主机端 mdk.vbird.tw 的设置:
主机 mdk.vbird.tw 的设置其实很简单啦!只要将子网域开放出来给别人使用就对了!
怎么设置呢?您可以直接修改 /var/named/named.vbird.tw ,使他变成如下所示:
[root@test root]# cd /var/named
[root@test named]# vi named.vbird.tw
# 再次提醒,这个文件名称是在 /etc/named.conf 里面设置
$TTL 600
@ IN SOA mdk.vbird.tw. root.mdk.vbird.tw. (
2004100601 ; Serial
28800 ; Refresh
14400 ; Retry
720000 ; Expire
86400 ) ; minimum
; 主机的设置参数部分
@ IN NS mdk.vbird.tw.
@ IN MX 10 mdk.vbird.tw.
mdk IN A 192.168.1.2
mdk IN TXT "The testing DNS server"
phorum IN CNAME mdk
www IN CNAME mdk.vbird.tw.
; 子网域分割出去给其他主机管理的例子!
win2k.vbird.tw. IN NS win2k.vbird.tw.
win2k IN A 192.168.1.100
; 本机上面其他主机的设置信息方面
winxp IN A 192.168.1.200
|
上面的特殊字体就是最重要的地方啦!我将 win2k.vbird.tw. 这个网域的 NS 权限(name server)转给
win2k.vbird.tw 这部主机来管理,而底下列出来 win2k.vbird.tw 这部主机的正解信息!
那么未来当有人要查找类似 www.win2k.vbird.tw 时,则先会到 mdk.vbird.tw 来查找,
而查到 win2k.vbird.tw 的网域,因此就会向下游的 DNS 亦即是 win2k.vbird.tw 这部机器查找了!
- 下游主机 win2k.vbird.tw 的设置:
这个设置就简单啦!直接参考一下我们上面写的数据,跟着设置,但是您的
domain name 变成 win2k.vbird.tw 就是了!简单的很呐!所以我就不再多说了~
架设一个合法的授权的 DNS 主机:
好啦!现在您应该知道什么是『
经上游授权的合法 DNS 主机』了吧?!
没错!就是上游的 DNS 主机将子网域的查核权开放给您来设置就对啦!嗯!虽然知道原理,
但是那么我要如何来架设一个合法的 DNS 主机呢?好让我自己管理自己的 domain
!举例来说,鸟哥的 vbird.idv.tw 就是 VBird 自己管理的哩~底下我们就来谈一谈,如何向
ISP 申请一个合法授权的 DNS 主机,或者是合法的主机名称啊!
- 申请一个合法的 domain name
既然是要创建一个合法的 domain name server ,自然就要向合法的 DNS 主机申请授权啰!
目前您可以到底下的地方去申请喔!
其实台湾地区的一些 domain 已经不再于 TWNIC 受理了,所以您连上上述的网站之后,
可以点击里头相关的链接到各大 ISP 去注册!例如鸟哥就注册了 vbird.idv.tw 这个网域!
现在鸟哥就以 Hinet 的注册做为说明吧
- 进入主画面:直接链接到底下的网页去:
http://nweb.hinet.net
- 选择需要的网域名称,并查找该网域是否已存在:
因为网域必需是独一无二的,所以您必需使用该网页当中提供的查找功能,
去查找一下您想要的网域是否已经被注册了呢?一定要没有被注册的网域才可以喔!
- 逐步进行注册:
然后以该网站提供的功能一步一步的往下去进行,例如以鸟哥的『个人网址』之注册为例,
按下个人网址之后,会出现流程步骤为:

- 选择网站代管或架设 DNS 模式:
还记得前面提到的观念吧?对啦!我们可以直接请 ISP 帮我们设置好 host 对应
IP 就好(最多三部),当然也可以自行设置一下我们所需要的 DNS 主机啦!如果未来您可能会架设
mail server ,所以还是自行设置 DNS 主机好了!选择上面图标的第五项『DNS指定/异动』项目,
会出现下面图标。记得选择『DNS』及填写您的 hostname 与正确的 IP 即可喔!注意:
要填选这个项目,最好您的 IP 是固定制的,浮动制的 IP 不建议用这个选项!

- 注册完毕!
- 以 DNS 主机的详细设置
之设置内容来设置您的主机:
如果您已经以 DNS 主机的方式申请了一个 domain name ,那么您就必须要设置您的 DNS 主机了!
请注意,这个情况之下,您只要设置您的注册的网域的正解即可!
反解部分则先不要理会,当然,如果您有办法的话,最好还是请上层的 ISP 帮您设置啰!
- 测试:
如此一来,您的 DNS 主机上面设置的任何信息,都可以通过 Internet
上面的任何一部主机来查找到喔!够棒吧!心动了吗?赶快去试看看吧! ^_^
LAME Server 的问题:
如果您是架设 DNS 主机的新手,那么『一定』会在 /var/log/messages
这个注册表案里面发现到类似这样的消息:
[root@test root]# more /var/log/messages
Oct 5 05:02:30 test named[432]: lame server resolving
'68.206.244.205.in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.200.3#53
Oct 5 05:02:31 test named[432]: lame server resolving
'68.206.244.205.in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 206.105.201.35#53
Oct 5 05:02:41 test named[432]: lame server resolving
'68.206.244.205.in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.112.20#53
|
这是什么东西呐?!根据官方提供的文档数据来看 (
在您的 Red Hat 9 的系统下,请察看这个文件『/usr/share/doc/bind-9.2.1/armBv9ARM.ch06.html』
),当我们的 DNS 主机在向外面的 DNS 系统查找某些正反解时,可能由于对方 DNS
主机的设置错误,导致无法解析到预期的正反解结果,这个时候就会发生所谓的 lame server 的错误!
那么这个错误会让我们的 DNS 主机发生什么严重的后果吗?既然仅是对方的设置错误,
所以
自然就不会影响我们的 DNS 主机的正常作业了。
只是我们的 DNS 主机在查找时,会发生无法正确解析的警告消息而已,
这个消息虽然不会对我们的 Linux 主机发生什么困扰,不过,对于系统管理员来说,
要天天查找的 /var/log/messages 文件竟然有这么多的登录信息,这是很讨厌的一件事!
好了,我们知道 lame server 是对方主机的问题,对我们主机没有影响,
但是却又不想要让该消息出现在我们的注册表 /var/log/messages 当中,
怎么达到这样的功能呢?呵呵!就直接利用 BIND 这个套件所提供的注册表参数啊!
动作很简单,在您的 /etc/named.conf 文件当中的最底下,加入这个参数即可:
1. 修改 /etc/named.conf
[root@test root]# vi /etc/named.conf
// 加入底下这个参数:
logging {
category lame-servers { null; };
};
// 注意一下,那个 logging 是主要的参数,至于 category 则是定义出什么信息,
// 因为我们不要 lame server ,所以选择 lame-servers 这个参数,并定义
// 参数值为 null (空的的意思),这样就修改完成了!
2. 重新启动 bind
[root@test root]# /etc/rc.d/init.d/named restart
|
记得重新启动 named 之后,还是要察看一下 /var/log/messages 喔!
以确定 named 的正确启动与否!然后,嘿嘿,以后就不会看到 lame server 咯!
解决 rndc key 的问题:
由于 BIND 提供了比较安全的 BIND 管理机制,因此,比较新的 BIND 9 以后的版本,
都需要提供所谓的 rndc key ,才能正常无误的启动 Bind 喔!
那么如何提供 BIND 这个 Key 呢?很简单,只要运行 rndc-confgen 就行了!
[root@test root]# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "l6zE+CnSFuteQHxYwIGQqq==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "l6zE+CnSFuteQHxYwIGQqq==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
|
接下来,只要将上表拷贝到 /etc/rndc.conf ,并且将
key "rndc-key" {
algorithm hmac-md5;
secret "l6zE+CnSFuteQHxYwIGQqq==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
|
拷贝到 /etc/named.conf 就可以了!什么时候需要提供这个 Key 呢?
如果妳启动 DNS 的时候,老是在 /var/log/messages 里面发现这一行:
couldn't add command channel 127.0.0.1#953: not found
这就表示您的 DNS 系统必须要提供这个 key 啦!请按表操课吧!
架设动态 DNS 主机:
谈完了上面这么多的设置之后,接下来,我们谈一个比较有趣的咚咚~
那就是
动态 DNS 主机 的设置~
什么是动态 DNS 主机呢?还记得我们在
合法的 DNS 主机
里面提到的,如果我们本身是以拨接制的 ADSL 连上 Internet 的时候,基本上,
我们的 IP 是 ISP 随意提供的,因此每次上网的 IP 都不固定,所以,
我们没有办法以上面的 DNS 设置来给予这种连上 Internet 的方法一个适当的主机名称。
也因此,如果我们想要利用这种没有固定 IP 的连接方法架设网站时,就得要有特殊的管道了~
其中之一的方法就是利用 Internet 上面已经提供的免费动态 IP 对应主机名称的服务!
例如之前提到的 http://www.adsldns.org (但是在 2004/10 月份中旬,这个网站挂点好久好久...)
或者是 http://www.no-ip.org 等等。
提供这样的服务利用的是什么原理呢?基本上, DNS 主机还是得要提供 Internet 相关的 zone
的主机名称与 IP 的对应数据才行,所以,动态 DNS 主机 (Dynamic DNS, 底下我们称为 DDNS 主机)
就必须要提供一个机制,让用户端可以通过这个机制来修改他们在 DDNS 主机上面的名称与 IP 对应数据才行。
我们的 BIND 9 也有提供类似的机制喔!那就是利用 update-policy 这个选项,配合认证用的 key
来进行数据文件的更新。简单的说,
1) 我们的 DDNS 主机先提供 Client 一把 Key (就是认证用的数据,
你可以将他想成是帐号与密码的概念), 2) Client 端利用这把 Key ,并配合 BIND 9 的 nsupdate 指令,
就可以连上 DDNS 主机,并且修改主机上面的 Zone file 内的对应表了。感觉上很像很简单喔!
没错啊!架设上真的很简单的~底下我们就来尝试设置一下喔:
- DDNS Server 端的设置:
如同上面说的,我们必须要提供 client 一把认证用的 key ,那么这把 key 怎么产生呢?
又,如何设置 DDNS 主机呢?这里提供一个案例。
假设我有一部机器,主要是用来作为 WWW 主机用的,
但是没有固定 IP,而我已经有 mdk.vbird.tw 这个 DNS 主机了。假设我的这部 WWW 主机想要的主机名称是
web.vbird.tw 这个主机名称,那该如何设置呢?
产生认证用的 key
我要产生一把 key 给 web 这个主机使用 (领域名称为 vbird.tw),可以这样做:
[root@test root]# mkdir -p /var/named/keys; cd /var/named/keys
[root@test keys]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST web
# -a [密码演算方法]:这个参数后面可以接几种不同的密码演算方式,
# 包括 RSAMD5, RSA, DSA, DH 与 HMAC-MD5 ,
# 在这里,我直接使用比较常用的 HMAC-MD5 这个算法~
# -b [加密字节] :加密的密码长度也是可以控制的!我只用 128 比特而已。
# -n [拥有类型] :这把 Key 是给 Client 用来作为 HOST 更新或者是整个
# ZONE 的更新?一般来说,我们仅允许用户端更新他自己
# 的主机对应,所以只要给予 HOST 的权限就好了!
# name :最后给予这把 Key 一个名称,我这里将这把 Key
# 名称订为 web
Kweb.+157+29323
[root@test keys]# ls -l
total 8
-rw------- 1 root root 47 Oct 31 20:09 Kweb.+157+29323.key
-rw------- 1 root root 81 Oct 31 20:09 Kweb.+157+29323.private
# 最后会产生两个文件,分别是 Kxxx.key 及 Kxxx.private,
# 其中, .key 是主要用来作为 DDNS 主机端设置的公钥,这把 Key 的内容
# 会被拷贝到 /etc/named.conf 里面进行设置喔!
[root@test keys]# more Kweb.+157+29323.key
web. IN KEY 512 3 157 gxHUFoGGRE91YyAVuMBh+Q==
# 特别注意,上面输出的特殊字体中,就是 Key 的内容!
# 这些数据是经过加密的,最后会被拷贝到 /etc/named.conf 里面喔!
|
如此一来,这把 Key 就被设置好了!其中,那个 *.key 的文件内容关于密码的部分,
会被设置于 /etc/named.conf 里面喔!
设置 DDNS 主机上的 named.conf 文件
在设置上面也是挺简单的,只要将 Key 的数据登录进去,再将要开放写入的 zone 设置好
policy (规则) 就好了!
[root@test keys]# vi /etc/named.conf
....(略)....
key "web" {
algorithm hmac-md5;
secret "gxHUFoGGRE91YyAVuMBh+Q==";
};
zone "vbird.tw" {
type master;
file "named.vbird.tw";
update-policy {
grant web name web.vbird.tw. A;
};
};
....(略)....
# 注意到上头的 gran web name web.vbird.tw. A; 那一行,
# gran 后面接的就是 key 的名称,也就是说,我这把 web 的 key
# 在这个 zone (vbird.tw) 里面可以修改主机名称 web.vbird.tw
# 的 A 的标志,亦即是修改主机的 IP 对应啦!语法也就是:
# gran [key_name] name [hostname] 标签
# 也就是说,我的一把 key 其实可以给予多种权限喔!看您如何规范了。
|
设置好之后,给他重新启动,然后观察一下 /var/log/messages 里面有没有错误即可!
如此一来,DDNS 主机端就设置妥当啰!
- Client 端的更新:
接下来则是 DDNS Client 端的更新了。首先,您必须要由 Server 端取得刚刚创建的那两个文件,
请将刚刚创建的 Kweb.+157+29323.key 及 Kweb.+157+29323.private 利用 SSH 的 sftp 发送过来,
我将他放置到 /usr/local/ddns 里面去,然后测试看看:
[root@test keys]# mkdir /usr/local/ddns; cd /usr/local/ddns
# 假设此时您已经将两个文件给他拷贝到此目录下了!
[root@test keys]# nsupdate -k Kweb.+157+29323.key
> server 192.168.1.2
> update delete web.vbird.tw
> update add web.vbird.tw 0 A 192.168.1.222
> send 最后在此按下 [ctrl]+D 即可
# 请注意到 update add web.vbird.tw 0 A 192.168.1.222 这行,
# 他的意义说的是,添加一笔数据, ttl 是 0 ,给予 A 的标签,
# 对应到 192.168.1.222 的意思~
# 至于 nsupdate -k 后面加的则是我们在 Server 端产生的那个 key 文件!
|
然后您就会发现到 /var/named 里面多出一个暂存盘,那就是 /var/named/named.vbird.tw.jnl
当然,/var/named/named.vbird.tw 就会随着 client 端的要求而更新数据喔!
由于手动更新好像挺麻烦的,我们就让 Client 自动更新吧!利用底下这个 script 即可!
[root@test root]# vi /usr/local/ddns/ddns_update.sh
#!/bin/bash
#
# Update your Dynamic IP by using BIND 9 's tools
#
###############################################
# History
# 2004/10/27 VBird First time release
#
##############################################
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
# 0. keyin your parameters
basedir="/usr/local/ddns" # working directory
keyfile="$basedir"/"Kweb.+157+29323.key" # your ddns' key (filename)
ttl=600 # the ttl time ( 10 min. )
outif="ppp0" # Your interface (to internet)
hostname="web.vbird.tw" # Your hostname
servername="192.168.1.2" # The primary DNS server
# 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
的方式在您的系统内自动运行了!
利用 BIND 9 所提供的这个服务,我们只要具有一组固定的 IP ,并向 ISP 申请一个合法授权的 domain name,
就可以提供不论是固定或者是非固定的 IP 用户,一个合法的主机名称了!
并且,用户也可以自行通过 nsupdate 来修改自己的 IP 对应!以让自己的主机 IP
永远与主机名称保持正确的对应!这对只有拨接制上网的用户来说,真是方便啊!
修改历史:
2002/12/10:首次完成
2003/03/10:修改部分内容,并且添加 LPI 相关性与重点整理部分!
2003/09/10:修改了部分的版面,并将 slave DNS 的错误修订完毕!
2003/10/08:添加了
lame server 的说明,与解决之道!
2004/10/29:添加了
rndckey 的说明与解决之道!
2004/10/30:添加了
Master/Slave 的架构设置
2004/10/31:添加了
动态 DNS 主机的设置 。
2005/07/19:增加了 SOA 内五个数字的大小
2008/08/18:更早之前的版本:
按此链接