分享
 
 
 

构建Linux下的DNS系统

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

作者:王剑

DNS (Domain Name System,DNS) 可以实现主机域名和 IP 地址之间的相互转换,因此在 Linux 环境下构建一个安全可靠、高效的 DNS 系统是非常有用的。

域名原理简介

在 DNS 中,各个域分别由不同的组织管理。每个组织都可将它的域再分成一定数量的子域,并将这些子域委托给其他组织管理。域名被用做 DNS 数据库中的索引,子域中任何域名都被认为是域的一部分。判断一个域是否为另一域的子域,简单方法是比较它们的域名,一般子域名以其父域名结尾。

设计域名系统的一个主要目的是让管理分散化。管理域的组织将该域划分成子域,每一个子域可以由其他组织管理意味着那些下级组织负责维护自己子域的所有数据。他们可以改变数据,甚至可以将自己管理的子域再划分成更多的子域并重新分配,而父域中仅包含指向这些子域的指针。

实现域名查询和提供域名信息的程序被称为域名服务器。通常域名服务器拥有部分域名空间 (称之为区 Zone) 的完整信息,一个域名服务器可以拥有对多个区的授权。域既包括了该层主机,又包括了子域的所有信息;而区仅包含了一个域中除了分配出去让其它组织管理的子域以外的域名数据信息。如果一个域没有分配任何子域,则该区包含该域的所有域名数据信息。

DNS 定义了 PM (Primary Master) 和 SM (Secondary Master) 两类域名服务器。PM 从配置文件中读取区域数据,这些数据对整个区域来说都是具有权威性的。SM 域名服务器是从其它具有该区授权的 PM 域名服务器上获得区数据,并定期查询PM域名服务器以保证区数据为最新版本。一般情况下,最好设立一台PM域名服务器和若干台 SM 域名服务器。这样可以分担负载,以确保区中所有主机都有比较靠近的域名服务器方便访问。

对域名系统的访问是按照客户/服务器模式进行的,采用缓存 (Caching) 技术在保证数据可靠真实性的同时,又保证了较高的效率。应用程序一般是利用解析器来实现域名解析的。解析器是一组库函数,任何需要解析域名的应用程序都会调用这组函数来完成域名解析工作。解析器是应用程序实现域名查询的接口。

域名服务器在接收到客户的查询请求时,一般是按照递归的方式来进行的。下面用一个例子来说明什么叫递归方式查询。一个域名服务器 MyDM 接收到查询 www.linuxaid.com.cn 的查询请求。它首先询问本地存储的根域名服务器列表中的任何一个根域名服务器,负责 cn 域的名字服务器有哪些。前面曾经说过,上级域名服务器有指向下级子域名服务器的指针。所以根名字服务器就会返回负责 cn 域数据信息的名字服务器的列表。

MyDM 会缓冲这些数据继续查询其中的一个,询问负责 linuxaid 子域的域名服务器有哪些。得到信息后再递归查询,直到找到 www.linuxaid.com.cn 的 IP 信息。查询中得到的所有域名服务器信息都会被缓存起来,以加速以后的查询。

域名服务器有生存期 (TTL) 的概念,一旦生存期到了,名字服务器必须丢弃缓存数据并从权威的名字服务器中重新获取新的数据。这样可以确保域数据在整个网络上的一致性。

从 TCP/IP 协议栈的角度来看, DNS 属于应用层协议,运行在传输层之上,但是它并不使用 TCP 提供的服务,而是使用 UDP 服务。

配置文件

下面主要对和域名相关的一些配置文件进行说明,以便进行下一步配置。

/etc/hosts 定义了主机名和 IP 地址匹配信息,供本地解析器使用。本地解析器从该文件中得到主机名匹配信息。例如,zhangsan 和 lisi 的机器没有正式域名,为了使用方便管理员可以在文件中添加内容:

192.168.2.200 zhangshan

192.168.2.201 lisi

这样,就可以使用 zhangsan 和 lisi 来实现对其机器的引用了。

/etc/nsswitch.conf 指定了从哪个文件或数据库可得到不同的数据。在它的头部有该文件详细的说明,其中应该包含域名相关的内容行:

hosts: files dns

如果没有这样一行内容,则需要管理员手工加入。该行指示域名解析时首先应该查询文件内容 (/etc/hosts),然后查询 DNS 数据库。

/etc/host.conf 是解析器的配置文件,指示解析器以什么方式来解析主机名。一般可能包含如下内容:

# Lookup names via DNS first then fall back to /etc/hosts.

order bind,hosts

# We have machines with multiple IP addresses.

multi on

# Check for IP address spoofing.

nospoof on

