红联Linux门户
Linux帮助

linux下的dns设置详解

发布时间:2006-08-09 16:23:34来源:红联作者:coolentboy
①简介
DNS就是Domain Name System,它能够把形如www.21php.com这样的域名转换为211.152.50.35这样的IP地址;没有DNS,浏览21php.com这个网站时,就必须用211.152.50.35这么难记的数字来访问。提供DNS服务的就是DNS服务器。DNS服务器可以分为三种,高速缓存服务器(Cache-only server)、主服务器(Primary Name server)、辅助服务器(Second Name Server)。

DNS的详细原理、工作流程、术语、概念,限于篇幅,这里就不说了。可以阅读专门的文章,如DNS-HOWTO加以了解。

②配置主DNS服务器
首先我们做以下假设:A服务器为21php.com的主域名服务器,其IP地址为11.0.0.1,B服务器为21php.com的辅助域名服务器,其IP地址为11.0.0.2;

下面我们配置服务器11.0.0.1为21PHP.COM的主DNS服务器

Linux 下的dns功能是通过bind软件实现的。bind软件安装后,会产生几个固有文件,分为两类,一类是配置文件在/etc目录下,一类是dns记录文件在 /var/named目录下。加上其他相关文件,共同设置dns服务器。下面是所有和dns设置相关文件的列表与说明。

位于/etc目录下的有:hosts,host.conf,resolv.conf,named.boot,named.conf。

1、“hosts”文件,定义了主机名和ip地址的对应,其中也有将要运行dns这台电脑的ip地址和主机名。内容:
127.0.0.1 localhost.localdomain localhost
2、 “host.conf”文件[Boban注:原来误写成hosts.conf],"order hosts bind"语句,指定了对主机名的解析顺序是先到hosts中查找,然后到dns服务器的记录里查找。“multi on”则是允许一个主机名对应多个ip地址。内容:
order hosts, bind
multi on
nospoof on
3、 “resolv.conf”文件,“nameserver 10.0.0.211”指定了dns服务器的地址。注意,这个文件对普通非dns服务器的电脑(非windows的系统;Windows系统是在“网络属性”中设置这项的)来说,是必不可少的。你如果没有设置本机为dns服务器,你又要能够解析域名,就必须指定一个dns服务器的地址。你可以最多写上三个地址,作为前一个失败时的候选dns服务器。“domain zrs.com”指定默认的域。文件内容:
domain 21php.com
nameserver 11.0.0.1
4、“named.boot”文件是早期版本的bind软件使用的配置文件,现在新版本中已经让位于“named.conf”。named.conf是dns server配置的核心文件。下面我们一段一段的来解说。

# named.conf - configuration for bind
#
# Generated automatically by bindconf, alchemist et al.
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";options {
directory "/var/named/";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "21php.com" {
type master;
notify yes;
file "21php.com";
};


上文中#为注释符号, 其他各行含义如下:
diretory /var/named

指定named从 /var/named 目录下读取DNS数据文件,这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下;

zone "." {
type hint;
file "named.ca";
};
指定named从 named.ca 文件中获得Internet的顶层“根”服务器地址 。

zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};
指定named作为127.0.0网段地址转换主服务器,named.local文件中包含了127.0.0.*形式的地址到域名的转换数据(127.0.0网段地址是局域网接口的内部 loopback地址);

zone "localhost" {
type master;
file "localhost.zone";
};
指定包含localhost的DNS文件数据存放在/var/named/localhost.zone中;

zone "21php.com" {
type master;
notify yes;
file "21php.com.zone";
};
以上语句表明域21php.com的DNS数据存放在/var/named/目录下的21php.com.zone中;

我们可以用文本编辑器打开/var/named/21php.com.zone,其内容如下:

$TTL 86400 @ IN SOA @ root.localhost (
2 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)

@ IN NS localhost


www IN A 11.0.0.233
www2 IN A 11.0.0.23
forum IN A 11.0.0.10
@ IN MX 5 mail.21php.com.


该文件的前部分是相应的参数设置,此部分不需要改动,后面的部分就是具体的DNS数据;

例如:

www IN A 11.0.0.233
www.21php.com 解析到地址11.0.0.233;

www2 IN A 11.0.0.23
将www2.21php.com 解析到地址11.0.0.23;

club IN A 11.0.0.10
将club.21php.com 解析到地址11.0.0.10;

③配置辅助DNS服务器

