BIND9 DNS配置详解

发布时间:2020-01-03编辑:脚本学堂
非常值得推荐给大家的一篇关于bind dns配置的文章,各方面讲解清晰透彻,正在学习bind dns配置的朋友,不可错过。

非常值得推荐给大家的一篇关于bind dns配置的文章,各方面讲解清晰透彻,正在学习bind dns配置的朋友,不可错过。

在众多 Internet 服务器当中﹐有一种服务是所有服务的基础﹐就是 DNS 服务。DNS 可以说是一个不容易弄清楚的概念﹐尤其是其运作原理。如果您看过“学习网络”中的“ DNS 协议”(我强烈建议您看看这篇文章﹗)﹐相信应该有一定概念了﹐否则﹐您在如下的阅读中可能难以理解﹐也浪费您的时间。

无论如何﹐在您进一步阅读下面文章之前﹐请您先确定能正确回答如下的问题﹕
什么是 DNS 的授权模式﹖是怎样进行的﹖
请解释 zone 和 domain 的差别。
什么是 DNS 正解和反解﹖
什么是 DNS 的查询模式﹖查询过程是怎样进行的﹖
请解释 DNS cache 的作用和它对查询流程的影响。

忠告﹕请不必急着知道怎样设定 DNS﹐花点时间将 DNS 的原理弄明白非常重要﹐尤其是授权模式和查询模式的正确理解。在日后的 DNS 架设和管理中﹐是否能正确理解这些 DNS 原理﹐往往是成败的关键所在﹗

如果您在 NT 或 Win2K 下面设定过 DNS 服务器﹐相信您会觉得在 linux 下面难多了。除了概念上要比较清楚外﹐另外对档案的关联也要有清晰的追踪能力﹐这对于进行 debug 尤为重要。因为在 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 want
* 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 "coqJswFdBMdNAItnLOpkmGgmJtccFsoNZZciWqxlGZBMUTOUxb0geYMFRyTT";
};

这是 bind 9.x 版本的新功能﹐用来进行区域转移或 DNS 更新所用的加密处理。这个我们暂时不必理会﹐除非您有兴趣进行这个研究。

 1/4    1 2 3 4 下一页 尾页