Linux下架设自己的DNS(上)
到: https://www.isc.org/download 下载 bind-9.2.3.tar.gz 源码 编译安装
早期放在一个hosts文件里,linux在/etc/hosts文件,后期网络越来越庞大,就产生了DNS服务器。例如.edu .com .cn .org 等都是顶级域。
linux下配置DNS服务器: /etc/resolv.conf
正向解析:根据主机名解析IP
反向解析:根据IP解析主机名
例如,解析 www.idcfree.com 例如你在org域里面,先找idcfree子域服务器,如果没找到就就发送到根域里,根域再发送到com域,com域再发送到idcfree域
DNS 是指:域名服务器(Domain Name Server)。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。
前面所介绍的伺服器服务大多是用在内部网路环境中的﹐不过﹐以现代的情况和未来的趋势来看﹐每个网路或多或少都需要 Internet 连线以及向 Internet 提供服务。从这一章开始﹐我们将為大家陆续介绍一些在 Internet 环境中常用到的伺服器之架设技巧。就算您目前还没真的需要架设 Internet 相关的伺服器﹐但许多企业的 Intranet 环境中﹐也需要相类似的伺服器来為企业内部网路提供服务。
前提条件
在眾多 Internet 伺服器当中﹐有一种服务是所有服务的基础﹐就是 DNS 服务。DNS 可以说是一个不容易弄清楚的概念﹐尤其是其运作原理。如果您看过“学习网路”中的“ DNS 协定”(我强烈建议您看看这篇文章﹗)﹐相信应该有一定概念了﹐否则﹐您在如下的阅读中可能难以理解﹐也浪费您的时间。
无论如何﹐在您进一步阅读下面文章之前﹐请您先确定能正确回答如下的问题﹕
什麼是 DNS 的授权模式﹖是怎样进行的﹖
请解释 zone 和 domain 的差别。
什麼是 DNS 正解和反解﹖
什麼是 DNS 的查询模式﹖查询过程是怎样进行的﹖
请解释 DNS cache 的作用和它对查询流程的影响。
探索 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 记录档案。所以﹐我们在这个档案后面部份所指定的档案﹐就无需使用绝对路径了﹐但它们一定要放在这个目录下面http://www.britepic.org/。
接下来﹐有一段文字﹐如果您仔细阅读一下﹐它大致是说﹕如果您要设定的 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 放在这裡。(嗯﹖想想看﹖尤其是查询非本机区域的时候﹖)