配置服务器11.0.0.2为21php.com辅助dns服务器

辅助DNS服务器,可从主服务器中转移一整套域信息。区文件是从主服务器中转移出来的,并作为本地磁盘文件存储在辅助服务器中。在辅助服务器中有域信息的完整拷贝,所以也可以可以回答对该域的查询。这部分的配置内容如下:
zone "21php.com" IN {
type slave;
file "21php.com.zone";
masters { 11.0.0.1; };
};

可以看到,和主DNS服务器不同地方就是:“type”改为了“slave”,然后指明了主DNS服务器的地址“masters { 11.0.0.1; };”。DNS服务启动时,就会自动连接11.0.0.1,读取21php.com域的信息,然后保存到本机的21php.com.zone文件里。


④测试DNS服务器

改动过DNS的相应文件,用“ndc restart”命令重新启动服务,在redhat 7.1以上版本中使用命令:
/etc/rc.d/init.d/named restart
或者
/etc/rc.d/init.d/named reload
使改动生效。

要测试DNS,可以找一台客户机,把它的DNS地址设成新建立的DNS服务器地址,然后试试上网,收信,下载等。也可以使用nslookup命令:运行 nslookup,输入要查询的主机名,看是否返回正确的ip地址,在redhat 7.1以上版本中推荐使用dig命令。

注:以上分别在REDHAT 6.1 REDHAT 9 测试过

===========================================================

一、假定
本文假定你已对域名服务器 DNS 有基本的了解,如果不是,请参看相关的文裆。 许多DNS的文章都是从
DNS原理开始介绍,本人则从使用的角度出发,为Linux的管理员提供一些简单实用的应用实例。

下面假定我们需要建立一台企业网的DNS主服务器,应用条件如下:

(1)一个C类网段地址 (本例中假定是192.22.33)

(2)企业域名为 my.com,并已注册 (主域名服务器地址 192.22.33.20,主机名为 linux.my.com)

(3)企业网通过路由器与Internet连接

假如你的应用环境与上述条件不同,也请往下看,本文会在上述例子的基础上针对以下情况作修正:

(1) 多个网段

(2) 封闭的内部网

(3) 只能访问局部公共网的情况(如169网、上海热线等)

二、named、/etc/named.boot 和 ndc

DNS 服务器的主体是域名服务器进程 named ,named 启动后向DNS客户机提供域名解析服务,把域名转
换成IP地址。

named 启动时需要读取一个初始化文件,缺省情况下是 /etc/named.boot,所以 /etc/named.boot 是
named 的基本配置文件。

虽然启动 named 可直接执行 named,在Linux上我们可以使用一个控制 named 的工具 ndc。ndc 可以
用于启动、中止、重启动、刷新 DN S数据、输出 DNS 数据等多种调试功能,我在这里推荐大家用这个工具
来帮助 DNS 服务器的调试。

有关 ndc 的详细用法,请参看 Linux 有关文档。

三、建立 named 配置文件 /etc/named.boot

/etc/named.boot 是基本的配置文件,但不包含任何 DNS 数据,针对我们前面的假定,我们先建立以
下 /etc/named.boot,其内容如下:

;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
cache . db.cache

其中以“;”开头的行是注释行,其他各行含义是
(1)diretory /var/named

指定 named 从 /var/named 目录下读取 DNS 数据文件。这个目录用户可自行指定并创建,指定后所有
的DNS 数据文件都存放在此目录下。

(2)primary my.com db.my

指定 named 作为 my.com 域的主域名服务器,db.my 文件中包含所有 *.my.com 形式的域名转换数据。

(3)primary 0.0.127.IN-ADDR.ARPA db.127.0.0

指定 named 作为127.0.0网段地址转换主服务器,db.127.0.0 文件中包含了 127.0.0.* 形式的地址
到域名的转换数据。(127.0.0网段地址是局域网接口的内部 loopback 地址)

(4)primary 33.22.192.IN-ADDR.ARPA db.192.22.33

指定 named 作为 192.22.33 网段地址转换主服务器,db.192.22.33 文件中包含了所有192.22.33.*
形式的地址到域名的转换数据。

(5) cache . db.cache

指定 named 从 db.cache 文件中获得 Internet 的顶层“根”服务器地址

要注意(3)(4)两行中的网段地址是倒写的,另外,各个文件名也是可以自行决定的。