Order 选项指明的是选择服务的顺序。上面“order bind,hosts”说的是解析器库解析文件名的时候先查询域名服务器,然后再查看“/etc/hosts”文件。因为性能和安全上的原因,最好将解析器库的查找顺序设成先查域名服务器 (Bind)。

有多个 IP 网络接口的主机被称为多穴主机 (Multihomed)。例如:网关服务器就有多个 IP 地址,必须把这个选项设成 on。

Nospoof 选项指明不允许 IP 伪装。IP 伪装是把自己伪装成别的计算机去欺骗其它的计算机,获得它的信任。不管对任何类型的服务器,这个选项都要设成 on。

/etc/resolv.conf 是解析器使用的配置文件。它指示了本地默认域名 (在进行域名解析时,如果提交的域名是相对域名如 www,则在解析时解析器会自动添加默认域名然后进行解析如:www.linuxaid.com.cn),并且包含应用程序进行域名解析时需要使用的域名服务器的IP地址信息。例如:

search linuxaid.com.cn

nameserver 208.164.186.1

nameserver 208.164.186.2

以上表明进行域名解析时按照名字服务器出现的顺序进行。

/etc/named.conf 是域名服务器守护进程 named 的配置文件。named 每次启动后,都要从该文件中读取域名配置数据。所以修改该文件及引用的数据,都需要重新启动 named 以刷新配置。新安装的机器该文件默认内容一般为:

options {

directory "/var/named";

};

zone "." {

type hint;

file "root.ca";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "127.0.0";

};

该文件各部分的具体含义及详细设置在后面加以说明。

编译和安装

Bind 的安装有两种方式。一种是以 RPM 包的方式安装,另一种是使用源程序进行编译。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

就可以安装成功。在此不再详述。下面主要说明使用源程序进行编译这种方式。

1.软件的下载

下面的示例在 Red Hat Linux 7.1 下测试通过,需要安装者具有 root 权限。这里使用的 Bind 的版本号是 8.2.2-patchlevel5。注意在真正的网络应用中 (非测试学习环境) 使用 Bind 时一定要下载最新版本,因为以前的版本中有一些安全漏洞。Bind 主页为 http://www.isc.org/,下载 bind-contrib.tar.gz, bind-doc.tar.gz, bind-src.tar.gz。

最好在编译前和编译后都做一张系统中所有文件的列表,然后用diff命令比较它们找出其中的差别,并知道到底把软件安装在哪里。只要在编译之前运行 find /* dns1 命令,在编译和安装完软件之后运行 find/*dns2 命令,最后用 d i ff dns1 dns2 dns 命令找出变化。显示如下:

[root@Aid /]# mkdir /var/tmp/bind

[root@Aid /]# cp bind-contrib.tar.gz /var/tmp/bind/

[root@Aid /]# cp bind-doc.tar.gz /var/tmp/bind/

[root@Aid /]# cp bind-src.tar.gz /var/tmp/bind/

我们创建了一个名为“bind”的目录,用它来处理tar文档,并转到新的“bind”目录 (cd/ var/ tmp/bind),解压tar文件:

[root@Aid bind]# tar xzpf bind-contrib.tar.gz

[root@Aid bind]# tar xzpf bind-doc.tar.gz

[root@Aid bind]# tar xzpf bind-src.tar.gz

2.编译配置和优化

编辑 Makefile.set 文件 (vi /src/port/linux/Makefile.set),并加入:

'CC=egcs -D_GNU_SOURCE'

'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro

-march=pentiumpro -fomitframe-

pointer -fno-exceptions'

'DESTBIN=/usr/bin'

'DESTSBIN=/usr/sbin'

'DESTEXEC=/usr/sbin'

'DESTMAN=/usr/man'

'DESTHELP=/usr/lib'

'DESTETC=/etc'

'DESTRUN=/var/run'

'DESTLIB=/usr/lib/bind/lib'

'DESTINC=/usr/lib/bind/include'

'LEX=flex -8 -I'

'YACC=yacc -d'

'SYSLIBS=-lfl'

'INSTALL=install'

'MANDIR=man'

'MANROFF=cat'

'CATEXT=$$N'

'PS=ps -p'

'AR=ar crus'

'RANLIB=:'

第一行说明使用的 GCC 编译器的名字是 egcs。第二行是优化参数。“DESTLIB =”这一行说明 Bind 所需的库函数目录,“DESTING =”说明 Bind 的 include 目录在哪里。输入下面的命令:

[root@Aid bind]# make -C src

[root@Aid bind]# make clean all -C src SUBDIRS=../doc/man

[root@Aid bind]# make install -C src

[root@Aid bind]# make install

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有