分类: LINUX
2011-01-24 21:06:36
连载
RHEL5.4配置DNS服务(2)
http://blog.chinaunix.net/space.php?uid=14762370&do=blog&id=100701
RHEL5.4配置DNS服务(3)
http://blog.chinaunix.net/space.php?uid=14762370&do=blog&id=100702
下面是关于linux系统下面配置DNS服务讨论,
DNS介绍
DNS全名为Domain Name Server (域名系统),在TCP/IP网络中有非常重要的地位,其目的就是为了提供域名和IP地址的解析服务。
当我们在上网的时候,通常输入的是网址,其实这就是一个,而计算机网络上的计算机彼此之间只能用IP地址才能相互识别。再如,我们去一WEB服务器中请求一WEB页面,我们可以在浏览器中输入网址或者是相应的IP地址,但是IP地址我们记不住或说是很难记住,所以有了域名的说法,这样的域名会让我们容易的记住。
DNS组织结构
这个就是整个DNS的组织结构
最顶级的就是根域名服务器(.)
全球13个DNS根(rootDNS)服务器信息
A.root-servers.net198.41.0.4美国(另支持IPv6)
B.root-servers.net192.228.79.201美国
C.root-servers.net192.33.4.12法国
D.root-servers.net128.8.10.90美国
E.root-servers.net192.203.230.10美国
F.root-servers.net192.5.5.241美国(另支持IPv6)
G.root-servers.net192.112.36.4美国
H.root-servers.net128.63.2.53美国(另支持IPv6)
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美国(另支持IPv6)
K.root-servers.net193.0.14.129英国(另支持IPv6)
L.root-servers.net199.7.83.42美国(另支持IPv6)
M.root-servers.net202.12.27.33日本(另支持IPv6)
常见的顶级域服务器
DNS的解析过程
当计算机去访问这个域名的时候
计算机首先会去都读取本地的host文件和缓存
如果有,就直接去解析
如果没有,则去将请求发给DNS Server
如果 Serser的管理区域内
那么DNS Server就会将请求发送给根域名服务器进行查询
根域名服务器就会将请求给.com机构,.com将请求给google.com
当找到了记录,DNS Server就会返回给client,并且将记录保存在自己的缓存里。
当下次有client请求的时候,它就会调用自己的缓存。
正向解析:将主机名装换成IP地址,
反向解析:将IP地址装换成主机名,
域名的表示方法 (通常是用FQDN名)
例如:.
最后的那个点是根域名,然后com是顶级域名,google是二级域名,www是主机。
在整个DNS的解析过程中,全球的13台根域名服务器只会管理顶级域,顶级域管理二级域。二级域管理子域。
关于DNS的查询方式
递归查询:一般在客户端与服务器之间的查询叫做递归查询。
迭代查询:服务器与服务器之间的查询叫做迭代查询。
下面就正式的在linux下面配置DNS服务。
在linux下面架设DNS服务器都是用bind软件来实现的
Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件
目前Internet绝大多数的DNS服务器都是用BIND来架设的。
下面是关于DNS这个服务的属性
DNS的相关软件包
Bind bind-chroot caching-nameserver
Bind 是来提供核心的二进制程序
Bind-chroot 提供安全性的
Caching-nameserver 提供模板文件
DNS的守护进程
/usr/sbin/named /usr/sbin/rndc
DNS的脚本
/etc/init.d/named
DNS的端口
53 953(tcp udp)
DNS的配置文件
/var/named/chroot/etc/named.conf(主配置文件) /var/named/chroot/*
下面具体来搭建DNS服务
第一步,安装软件包
DNS软件包默认是没有安装的,首先我们就要安装这个软件包
[root@localhost ~]# yum -y install bind bind-chroot caching-nameserver
Loaded plugins: rhnplugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bind.i386 30:9.3.6-4.P1.el5 set to be updated
---> Package bind-chroot.i386 30:9.3.6-4.P1.el5 set to be updated
---> Package caching-nameserver.i386 30:9.3.6-4.P1.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================
Package Arch Version Repository Size
=================================================================================================
Installing:
bind i386 30:9.3.6-4.P1.el5 Server 978 k
bind-chroot i386 30:9.3.6-4.P1.el5 Server 44 k
caching-nameserver i386 30:9.3.6-4.P1.el5 Server 60 k
Transaction Summary
=================================================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 1.1 M
Downloading Packages:
(1/3): bind-9.3.6-4.P1.el5.i386.rpm | 978 kB 00:00
(2/3): bind-chroot-9.3.6-4.P1.el5.i386.rpm | 44 kB 00:00
(3/3): caching-nameserver-9.3.6-4.P1.el5.i386.rpm | 60 kB 00:00
-------------------------------------------------------------------------------------------------
Total 1.3 MB/s | 1.1 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : bind 1/3
Installing : caching-nameserver 2/3
Installing : bind-chroot 3/3
Installed:
bind.i386 30:9.3.6-4.P1.el5 bind-chroot.i386 30:9.3.6-4.P1.el5
caching-nameserver.i386 30:9.3.6-4.P1.el5
Complete!
DNS的所有软件包就安装成功了。
第二步,复制模板文件
由于安装了chroot环境,所以我们的DNS主配置文件应该在/var/named/chroot/etc目录下面
[root@localhost ~]# cd /var/named/chroot/
[root@localhost chroot]# ls
dev etc var
[root@localhost chroot]# cd etc/
[root@localhost etc]# ls
localtime named.caching-nameserver.conf named.rfc1912.zones rndc.key
[root@localhost etc]#
打开named.caching-nameserver.conf文件来看看,
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
这个文件告诉我们不要直接的编辑这个文件,去创建一个named.conf文件,然后编辑named.conf文件,当有了named.conf,将不在读取这个文件。
现在就将named.caching-nameserver.conf文件复制成named.conf文件。
[root@localhost etc]# ls
localtime named.caching-nameserver.conf named.rfc1912.zones rndc.key
[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf
[root@localhost etc]# ls
localtime named.conf rndc.key
named.caching-nameserver.conf named.rfc1912.zones
[root@localhost etc]#
可以看到,named.conf文件就被创建成功了。最好在copy的时候加上-P的参数,保留权限。否则启动服务的时候会报权限拒绝的。
第三步,编辑named.conf文件
[root@localhost etc]#
[root@localhost etc]# vim named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
allow-query { 192.168.0.0/24; };
allow-query-cache { any; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients { 192.168.0.0/24; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
解释这些语法参数的意思
options
代表全局配置
listen-on port 53 { any; };
DNS服务监听在所有接口
listen-on-v6 port 53 { ::1; };
ipv6监听在本地回环接口
directory "/var/named";
zone文件的存放目录,指的是chroot环境下面的/var/named
dump-file "/var/named/data/cache_dump.db";
存放缓存的信息
statistics-file "/var/named/data/named_stats.txt";
统计用户的访问状态
memstatistics-file "/var/named/data/named_mem_stats.txt";
每一次访问耗费了多数内存的存放文件
allow-query { 192.168.0.24 };
允许查询的客户端,现在修改成本地网段,
allow-query-cache {any; };
允许那些客户端来查询缓存,any表示允许任何人。
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
定义日志的存放位置在/var/named/chroot/var/named/data/目录下面
};
view localhost_resolver {
match-clients { 192.168.0.0/24; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
这里是定义视图的功能,
Match-clients 是指匹配的客户端
Match-destination 是指匹配的目标
到这里,named.conf文件就已经配置成功了,这个视图最后写include "/etc/named.rfc1912.zones";接下面,就去配置这个文件。当然,我们可以匹配不同的客户端来创建不同的视图。
第四步,定义zone文件。(编辑named.rfc1912.zones文件)
[root@localhost etc]#
[root@localhost etc]# vim named.rfc1912.zones
zone "." IN {
type hint;
file "named.ca";
};
zone "example.com" IN {
type master;
file "example.zone";
allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "named.example";
allow-update { none; };
};
解释这些语法参数的意思
Zone “.” 根区域
Zone “example.com” 定义正向解析的区域
zone "0.168.192.in-addr.arpa" 定义反向解析的区域
IN Internet记录
type hint 根区域的类型为hint
type master 区域的类型为主要的
file “named.ca” ; 区域文件是named,ca
file "example.zone"; 指定正向解析的区域文件是example.com
file "named.example"; 指定反向解析的区域文件是named,example
allow-update { none; }; 默认情况下,是否允许客户端自动更新
在named.ca文件中就定义了全球的13台根服务器,
在example.com文件中就定义DNS的正向解析数据库
在named.example文件中就定义DNS反向解析的数据库
定义zone文件就完成了,下面来编辑DNS的数据库文件。
第五步,复制模板文件成数据库文件
[root@localhost ~]#
[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# ls
data localhost.zone named.ca named.local slaves
localdomain.zone named.broadcast named.ip6.local named.zero
[root@localhost named]#
可以看到,在chroot环境下面的/var/named/有很多模板文件。Named.ca就是根区域的数据库文件,我们将localhost.zone复制成example.zone,这个是正向解析的数据库文件,将named.local复制成named.example,这个是反向解析的数据库文件。数据库文件一定要和/etc/named.rfc1912.zones这个文件里面的匹配。
[root@localhost named]#
[root@localhost named]# cp -p localhost.zone example.zone
[root@localhost named]# cp -p named.local named.example
[root@localhost named]# ls
data localdomain.zone named.broadcast named.example named.local slaves
example.zone localhost.zone named.ca named.ip6.local named.zero
[root@localhost named]#
复制成功,正向解析和反向解析的数据库文件就已经好了。
第六步,定义数据库文件
1. 定义正向解析数据库文件
[root@localhost named]#
[root@localhost named]# vim example.zone
$TTL 86400
@ IN SOA server1.example.com. root.exmaple.com. (
2010022101 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS server1.example.com.
server1 IN A 192.168.0.254
station10 IN A 192.168.0.10
station20 IN A 192.168.0.20
station30 IN A 192.168.0.30
station40 IN A 192.168.0.40
station50 IN A 192.168.0.50
关于正向解析数据库中每一行参数的解释
$TTL 86400
最小的存活的时间是86400S(24H)
@ IN SOA server1.example.com. root.exmaple.com. (
这是一笔SOA记录,只允许存在一个SOA记录
@是代表要解析的这个域本身(example.com)
IN是Internet记录。
SOA 是初始授权记录,指定网络中第一台DNS Server。
Server1.example.com是DNS服务器的名字。
Root.example.com是指管理员的邮箱。
2010022101 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
这些部分主要是用来主DNS和辅助DNS做同步用的
2010022101 序列号,当主DNS数据改变时,这个序列号就要被增加1,而辅助DNS通过序列号来和主DNS同步。
3H 刷新,主DNS和辅助DNS每隔三小时同步一次。
15M 重试,3H之内,没有同步,每隔15M在尝试同步
1W 过期,1W之内,还没有同步,就不同步了
1D 生存期,没有这条记录,缓存的时间。
@ IN NS server1.example.com.
这是一笔NS记录,指定nameserver为server1.example.com
至少要有一笔NS记录
server1 IN A 192.168.0.254
指定server1的ip地址为192.168.0.254
station10 IN A 192.168.0.10
指定station10的ip地址为192.168.0.10
正向解析的数据库就完成了,下面定义反向解析的数据库。
2. 定义反向解析数据库
[root@localhost named]#
[root@localhost named]# vim named.example
$TTL 86400
@ IN SOA server1.example.com. root.example.com. (
2010022101 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
@ IN NS server1.example.com.
254 IN PTR server1.example.com.
10 IN PTR station10.example.com.
20 IN PTR station20.example.com.
30 IN PTR station30.example.com.
40 IN PTR station40.example.com.
50 IN PTR station50.example.com.
其实反向解析的数据库文件的配置和正向解析的差不多,只需要将ip地址和域名换一个位置就可以了,把A换成PTR就ok了。
DNS的基本配置就完成了,在来看看DNS是否能够正常工作。
我们先重启一下DNS服务
[root@localhost ~]#
[root@localhost ~]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
[root@localhost ~]#
可以看到,DNS服务启动成功了。
在查询以前,要在客户端来指定DNS Server,在/etc/resolv.conf这个文件中指定。
[root@localhost ~]#
[root@localhost ~]# vim /etc/resolv.conf
search example.com
nameserver 192.168.0.254
~
再来使用nslookup工具来查询一下
[root@localhost ~]#
[root@localhost ~]# nslookup
> server1.example.com
Server: 192.168.0.254
Address: 192.168.0.254#53
Name: server1.example.com
Address: 192.168.0.254
> 192.168.0.254
Server: 192.168.0.254
Address: 192.168.0.254#53
254.0.168.192.in-addr.arpa name = server1.example.com.
>
可以看到,DNS解析一切正常,