四、建立各个 DNS 数据文件

下一步,要按 /etc/named.boot 中的定义,建立各个 DNS 数据文件。

(1)建立正向域名转换数据文件 db.my

根据 /etc/named.boot 的定义,我们在 /var/named 目录下建立 db.my,其中应该包括所有在
my.com 域内的主机节点。但在机器数量较多时,为了调试方便,建议一开始只把几台节点的数据放入
文件,待 named 正常工作后再把其他节点的数据补充进去。下面是 db.my的例子:

@ IN SOA linux.my.com. root.linux.my.com. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS linux.my.com.
MX 10 support.my.com.
localhost A 127.0.0.1
linux A 192.22.33.20
support2 A 192.22.33.102
hp712 A 192.22.33.160
support A 192.22.33.100
mail MX 10 support.my.com.
MX 20 support2.my.com.
www CNAME hp712.my.com.
ftp CNAME hp712.my.com.
ns CNAME linux.my.com.

其中第一行是 SOA 记录,定义了域名数据的基本信息,依次是 DNS 服务器名、DNS 管理员邮件地址,
括号内的第一个数字是文件版本号,每次本文件内容修改后,必须更改此号。其余数字与 DNS 服务器直接
的数据交换有关,在这里我们不需要改动。
括号后面有一条 NS 记录和一条 MX 记录,定义了域名服务器本身的域名和 username@my.com 形式邮
件地址所对应的邮件服务器名字。

在此以下是各种域名/地址转换数据,其中 A 记录是 DNS 域名到 IP 地址的记录,是必须有的,以
hp712.my.com 为例,在 A 记录中域 my.com 被省略,只写成 hp712,named 在处理时会根据 named.boot
中的定义自动加上 my.com,而其对应 IP 地址为 192.22.33.160。

另一种记录是 MX 记录。MX 是邮件地址转换记录,本例中定义了将 username@mail.my.com 的邮件地
址转换成 username@support.my.comusername@support2.my.com,即实际上真正的邮件服务器是
support.my.com 和 support2.my.com,其中 support.my.com 的优先数为 10,support2.my.com 的优先
数为 20,所以通常邮件首先被发往优先数小的主机 support.my.com。

还有一些是为方便提供的 CNAME 记录。CNAME 定义了一些主机的别名,比如我们将 hp712.my.com 作
为公司的 www 和 ftp 服务器,所以我们提供了 www.my.com 和 ftp.my.com 作为 hp712.my.com 的别名,
用户只需要根据习惯就可以访问公司的 www、ftp 服务器了,如果将来我们换用别的主机作 www 和 ftp
服务器,只需要修改 CNAME 记录就可,对用户没有影响。

注意:MX 和 CNAME 记录最后的带域名的主机名后必须带一个“.”

(2)建立反向 DNS 数据文件 db.127.0.0 和 db.192.22.33

反向 DNS 数据文件用来提供根据 IP 地址查询相应 DNS 主机名,每个网段分别有一个数据文件。

对于内部网段 127.0.0 通常只有一个地址,即 127.0.0.1 loopback 地址,db.127.0.0 内容如下:

@ IN SOA linux.my.com root.linux.my.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.my.com.
1 IN PTR localhost.

而外部网段的数据文件 db.192.22.33 中包含所有主机 IP 地址到 DNS 主机名的转换数据。
db.192.22.33 内容如下:

@ IN SOA linux.my.com. root.pc590.my.com. (
199609206 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS linux.my.com.
;
; All hosts
;
20 PTR linux.my.com.
102 PTR support2.my.com.
100 PTR support.my.com.
160 PTR hp712.my.com.

反向 DNS 数据文件中的主要部分是 PTR 记录,PTR 记录中的 IP 地址都只有主机号,named 会根据
named.boot 的定义自动加上前面的网络号,注意后面的主机名要附加一个“.”

(3)获得 db.cache 文件

在 Linux 系统上通常在 /var/named 下已经提供了一个 named.ca,该文件文件中包含了 Internet
的顶层域名服务器,但这个文件通常会发生变化,所以建议最好从 Internic 下载最新的版本。该文件可
通过匿名 ftp 从 ftp.rs.internic.net 下载,在 domain 目录下,文件名为 named.root。注意该文件
下载后要拷贝到 named 的工作目录并重命名成 named.boot 中指定的文件名,本文中为 db.cache。

五、启动和测试 named

首先,根据先前推荐的方法,用 ndc 启动 named: ndc start

然后,为了使用和测试 named,要把 Linux 设置在使用 DNS 状态。方法是在 /etc 目录下,创建
resolv.conf 文件。以我们的例子,/etc/resolv.conf 内容为:

search my.com
nameserver 192.22.33.20

然后,我们就可以测试 named 了。

Linux 和其他 Unix 系统均提供了 nslookup 工具,在命令行状态下输入:

nslookup

就进入交换式 nslookup 环境,如果 named 正常启动,nslookup 会显示当前 DNS 服务器的地址和
域名,否则表示 named 没能正常启动。下面简单介绍一些基本的 DNS 诊断:

(1)检查正向 DNS 解析

在 nslookup 提示符下输入带域名的主机名,如 hp712.my.com,nslookup 应能显示该主机名对应的
IP 地址,如果只输入 hp712,nslookup 会根据 /etc/resolv.conf 的定义,自动添加 my.com 域名并
回答对应的 IP 地址。

(2)检查反向 DNS 解析

在 nslookup 提示符下输入某个 IP 地址,如 192.22.33.20,nslookup 应能回答该 IP 地址所对
应的主机名。

(3)检查 MX 邮件地址记录

在 nslookup 提示符下输入:

set q=mx

然后输入某个域名,以本文的例子,输入 my.com 或 mail.my.com,nslookup 应能够回答对应的邮
件服务器地址,即 support.my.com 和 support2.my.com。

(4)检查 CNAME 别名记录

在 nslookup 提示符下输入:

set q=cname

然后输入某个别名,如 www.my.com,nslookup 应能回答对应的真实主机名,即 hp712.my.com。

如要退出 nslookup,可输入 exit。

六、修改 DNS 数据

如果要在网络中增加主机,例如要增加一台叫做 pc01.my.com 的PC 机,管理员要在 db.my 中增加该
主机对应的 A 记录,并且要在 db.192.22.33 中增加对应的 PTR 记录,然后用 ndc 更新 named 的数据:

ndc reload

要注意必须同时更改 A 记录和 PTR 记录,许多管理员往往只增加 A 记录而忽略了逆向查询用的 PTR
记录,结果会使许多应用程序不能正常运行。

特别注意,一旦修改了 DNS 数据文件的内容,请务必改动数据文件的版本号( Serial )

七、使网络中的其他系统(客户机)使用 DNS 服务器

一旦 DNS 服务器开始工作,就可以配置所有企业网内的主机使用 DNS 服务。 Unix 主机配置的方法,
已经在前面说明过,即创建 /etc/resolv.conf 文件,内容见前面第五节。

Windows 95 的配置则是在网卡的 TCP/IP 配置中,选择使用 DNS (enable),然后在配置窗口中分
别填入各项参数。以本文的例子,如果运行 Windows95 的主机被命名为 pc01.my.com,则在主机名
(Host)一栏中填 pc01,在域名(Domain)一栏中填 my.com,然后把域名服务器 (DNS Server)
加入搜索列表中。

Windows NT 节点的配置大致相同。

八、几种不同环境下的修正

(1)如果 IP 网段多于一个

假定现在在 my.com 域中增加一个 IP 网段 192.22.37,则 /etc/named.boot 的内容中就增加一个
网段的定义,具体如下:

;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
primary 37.22.192.IN-ADDR.ARPA db.192.22.37
cache . db.cache

而反向 DNS 数据文件则增加一个定义 192.22.37 网段的文件 db.192.22.37,其中包括了所有处于
192.22.37 网段中的节点,其格式与 db.192.22.33 类似。
(2)如果企业网是封闭的

如果企业网络不与外界 Internet 直接互连,DNS 服务器就不必关心本企业域以外的域名,所以配置
named 的时候可以不理会 db.cache,我们可以将 /etc/named.boot 中的 cache 行去除。

(3)如果你联入的公共网不能访问 Internet

如果你的内部网接入的公共网只能访问有限的范围,如免费的169网、上海热线等,那么你的 DNS 服
务器就不能通过 Internet 的顶层服务器(root server)进行地址解析,所以你必须用你直接能访问到
的 DNS 服务器来替代。具体办法是用 forwarders 选项来指定上级 DNS 服务器,以本文为例,
named.boot 的内容为:

;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
primary 37.22.192.IN-ADDR.ARPA db.192.22.37
forwarders ...
options forward-only

其中、等是你能直接访问到的 DNS 服务器的地址,通常就是你的 ISP (169、上海热线等)的 DNS
服务器的地址,至少要有一个。 通过 forwarders 和 options forward-only 参数的指定,你的企业
DNS 服务器就工作在 forward-only 模式下,所有本地不能解决的名字都被传送到 ISP 的 DNS 服务器
上去解析。

九、建立后备 DNS 服务器 (Secondary DNS Server)

通常有一台 DNS 主服务器,网络即可正常工作,但根据 Internic 对域名的管理规范,一个独立的
域名必须至少有两台 DNS 服务器,即一台 DNS 主服务器 ( Primary Server )和一台后备 DNS 服务
器( Secondary Server ),这主要是为 DNS 服务的可靠性考虑,能使 Internet 的性能更为可靠。

现在仍以前面的例子,现在要加入一台运行 Linux 的机器 nspc.my.com,IP 地址为 192.22.33.60

(1)主服务器上的修改

首先确认 DNS 主服务器工作正常,然后,在主服务器上的正向 DNS 数据文件 db.my 中,加入
nspc.my.com 的有关记录,并增加一个NS记录,使主服务器上的 db.my 成为下列内容:

@ IN SOA linux.my.com. root.linux.my.com. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS linux.my.com.
NS nspc.my.com. ; 必须增加的记录
MX 10 support.my.com.
localhost A 127.0.0.1
linux A 192.22.33.20
support2 A 192.22.33.102
hp712 A 192.22.33.160
support A 192.22.33.100
nspc A 192.22.33.60 ; 增加的记录
mail MX 10 support.my.com.
MX 20 support2.my.com.
www CNAME hp712.my.com.
ftp CNAME hp712.my.com.
ns2 CNAME nspc.my.com. ; 增加的记录
ns CNAME linux.my.com.

然后对主服务器上的各个反向 DNS 数据文件做类似的修改,增加有关后备服务器的 NS 记录,然
后重新起动 named。
可见,其实在主 DNS 服务器上的改动主要是增加了一条 NS 记录,其余的改动和增加一台普通节
点一样,如果是用现有的节点做后备 DNS 服务器,则增加 NS 记录是唯一必须的步骤。

(2)后备 DNS 服务器(secondary server)的配置

需要在后备 DNS 服务器上创建的配置文件只有 named.boot 和 db.cache,格式与主服务器相似,
named.boot 内容为:

;
; boot file for secondary name server
;
directory /var/named
secondary my.com 192.22.33.20 db.my
secondary 0.0.127.IN-ADDR.ARPA 192.22.33.20 db.127.0.0
secondary 33.22.192.IN-ADDR.ARPA 192.22.33.20 db.192.22.33
cache . db.cache

其中的三行 secondary 定义,使得 named 从 192.22.33.20,即主服务器上获得各种 DNS 数据,
并存在本地的各个数据文件中。本地的数据文件由 named 从主 DNS 服务器的 named 下载后生成,
通常与主服务器上的数据文件完全一样,万一后备服务器与主服务器失去连接而不能下载 DNS 数据,
后备服务器可利用本地的数据文件工作。
而后备 DNS 服务器的 db.cache 通常由系统管理员从主服务器上拷贝过来即可。

通常,后备 DNS 服务器可以建立在企业网内,也可利用外部的 DNS 服务器充当,如让 ISP 的
服务器作为企业的后备 DNS 服务器,这样可以提高 DNS 服务的可靠性。注意,同一台 DNS 服务器
可以同时成为多个 DNS 域的服务器,而且可以既作某些域的主服务器,同时又是另一些域的后备服
务器。

(3)DNS 客户机端的改动

对于内部网上的 Unix 主机,应该在 /etc/resolv.conf 中增加一行 nameserver 说明,使得系
统能够搜索后备 DNS 服务器,以本文的例子,/etc/resolv.conf 的内容为:

search my.com
nameserver 192.22.33.20
nameserver 192.22.33.60

注意,我们可以根据需要决定 /etc/resolv.conf 中所列出的 DNS 服务器的顺序,通常选择访
问速度快的服务器在前。

对于 Windows95 和 NT,则是在 DNS 服务器的列表中把后备 DNS 服务器添加进去即可,添加
的顺序同样可以决定访问各 DNS 服务器的优先级。
文章评论

共有 0 条评论