一、DNS的基本知识
我们都知道,网络通信中,数据链路等使用的地址是MAC地址。网络层使用的是IP地址,传输层使用的地址是端口号,它们各有各的识别方式。而和用户关系最密切的就是IP地址,每个入网的(不论是Internet或Intranet)计算机都必须有自己的IP地址,这样才可保证信息的正确传递。但IP地址是数字构成的,非常难与记忆和表达他的实际用途,所以人们用形象的域名代替IP,方便交流和记忆,但需要注意的是,网络通信中数据包的传输是靠IP地址进行的。也就是说,当www
.
syd
.
com向www1
.
syd
.
com发送信息的时候,首先必须将自己的和对方的域名转化为实际的IP地址,并填写在数据包的头部,才进行数据的传输。而完成域名到IP或IP到域名的翻译(解析)的软件就是DNS服务系统。DNS服务系统必然要安装在某个计算机上,这个计算机就是所谓为的DNS服务器。
目前为止,实现这种域名解析的方法主要有三种:
1
)
hosts文件,但要求所有互相解析的机器必须都配置
1
)
NIS
(
SUN的技术
)
集中管理域名,只适合局域网
,
原因大家自己想
3
)
DNS 实现域名的层次化,分布式管理,目前大部分都是这种方式
DNS服务的配置比较难,而且可能需要ISP的支持,DNS也是各种网络应用服务的基础,例如网站,邮件。。。都需要域名的支持,而且有了DNS,IP的移植就方便多了。
二、Linux下配置DNS服务器的条件
目前的各种Linux中都提供了实现DNS服务的软件,而且默认大部分都是直接安装的(这与Linux主要面向服务领域的宗旨是分不开的)。Linux中的DNS服务器软件叫bind
,
目前是版本9吧
.
它的管理程序叫named
(
这里的d表示守护进程,也即Windows中的服务
)
1)检查是否安装DNS服务软件
#rpm -ql bind
如果没有安装,可以添加
:
#rpm -ivh *bind*.rpm(RH9的第一张)
#rpm -ivh *nameservere*.rpm((RH9的第二张))
三、DNS服务器组成和配置方式
DNS服务系统采用C
/
S结构,普通用户的机器是C,提供DNS解析服务的是S,客户端的配置相当简单,只需要在
/
etc
/
resolv
.
conf中添加DNS服务器的IP就可以了(最多三个),格式如下:
nameserver 172.16.0.3
nameserver 10.8.10.244 (表示由这些机器完成域名到IP的翻译)
(
注意,实验中最好将自己的DNS服务器IP放在前面,否则可能测试失败,但上网速度要慢些,为了实验,值得!
)
DNS服务器端的配置主要包括主配置文件和区域文件。
主配置文件
:/
etc
/
named
.
conf 完成区域的声名和全局配置(如子域声名,访问控制等等)
区域文件
(
默认在
/var/
named下
)
,文件名与主配置文件中声名的一样,主要完成DNS资源记录(包括SOA
,
MX
,
A
,
NS
,
CNAME等等),下面的配置文件中详细说明。
====================================================================
下面的内容是实现过程
=====================================================================
四、文本配置的实现
1.配置规划
为了大家能够容易看懂,这里我先把我实现的设想写出来:
我在自己的机器
(
512MB
,
80GB
,
1.7GHz
,
64MB Vcard
)
上安装了两个RH
AS
3系统,这样我总共有3台机器进行试验。我的目的是在两个Linux系统中进行试验,实现域名解析和子域名。
我要实现的域是syd168
.
com
,
域中包含的机器有:www
,
bbs
,
ftp
,
mai
,
ssl
它们分别用于完成网站,BBS,FTP,电子邮件和电子商务站点,而且都在一个机器上
(
172.16.0.3
)
,实际中常常在不同的机器上。
另外,我计划实现syd168
.
com与的子域sub
.
syd168
.
com
,
子域有它自己的主机解析记录
(
www
,
mail
,
ftp
,
ssl
...)
,并跨网段。
提示,如果在一个机器上,各种服务对应到不同的域名要用到虚拟主机技术,以后我会发布它们的实现方法,其实这里有很多相关资料的。
RH AS1:
IP
:
172.16.0.3
/
16
网关:172.16.0.2
DNS客户配置172.16.0.3
RH AS2:
IP
:
172.16.0.4
/
16
网关:172.16.0.2
DNS客户配置172.16.0.4
1.配置主配置文件
当安装完Bind之后,默认产生主配置文件
/
etc
/
named
.
conf
#vi /etc/named.conf 其中加入如下内容
**********************/
etc
/
named
.
conf
**************************
options
{
directory
"/var/named"
;
//区域文件的存放位置
forwarders
{
10.8.10.244
;};
//allow-query {172.16.0.0/16};
//allow-transfer {172.16.0.0/16;};
//forward only;
};
controls
{
inet 122.0.0.1 allow
{
localhost
;
172.16.0.3
;
172.16.0.4
;}
keys
{
rndckey
; };
};
zone
"."
IN
{
type hint
;
file
"named.ca"
;
};
zone
"localhost"
IN
{
type master
;
file
"localhost.zone"
;
allow
-
update
{
none
; };
};
zone
"0.0.127.in-addr.arpa"
IN
{
type master
;
file
"localhost.arpa"
;
allow
-
update
{
none
; };
};
//=====================新加入的内容=====================
zone
"syd168.com"
IN
{
//要实现syd168.com域
type master
;
//要实现的是主域
file
"syd168.com.zone"
;
//主域的记录文件(好记的名字)存放在/var/named下
};
zone
"0.16.172.in-addr.arpa"
IN
{
//syd168.com的反向解析区域
type master
;
//类型是主要区域
file
"syd168.com.arpa"
;
//反向区域记录的存放文件(好记的名字),位置同上
};
//=====================新加入内容结束=====================
include
"/etc/rndc.key"
;
2.建立两个区域文件
/var/
named下
1
)
#vi /var/named/syd168.com.zone
//=============正向区域文件/var/named/syd168.com.zone=============
$TTL 2h
syd168
.
com
.
IN SOA www
.
syd168
.
com
.
master
.
syd168
.
com
. (
//最左边的syd168.com可以简化为@, 后面依次为 IN SOA 主DNS服务器域名 DNS服务器管理员邮件
20040730
;
serial number
//区域序列号,当修改时要增加,否则从域可能不一致!
2h
;
refresh timeout
//从域刷新超时时间
40m
;
retry refresh timeout
//从域重试刷新时间
1w
;
expire timeout
//从域刷新失败并认为主域无效的时间
2h
;
TTL time
)
//以下每行都要靠左,即左侧不要留出空白
syd168
.
com
.
IN NS www
.
syd168
.
com
.
//表示syd168.com的域名由www.syd168.com(或IP)翻译
www IN A 172.16.0.3
//www.syd168.com对应的IP为172.16.0.3
www IN A 172.16.0.4
//www.syd168.com对应的IP为172.16.0.4,单域名多IP可实现负载均衡
ftp IN A 172.16.0.4
//左边也可以写为ftp.syd168.com. 注意!这时最后必须多个点,否则错误。
mail IN A 172.16.0.5
//全域名必须以点结束!
bbs IN A 172.16.0.6
//IN 表示Internet,A表示Address
test IN A 172.16.0.7
//注意 ,这些IP必须可连同,否则徒劳!
ssl IN A 172.16.0.3
syd168
.
com
.
IN MX 10 mail
.
syd168
.
com
.
//表示发往syd168.com域的邮件由mail.syd168.com主机转发,MX表示mail exchange
在
//以下两行是实现子域的方法,要实现的子域是syd168.com的子域sub.syd168.com,父域中给出指向子域的服务器地址
sub IN NS www
.
sub
.
syd168
.
com
.
//表示后缀为sub.syd168.com的域名由www.sub.syd168.com负责翻译,NS 表示Name Server
www
.
sub IN A 172.16.1.3
//表明www.sub主机在本域中的主机解析为172.16.1.3
//以下是主机的别名,我一般不设,因为上面已经是标准名了,要别名干什么,如果需要也可直接设置主机名
www1 IN CNAME www
ftp1 IN CNAME ftp
bbs1 IN CNAME bbs
mail1 IN CNAME mail
test1 IN CNAME test
ssl1 IN CNAME ssl1
//=============正向区域文件结束=============
//=============反向区域文件/var/named/syd168.com.arpa=============
$TTL 2h
@
IN SOA www
.
syd168
.
com
.
master
.
syd168
.
com
. (
20040730
;
serial number
2h
;
refresh timeout
40m
;
retry refresh timeout
1w
;
expire timeout
2h
;
TTL time
)
IN NS www
.
syd168
.
com
.
//注意本行左侧需要有空格,或者填入"区域名.",即0.16.172.in-addr.arpa.
3 IN PTR www
.
syd168
.
com
.
表示 www
.
syd168
.
com对应的主机IP为172.16.0.3
(
反向解析
)
4 IN PTR ftp
.
syd168
.
com
.
5 IN PTR mail
.
syd168
.
com
.
6 IN PTR bbs
.
syd168
.
com
.
7 IN PTR test
.
syd168
.
com
.
//=============反向区域文件结束=============
3.测试与调试配置
修改完成后,保存推出
1
)
#service named start //启动named服务(提供DNS服务的进程),常见的错误是缺少.或;或左边多余的空格,排除直道本命令没有错误
2
)
#named //我的虚拟机必须这样才可解析,正常机器大概不需要,并且我在/etc/rc.d/rc.local中加入了运行named的行
3
)
#named -g 检查是否有错误,一般会很清楚,很多人说服务运行正常,但无法解析,除了/etc/resolv.conf中没有添加DNS服务器的IP,大多错误都可以通过这个命令排除
4
)
#host www.syd168.com //测试是否成功? 如果成功,别的主机记录一般也没什么问题。host 可以用ping代替
5
)
host 172.16.0.3
//测试反向解析
6
)
host
-
t MX syd168
.
com
//测试邮件交换器
7
)
host
-
t NS syd168
.
com
//测试域名服务器
补充说明:
#named -g 非常有用!反正我的所有DNS错误都是用它排除的。主要是直观,能给出出错的行。实质上是日志的更细显示
如果本机测试没有问题,强烈建议在远程测试,开始一般都失败,为什么?因为你没有添加nameserver 172.16.0.3 到它的
/
etc
/
resolv
.
conf中。试试看?哈哈,原来如此简单!
五、子域的实现
1.子域规划
其实,子域的实现上面都写出来了。这里也是重复。我要实现的实父域syd168
.
com的子域,什么意思啊?就是客户机在父域上查询(一般都这样)的时候,发现后缀包含子域的部分,就转到子域所在的服务器上查找,就这么简单。
2.子域的实现
1)修改主域的区域文件,主机记录部分添加如下2行
sub IN NS www
.
sub
.
syd168
.
com
.
//表示后缀为sub.syd168.com的域名由www.sub.syd168.com负责翻译,NS 表示Name Server
www
.
sub IN A 172.16.1.3
//表明www.sub主机在本域中的主机解析为172.16.1.3
2)在子域服务器上修改主配置文件和建立区域文件,方法和上面的一样,只是区域为sub
.
syd168
.
com
,
反向区域比较复杂,再说我马上要走了,,,时间。。。
3.测试配置
要测试子域,必须配置正确,根据子域的原理,客户在父域中查不到时才到子域查,所以测试的时候,测试机器上的DNS客户配置一定要去掉子域服务器的IP,否则您的测试是错误的!不可信的。只有证明了DNS查询是经由主域服务器再到子域服务器上的。
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)