转贴dns的设定第五章:架设 DNS
发表于:2007-06-09来源:作者:点击数:
标签:
第五章:架设DNS 前面所介绍的伺服器服务大多是用在内部网路环境中的,不过,以现代的情况和未来的趋势来看,每个网路或多或少都需要Internet连线以及向Internet提供服务。从这一章开始,我们将为大家陆续介绍一些在Internet环境中常用到的伺服器之架设技巧
第五章:架设 DNS
前面所介绍的伺服器服务大多是用在内部网路环境中的,不过,以现代的情况和未来的趋势来看,每个网路或多或少都需要 Internet 连线以及向 Internet 提供服务。从这一章开始,我们将为大家陆续介绍一些在 Internet 环境中常用到的伺服器之架设技 巧。就算您目前还没真的需要架设 Internet 相关的伺服器,但许多企业的 Intranet 环境中,也需要相类似的伺服器来为企业内 部网路提供服务。
前提条件
在众多 Internet 伺服器当中,有一种服务是所有服务的基础,就是 DNS 服务。DNS 可以说是一个不容易弄清楚的概念,尤其 是其运作原理。如果您看过“学习网路”中的“ DNS 协定”(我强烈建议您看看这篇文章!),相信应该有一定概念了,否 则,您在如下的阅读中可能难以理解,也浪费您的时间。
无论如何,在您进一步阅读下面文章之前,请您先确定能正确回答如下的问题:
什麽是 DNS 的授权模式?是怎样进行的?
请解释 zone 和 domain 的差别。
什麽是 DNS 正解和反解?
什麽是 DNS 的查询模式?查询过程是怎样进行的?
请解释 DNS cache 的作用和它对查询流程的影响。
如果您未能从上面的联结网页找到答案,那我再推荐您多看一篇文章:
http://turtle.ee.ncku.edu.tw/~tung/dns/dnsintro.html
忠告:请不必急著知道怎样设定 DNS,花点时间将 DNS 的原理弄明白非常重要,尤其是授权模式和查询模式的正确理解。在 日後的 DNS 架设和管理中,是否能正确理解这些 DNS 原理,往往是成败的关键所在!
如果您在 NT 或 Win2K 下面设定过 DNS 伺服器,相信您会觉得在
Linux 下面难多了。除了概念上要比较清楚外,另外对档案 的关联也要有清晰的追踪能力,这对於进行 de
bug 尤为重要。因为在
Windows 系统上面,您的所有设定都透过图形界面进 行,方便是方便,但也因为这个图形界面,限制了您的设定灵活性,同时也阻隔了您对 DNS 系统的深入了解。当您完成了这 章的学习,而且成功在 Linux 架设出复杂的 DNS 环境之後,欢迎您再回到 Win2K 上尝试做同样的事情。或许,您就会认同我 这里的观点了...
好了,闲话休提、言归正传,听百遍不如做一遍,那就让我们开始动手吧! ^_^
探索 NAMED
在 Linux 上面,提供 DNS 服务的套件是叫 bind, 但执行服务程式名称则是 named 。请您确定系统上装有 bind、bind-utils、 以及 caching-nameserver 这几个套件,同时用 ntsysv 确定 named 被选择为开机服务。
首先,让我们设定一个最重要的 dns 设定档,它就是 /etc/named.conf 。我将我自己的设定档案列出来,然後逐部份进行解释:
// generated by named-bootconf.pl
options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you w
ant * to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
先让我们了解这个档案上面用来做注解的符号是“ // ”,而不是一般 shell script 的“#”;另外,“ /* ”与“ */ ”之间则注 解一整段文字。同时,每一个完整的设定都以“ ;”结尾,请不要少了它!(初学者经常会犯这个错误)
上面的部份是在这个档案开头的 options 设定,首先用 directory 指定了 named 的资源记录( RR - Resource Record 

档案目录所 在位置为:“/var/named”;也就是说,它会到这个目录下面寻找 DNS 记录档案。所以,我们在这个档案後面部份所指定的档 案,就无需使用绝对路径了,但它们一定要放在这个目录下面。
接下来,有一段文字,如果您仔细阅读一下,它大致是说:如果您要设定的 DNS 伺服器和 client 之间是隔著火墙的话,要 将“// query-source address * port 53;”前面的注解符号“ // ”拿掉(当然,您也必须要设定好您的火墙啦)。不过,这只对早期 的版本有影响,而在 bind 8.1 之後则无需担心这个设定。
接下来再让我们看下一段句子:
//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "named.ca";
};
透过这几行,我们为 named 定义了 DNS 系统中的根区域“ . ”(root zone) 的设定,同时它是一个 internet ( IN 

的区域类别( class 

。这里还指定了root zone 的伺服器种类( type 

为“hint”(也只有这个 zone 会使用这样的种类)。最後,用 file 指定这 个区域记录档为:“named.ca”,也就是“/var/named/named.ca”档案。虽然 named.ca 这个档案中的‘ca’是 cache 的意思; 但如果您了解 DNS 的运作,就应该知道这个暂存档的作用,同时,为什麽我们会把 root zone 放在这里。(嗯?想想看?尤其 是查询非本机区域的时候?)
在 root zone 後面,您应该还会看到如下这两段:
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
这里是定义出关於本机名称的 DNS 解释:第一个 zone 是 localhost 的正解 zone,其伺服器种类是 master,记录档名称是 localhost.zone (在 /var/named 目录下面),但这个 zone 不允许客户主机(或伺服器)自行更新 DNS 的记录(当然,client 主机必须 能支援 DNS submit 功能才行)。
而第二个 zone 则是本机区域的反解 zone ,不过,这部份的解释我想留到後面的真实例子中再作说明,请您留意就是了。
上面的句子,当您安装好 caching-nameserver 套件之後就被建立起来的,相信您不用劳什麽心力。在档案最後,您或许还看到下 面这段设定:
key "key" {
algorithm hmac-md5;
secret "coqJswFdBMdNAItnLOpkmGgmJt
clearcase/" target="_blank" >ccFsoNZZciWqxlGZBMUTOUxb0geYMFRyTT";
};
这是 bind 9.x 版本的新功能,用来进行区域转移或 DNS 更新所用的加密处理。这个我们暂时不必理会,除非您有兴趣进行这 个研究。
现在,我们暂时不要修改 named.conf 设定档,请退出它,然後转到 /var/named 目录,看看里面有些什麽东东?最起码,您会 看到如下三个档案:
named.ca
localhost.zone
named.local
不知道您是否有灵感了?没错:刚才在 named.conf 里面,每一个 zone 所指定的 file 都出现在这里!先让我们看看 root zone 的 档案内容吧:
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC registration services
; under anonymous FTP as
; file /domain/named.root
; on server FTP.RS.INTERNIC.NET
; -OR- under Gopher at RS.INTERNIC.NET
; under menu InterNIC Registration Services (NSI)
; submenu InterNIC Registration Archives
; file named.root
;
; last update: Aug 22, 1997
; related version of root zone: 1997082200
;
;
; 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
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
;
; formerly NS.NIC.DDN.
MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
;
; housed in LINX, operated by RIPE N
CC;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
;
; temporarily housed at ISI (IANA)
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
; End of File
在 /var/named 中的 RR 记录档里面的注解符号,和 /etc/named.conf 的注解符号不一样哦:在 named.conf 中是用双斜线“ // ”; 而在这里则使用 “ ;”符号。无论如何,您都不能用 “ # ”来做注解符号就是了。(好混乱哦~~~ 这就是电脑!^_^ 

在上面这个 named.ca 档案里面,您如果将所有的注解行拿掉,您会发现一共有 13 行是以‘ . ’开头的,那就是所谓的 root zone 了!然後,第二栏都是‘ 3600000 ’,这是 TTL (Time To Live) 设定,也就是在 cache 中保留的时间,以秒为单位(所以 这里是 100 小时)。其後的‘ NS ’是“Name Server”的意思,是 DNS 记录名称之一,也就是负责这个记录的 name server 是哪一台主机(这里一共由 13 台主机共同负责 root zone 的 NS 服务)。
虽然我们这里用 NS 指定了 name server 的主机名称,但对电脑系统来说,这些名称必须能解释为 IP 位址才有用(呵~~ 这个正 是 DNS 系统的功能),所以,这里分别用 13 个‘ A ’记录,也就是 Address 的意思,解释 [A-M].ROOT-SERVER.NET. 这些 主机各自的 IP 位址所在。
如果您了解 DNS 的查询模式,您会知道 DNS 伺服器在查询非自己管辖的 zone 的时候,首先会向 root 查询下一级的 zone 在 哪里,然後逐级查询下去。但问题是:当 named 刚启动的时候,在 cache 里面一片空白,它怎麽知道 root zone 的 servers 在哪 里呢?这不是一个矛盾吗?所以,就必须靠这个档案告诉 named 关於 root zone 的 servers 有哪些?以及在哪里? --- 明白了 吗?
因为这个档是以静态的方式维护的,很难保证这个档的内容永远都正确,如果 root zone 的记录发生改变了怎麽办(虽然这机会 不大)?或许,您已经在档案的开头注解那里得知,您可以在任何时候透过 ftp 或 gopher 取得这个档案的最新版本。如果您还 没读过那些注解,那就请带著字典读一下吧。如果您真的有需要更新这个 named.ca 档,那可以按如下步骤进行:
ftp FTP.RS.INTERNIC.NET
anonymous
your_account@your.mail.server
cd domain
get named.root
bye
cp /var/named/named.ca /var/named/named.ca.bak
cat named.root > /var/named/named.ca
除了刚才的 named.ca 之外,第二个 zone 的记录档是 localhost.zone ,从 named.conf 中您应该知道它是 zone "localhost" 的记录 档,它的内容如下:
$TTL 86400
$ORIGIN localhost.
@1D IN
SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D 

; minimum
1D IN NS @
1D IN A 127.0.0.1
内容很简单,但您是否真的了解每一行的设定意思呢?如果不清楚或不确定,那就让我们一起探讨探讨吧。
首先,第一行是一个 TTL 设定,目前是定义出这个记录档里面的各项记录的预设 TTL 值为 86400 秒(刚好是一天)。您的记录 档或许没有这行,事实上没什麽关系,您可以自己补上,否则,在启动 named 的时候会碰到一些警告,无伤大雅的;但如果您 的确在意那些警告,那就加上这行。您要知道,在记录档中宣告的所有资源记录(RR - Resource Record),都一定有一个 TTL 设定,如果没有,则使用这里预设的值。
第二行是一个 ORIGIN 设定,说明下面的记录源出何处(这里是源出 localhost. 的记录)。请您加倍留意最後的一个小数点“ .”,少了它或多了它,记录名称完全不一样!在 DNS 记录中,我们称这样以小数点结尾的名称为“ 全域名称 ”即 FQDN ( Fully Qualified Domain Name 

。如果缺少了这个点会怎样呢?就会将所属的 ORIGIN ( @ 

附加在记录名称後面;而这 ORIGIN 就是上一个 $ORIGIN 宣告之後的名称,如果在前面找不到 $ORIGIN 宣告,那就以 /etc/named.conf 中定义的 zone 名称为基 准。以目前的例子来说,如果没有这个小数点的话,“localhost”会变成“localhost.localhost”;但如果有小数点的 话“localhost.”就只能是“localhost.”。所以,这个小点“.”非常重要,在以後设定中一定要非常留神!!(这也初学者 最常犯的错误之一)
然後,第三行,是一个 SOA 记录的设定,在这里我们看到一个特殊字符“ @ ”,它就是 ORIGIN 的意思,也就是刚侧.vPw
cookiwu 回复于:2002-05-24 09:39:39
|
第五章?那前面的呢?从哪转的呀!
|
sunboy 回复于:2002-05-24 09:43:12
|
www.study-area.org,在它的linux服务器的网络设定中的第五章
|
段誉 回复于:2002-05-24 09:43:16
|
怎么好像没完事儿啊。 
|
163 回复于:2002-10-25 02:50:21
|
[这个贴子最后由163在 2002/10/27 09:06am 编辑]
在网上能有这么好的地方谢谢 呀!看过了,好像有点不够精炼!下面我摘抄点:
slave在refresh时间到达时尝试和 master 进行资料同步的动作,在 DNS 系统里称“zone transfer”(区域转移),而在技术层面则是AXFR 查询。
在邮件系统中,只要邮件伺服器双方都知道对方的 IP 就可以进行邮件交换了。MX 记录是‘Mail eXchange’,它指定了负责该记录项(可以为domain也可以是host)的邮件伺服器名称(最好使用FQDN(Fully Qualified Domain Name)),而且该名称必须是一个 A 记录(不建议使用CNAME)。这样,当邮件伺服器要和对方的区域进行邮件传递的时候,就可以通过 MX 记录得到对方的邮件伺服器名称,而不需预先知道要和哪台邮件主机沟通。在日後,就算对方更换名称,将 DNS 记录改改就可以,完全无需知会其它邮件主机;而外面的邮件伺服器也根本无需认知到这个改变。
host [-aCdlnrTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] name [server] dig [@server] domain [<query-type>] [<query-class>] [+<query-option>] [-<dig-option>] [%comment] service named restart vi /var/log/messages
另外,我们这里所说的domain注册,在整个DNS系统中,仅属“正解”方面的注册和授权而已;而反解的授权,因为是跟据 IP 授权的,所以必须透过您的 IP 发 放机构进行。
关於 Dynamic DNS
关於动态 DNS 的应用,也可以在DHCP 分配的网路中设定 DNS 也可以应用得上。但前提条件是:您的 named 必须是 bind 9.x 或以後,以及 dhcpd 必须是 3.x 或以後的版本。然而,RedHat7.1 上面预装的 dhcpd 是 2.0p15-4 这个版 本,您必须自行升级才能使用这个非常棒的功能。
下面,我将 dhcp 服务转移到 mandrake 8.1 (其预装的 dhcpd 版本是 3.0-0.rc12.1),然後保留 named 在 rh71 上面,再透过 ddns 技术更新和维护 dhcp 所发放的 DNS 资料。我初步整理出来的步骤如下:
在 mdk 上执行如下命令,产生 dns 加密验证所需的 secret :
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_MDK
这样会在当前目录下产生两个以 Kdhcp_mdk 开头的档案,有兴趣您可以看看其中的内容。然後您将 Kdhdp_mdk*.private 中的最後一行 Key: 後面那串字串复制下来 (如:4sxutdFuNMqF1B0Q2GV1uQ==),待会要用到。
然後修改/etc/dhcpd.conf 的内容,类似如下: ddns-update-style ad-hoc;# 这行一定要加上 subnet 192.168.100.0 netmask 255.255.255.0 { ......# 其中内容略,请自行填写 } key DHCP_MDK { algorithm HMAC-MD5.SIG-ALG.REG.INT;# 加密演算法名称 secret 4sxutdFuNMqF1B0Q2GV1uQ==;# 这就是上一步骤产生的 key} zone siyongc.domain. { primary 192.168.100.23;# 指向 name server 所在位址 key DHCP_MDK;# 必须和前面的 key 名称一致 } zone 100.168.192.in-addr.arpa. { primary 192.168.100.23;# 同上 key DHCP_MDK; }
然後重新启动 dhcpd 的服务,并确定其功能正常。关於更多的设定,请 man dhcpd.conf ,搜寻 ddns 子串就可以找到。
然後转移到 rh71 上面,修改 /etc/named.conf ,在 options 前面加上如下句子: key DHCP_MDK {// 这段应该和 dhcpd.conf 设定一致 algorithm HMAC-MD5.SIG-ALG.REG.INT; secret 4sxutdFuNMqF1B0Q2GV1uQ==; };
logging {// 这是记录设定 channel update_debug { file "/var/log/update-debug.log"; severity debug 3; print-category yes; print-severity yes; print-time yes; }; channel security_info { file "/var/log/named-auth.info"; severity info; print-category yes; print-severity yes; print-time yes; }; category update { update_debug; }; category security { security_info; }; }; 然後再为相应的 zone 加上 update 设定: zone "siyongc.domain" { type master; file "siyongc.domain"; allow-update { key DHCP_MDK; };// 名称必须和前面的 key 一致 }; zone "100.168.192.in-addr.arpa" { type master; file "192.168.100.rev"; allow-update { key DHCP_MDK; };// 同上 }; 然後建立所需的记录档: touch /var/log/update-debug.log touch /var/log/named-auth.info chown named.named /var/log/update-debug.log chown named.named /var/log/named-auth.info
|
原文转自:http://www.ltesting.net