* 本文的目的是配置一个DNS master服务器,以供自己学习研究使用
* 硬件环境:两台PC,RH FC3,一个router
* 192.168.1.21 是DNS服务器,hostname 是atslxt001
* 192.168.1.22 是DNS客户端,hostname 是atslxt002
* 时间:2005年7月7日星期四
* 作者:kilvon
* 版本:1.0
1. 从安装光盘或者ISO里找到3个相关的RPM包,我用的是RH FC3,kernel的版本是:2.6.9-1.667,相应的RPM是:
bind-9.2.4-2.i386.rpm
bind-utils-9.2.4-2.i386.rpm
caching-nameserver-7.3-3.noarch.rpm
2.安装
#rpm –Uvh bind-9.2.4-2.i386.rpm
#rpm –Uvh bind-utils-9.2.4-2.i386.rpm
#rpm –Uvh caching-nameserver-7.3-3.noarch.rpm
3. DNS的客户端会去查找这个文件:/etc/resolv.conf,以下是实际的输出:
search tcs.com.
nameserver 192.168.1.21
nameserver 127.0.0.1
说明:tcs.com这个域名是我用在本地局域网里面测试学习使用的,不是注册的(真的是有这个域名的,希望不会引起误会)
由于192.168.1.21是本机的地址,所以上面第3、4行的作用是一样的,如果在其他的机器上就要写成:
search tcs.com.
nameserver 192.168.1.21
那么在查找域名时就会去找192.168.1.22这个地址上的DNS server;
这里最多列3个name server,系统按顺序查找
search tcs.com中的tcs.com的作用是当只使用atslxt001时,系统先把tcs.com附在该名字后变成atslxt001.tcs.com,然后再去询问DNS服务器。
4. 好了,客户端的配置就完成了,该配服务器端了;服务器可以配置为3种模式:master, slave, caching only,可以针对不同的域名配置不同的模式。
5. 先来配置一个最简单的master DNS
Master DNS包含某个domain的数据库(zone)。需要修改/etc/named.conf文件:
[root@atslxt001 named]# more /etc/named.conf
//
// named.conf for Red Hat master DNS
//
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* 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 caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } 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 "named.local";
allow-update { none; };
};
zone "tcs.com" IN {
type master;
file "named.tcs.com";
allow-update { none; };
};
include "/etc/rndc.key";
//
//end of named.conf [Kilvon]
//
这句命令指明了zone文件存放的地址:
directory "/var/named";
所以要创建这个文件/var/named/named.tcs.com
[root@atslxt001 named]# more /var/named/named.tcs.com
$TTL 86400
@ IN SOA atslxt001.tcs.com. root.tcs.com. (
2005070800 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
tcs.com. IN NS atslxt001.tcs.com.
atslxt001.tcs.com. IN A 192.168.1.21
ftp IN CNAME atslxt001
atslxt001 IN A 192.168.1.21
atslxt002 IN A 192.168.1.22
atslxt003 IN A 192.168.1.23
atslxt004 IN A 192.168.1.24
atslxt005 IN A 192.168.1.25
atslxt006 IN A 192.168.1.26
注意上面第一列没有以 .结尾的都将自动被加上域名tcs.com.
其中各个关键字的含义是:
SOA : Start Of Authority 该字段放在zone file最开始的地方,描述本zone相关的各种name server数据;它前面的@符号代表了named.conf中的zone”tcs.com”;
NS : name server,定义了tcs.com这个domain是由atslxt001.tcs.com这个name server负责解析;
A : address,定义主机对应的ip地址
PTR : pointer,定义ip对应的主机名
CNAME : canonical name,定义主机的别名,比如我定义ftp就是atslxt001
[root@atslxt001 named]# host ftp
ftp.tcs.com is an alias for atslxt001.tcs.com.
atslxt001.tcs.com has address 192.168.1.21
MX : mail exchanger
然后就配置好了,用以下命令激活新设置的参数并校验是否可以使用DNS服务了
[root@atslxt001 named]# service named reload
Reloading named: [ OK ]
[root@atslxt001 named]# host atslxt002
atslxt002.tcs.com has address 192.168.1.22
如果有规则的主机名,可以使用这个方法:
$GENERATE 1-6 atslxt00$ A 192.168.1.2$
其中atslxt00$即表示atslxt001-6,并且注意Class位不可写入IN
6. 上面的配置中没有包含反解域,现在加入反解域的数据。
[root@atslxt001 named]# more /etc/named.conf
//
// named.conf for Red Hat caching-nameserver
//
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* 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 caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } 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 "named.local";
allow-update { none; };
};
zone "tcs.com" IN {
type master;
file "named.tcs.com";
allow-update { none; };
};
//以下数据是为反解域而设
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
};
include "/etc/rndc.key";
//
//end of named.conf [Kilvon]
//
然后编辑文件named.192.168.1
[root@atslxt001 named]# more /var/named/named.192.168.1
$TTL 86400
@ IN SOA atslxt001.tcs.com. root.atslxt001.tcs.com. (
2005071901 ;serial number
10800 ;refresh
3600 ;retry
604800 ;expire
0) ;TTL for negative answer
IN NS atslxt001.tcs.com.
21.1.168.192.in-addr.arpa. IN PTR atslxt001.tcs.com.
$GENERATE 2-6 2$ PTR atslxt00$.tcs.com.
当然也可以这样写,
21 IN PTR atslxt001.tcs.com.
22 IN PTR atslxt002.tcs.com.
同样的,第一列没有以 .结尾的话会自动被加上1.168.192.in-addr.arpa.
最后测试一下:
[root@atslxt001 named]# service named reload
Reloading named: [ OK ]
[root@atslxt001 named]# host 192.168.1.25
25.1.168.192.in-addr.arpa domain name pointer atslxt005.tcs.com.
[root@atslxt001 named]# host 192.168.1.21
21.1.168.192.in-addr.arpa domain name pointer atslxt001.tcs.com.
附录:
1. 主机名存放在/etc/sysconfig/network文档中:
[root@atslxt001 ~]# more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=atslxt001.tcs.com
2.设置静态地址在/etc/sysconfig/networking/devices/ifcfg-eth0
[root@atslxt001 ~]# more /etc/sysconfig/networking/devices/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.21
USERCTL=no
PEERDNS=yes
IPV6INIT=no
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
3.至于系统先查询/etc/hosts还是DNS取决于这个文件/etc/nsswitch.conf,中间有一行是这么写的:
hosts: files dns
4. DNS服务器上的防火墙设置(系统设置=>安全级别)一定要允许telnet访问,否则会出现只有DNS服务器本机可以使用DNS服务的情况;
5. BIND语法检查工具
[root@atslxt001 named]# named-checkconf
[root@atslxt001 named]# named-checkzone tcs.com named.tcs.com
zone tcs.com/IN: loaded serial 2005070800
OK
[root@atslxt001 named]# named-checkzone 1.168.192.in-addr.arpa named.192.168.1
zone 1.168.192.in-addr.arpa/IN: loaded serial 2005071901
OK