Linux DNS服务配置 【特别重新排版】(超详细)
欢迎讨论:我的博客:fengtao.org新浪微博:http://weibo.com/oscarfeng腾讯微博:http://t.qq.com/oscarfengLinux 架设DNS 服务器(一)
欢迎讨论:
我的博客:fengtao.org
新浪微博:http://weibo.com/oscarfeng
腾讯微博:http://t.qq.com/oscarfeng
Linux 架设DNS 服务器(一)
一、域名系统介绍
1. 域名系统
域名系统为一个分布式数据库,它使本地负责控制整个分布式数据库的部分段,每一段中的数据通过客户,服务器模式在整个网络上均可存取,通过采用复制技术和缓存技术使得整个数据库可靠的同时,又拥有良好的性能。
域名服务器包含数据库的部分段的信息,并可提供被称之为解析器的客户来访问。
DNS 的数据库结构形成一个倒立的树状结构,根的名字用空字符串"" 来表示,但在文本中用" 。" 来书写。树的每一个节点都表示整个分布式数据库中的一个分区(域) ,每个域可再进一步划分成子分区(域) ,每个域都有一个标签(LABEL),标明了它与父域的关系。域也有一个域名(domain name) ,给出它在整个分布式数据库中的位置。在DNS 中,域名全称是一个从该域到根的标签序列,以" 。" 分隔这些标签。该标签最多可包含63个字符。树中每一节点的完整域名为从该节点到根之间路径上的标签序列。
如果根域在节点的域名中出现,该名字看起来就象以点结尾(实际上是以点和空标签作结尾) 。这些以点结尾的域名被称之为绝对域名(Absoulte Domain Name)。不以点结尾的域名被称之为相对域名。
域(Domains)即为树状域名空间中的一棵子树,域的域名同该子树根节点的域名一样。也就是说,域的名字就是该域中最高层节点的名字。举例来说,zhuhai.gd.cn 域的顶端就是名为zhuhai.gd.cn 的节点。
在DNS 中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数量的子域并将这些子域委托给其他组织进行管理。域既能包括主机又能包括其他域(它的子域) 。域名被用做DNS 数据库中的索引。子域中任何域名被认为是域的一部分。
事实上,主机即为域,域名仅是DNS 数据库中的索引," 主机" 可由指向相关主机信息的域名来索引,域包含所有其域名在该域的主机。
在域名树中,叶节点的域通常代表主机,它们的域名可指向网络地址,硬件信息和邮件
,路由信息。在树内的节点,其域名既可命名一台主机,也可指向有关该域的子孙或子域的结构信息,在域名树中的内部域名并不受唯一性限制,它们既可表示它们所对应的域,又可代表网络中某台特定的主机。例如,sun.com 既是sun 的域,又是在sun 和internet 间转发信件的邮件服务器的域名。
网络上的每一台主机都有一个域名,域名给出有关主机的信息,该信息中包含IP 地址,MAIL 路由信息等等,主机也可以有一个或多个域名别名,别名仅是一些指向正式域名的另
1.1 域名。
判断域是否为另一域的子域的简单方法是比较它们的域名。子域名以其父域名结尾。
设计域名系统的一个主要目的是让管理分散化,这是通过代理来实现的。管理域的组织将该域划分成子域,每一个子域可以由其他组织代理,这意味着那些代理组织负责维护在该子域的所有数据。他们可以自由地改变数据,甚至可以将他们管理的子域再划分成更多的子域并将它们再分配。父域中仅包含指向这些子域的指针,因而引用对那里的查询。
1.2 域名服务器
存储有关域名空间信息的程序被称为域名服务器(name server) 。通常,域名服务器拥有部分域名空间(称之为区zone) 的完整信息。域名服务器可以拥有多个区的授权。
区与域的关系:
区包含了域中除了代理给别处的子域外所含有的所有域名和数据。如果域的子域没有被代理出去,则该区包含该子域名和子域中的数据。
DNS 定义了两类域名服务器:primary Master 和 secondary Master.PM 域名服务器
从它所运行的主机上的文件获得它所负责的区的数据,SM 域名服务器则是从其它的具有该区授权的域名服务器上获得它的区的数据。SM 域名服务器会定期查询PM 域名服务器以保证区数据为最新版本。
一般情况下,最好设立一台PM 域名服务器和若干台SM 域名服务器。这样可以分担负载。以及确保区中所有主机都有比较靠近的域名服务器,方便访问。
1.3 解析器
运行在主机上并需要域名空间信息的重新需要解析器(Resolver),在bind 中解析器仅仅是一组库例程,并编译进象telnet 和ftp 这样的程序中,它们并非独立的进程。解析器所做的工作为:汇集查询,发送查询并等待应答,未得到应答时重发查询。
,1.4 地址到域名的映射
在域名空间的数据是通过名字来进行索引的,找到一个给定域名的地址相对容易。但是要找到映射给一定地址的域名就要在树上的每一个域名空间作穷尽搜索。如果这样的话,效率将相当低,为了解决这个问题,创建一个以地址为索引的域名空间。这部分名字空间被称为in-addr .arpa 域。
in-addr .arpa 域中的节点以Doted-octet(将32bitIP 地址表示为由" 。" 分隔开的四个8bit 的十进制形式的方法) 形式表示IP 地址。IP 地址在名字空间以相反的方向表示,因为名字是从叶读到根,例如,www.zhuhai.gd.cn 的IP 地址为202.105.177.100, 则相应的in-addr .arpa 子域为177.105.202.in-addr .arpa, 使IP 地址中的第一个字节出现在树的最高层使的管理员有能力沿着网络联接将in-addr .arpa 域代理出去,例如177.105.202.in-addr .arpa 可以被代理给网络177.105.202的管理员。
1.5 缓存与生存期
名字服务器在处理递归查询时,可能要进行多次查询才能得到信息,在这过程中,名字服务器可以获得很多有关域名空间的信息,名字服务器将所以这些信息都缓存起来以加速以后的查询。除了加速查询外,缓存还使得我们不必再次查询根名字服务器,这样可使得我们不必过分依赖根名字服务器而大大减轻根名字服务器的负载。
生存期(TTL)为所容许的名字服务器对数据缓存的时间长度,一旦生存期到了,名字服务器必须丢弃缓存数据并从授权的名字服务器中重新获取新的数据。这样可以确保域数据在整个网络上的一致性。
1.6 BIND:LINUX名字服务
linux 和其他的unix 一样,都是用BIND 来实现名字服务。BIND 的服务端的软件是被称为named 的守护进程。bind 的主页是http://www.isc.org
Linux 架设DNS 服务器(二)
2. 安装服务器软件
2.1 取得bind 软件包(现在新的版本为8.2.2 p5)
从bind 的主页http://www.isc.org上取得最新stable 版的三个文件:
bind-contrib.tar .gz bind-doc.tar .gz bind-src.tar .gz 或者从http://www.redhat.com上取得三个文件:
,bind-8.2.2-p5-9.i386.rpm bind-devel-8.2.2-p5-9.i386.rpm cache-nameserver-6.2-2.noarch.rpm 2.2 安装bind 软件包
安装tar 封装的软件包:
先解压软件包
tar zxpf bind-contrib.tar.gz tar zxpf bind-doc.tar.gz tar zxpf bind-src.tar.gz 编辑修改Makefile.set 文件,增加或修改 'DESTLIB=/usr/lib/bind/lib' 'DESTINC='/usr/lib/bind/include' 编译并安装 make make install 安装rpm 封装的软件包: rpm -Uhv bind-8.2.2-p5-9.i386.rpm rpm -Uhv bind-devel-8.2.2-p5-9.i386.rpm rpm -Uhv cache-nameserver-6.2-2.noarch.rpm 3. 让服务器跑起来---基本篇
3.1
BIND 可被配置成几种不同的运行方式,通用的BIND 配置为纯解析器系统,纯缓存服务器,主服务器,辅服务器。
,解析器是指通过域名服务器查询域信息的程序代码,在unix 系统中,它是以库例程的方式实现的,而并不是一个单独的客户程序。纯解析器系统很容易配置,只要设置一下/etc/resolv.conf文件。这种方式通常用于由于某些限制不能在本地运行域名服务器软件的系统中。
例如:/etc/resolv.conf内容类似为:
search test.com
nameserver 127.0.0.1
nameserver 172.16.0.1
当配置解析器库以使用BIND 名字服务进行主机查找,你也必须告知它使用哪个名字服务器。对此有一个独立的文件,称为resolv.conf 。如果这个文件不存在或是空的,那么解析器就假设名字服务器在你本地的主机上。
如果在你的本地主机上运行一个名字服务器,你必须单独地设置它。
resolv.conf 中最重要的选项是nameserver ,它给出了要使用的名字服务器的IP 地址。如果你通过几次给出nameserver 选项指定了几个名字服务器,那么它们会以给出的顺序试用。因此,你应该首先给出最可靠的服务器。目前,至多支持三个名字服务器。
如果没有给出nameserver 选项,那么解析器试图连接本地主机上的名字服务器。
其它两个选项,domain 和search 涉及到如果BIND 不能用第一个请求解析主机名时附加在主机名上的缺省域。search 选项指定了一个试用的域名列表。列表项是用空格或制表符分开的。
如果没有给出search 选项,就会通过使用域名本身从本地域名以及直至root 的父域中建立一个搜寻列表。本地域名可以使用domain 语句给出;如果一个也没有给出,那么解析器就通过系统调用getdomainname(2)来获取。
3.2 其它三类配置方式是用于域名服务器的
纯缓存服务器
纯缓存服务器运行域名服务器软件,但并没有域名服务器数据库文件,它记录下每一个从远程域名服务器获得的数据,以回答将来对同一信息的查询。
纯缓存服务器所需的三个基本配置文件:
/etc/named.conf
,/var/named/named.ca /var/named/named.local 创建或修改/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; forwarders {172.16.0.1;172.16.0.11;}; }; // // a caching only nameserver config // zone "。" { type hint; file "named.ca";
,};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
在文件中"forwarders {172.16.0.1;172.16.0.11;};"其中的IP 地址是你网络中主服务器和辅服务器的IP 地址。
创建或修改/var/named/named.local
@ IN SOA localhost. root.localhost. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost. 创建或修改/var/named/named.ca:
至于/var/named/named.ca就要从redhat linux光碟获得了。也用命令从互联网上获得:
dig @。aroot-servers.net.ns > /var/named/named.ca
如果是用rpm 封装的软件包安装的话,这三个文件会自动生成,我们只需要修改/etc/named.conf.其中/var/named.ca一般是不用修改的。
主服务器
主服务器是给定域的所有信息的授权来源。它所装载的域信息来自于由域管理员所创建并在本地维护的磁盘文件。
,我们用"test.com" 作为例子,我们需要五个基本配置文件:
/etc/named.conf /var/named/named.ca /var/named/named.local /var/named/named.test.com /var/named/named.172.16.0 创建或修改/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; }; // // a PM nameserver config //
,zone "。" {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
//there are our primary zone files
zone "test.com" {
type master;
file "named.test.com";
};
zone "0.16.172.in-addr.arpa" {
type master;
file "named.172.16.0";
};
文件中的zone "test.com"段是声明这是用于test.com 域的主服务器,用于该域的数据从/var/named/named.test.com文件中装载。
文件中的zone "0.16.172.in-addr.arpa" 段是指向映射IP 地址172.16.0.* 到主机名的文件。用于该域的数据从/var/named/named.172.16.0文件中装载。
创建或修改/var/named/named.local
@ IN SOA ns.test.com. root.ns.test.com. (
,2000051500 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.test.com.
1 IN PTR localhost.
注意:在修改named.*文件时每次存盘时要注意增加Serial 值。如使用绝对域名时千万别忘了后面带的" 。"
资源记录中的@字符转变为当前的域test.com,IN 表示资源记录使用TCP/IP地址,SOA 表示管辖开始记录。ns.test.com. 是这个域的主DNS 服务器的标准名称,在之后是联系的EMAIL 地址,其中@字符必须用" 。" 代替。
创建或修改/var/named/named.test.com
@ IN SOA ns.test.com. root.ns.test.com. ( 2000051500 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.test.com. ns A 172.16.0.1 ns2 A 172.16.0.11 www A 172.16.0.2