二、DNS服务介绍和软件安装
1、DNS服务介绍
类型:系统V(System V)管理的服务
软件包:bind、bind-utils、bind-chroot
守护进程:/usr/sbin/named, /usr/sbin/rndc
脚本:/etc/init.d/named
端口:53 (domain,tcp,udp), 953(rndc)
配置文件:(Under /var/named/chroot/) /etc/named.conf, /var/named/*, /etc/rndc.key
相关软件包:caching-nameserver(提供配置文件模板), openssl
2、安装
[root@station1~]#rpm -ivh /mnt/cdrom/Server/bind-9.3.3-10.el5.i386.rpm
[root@station1~]#rpm -ivh /mnt/cdrom/Server/bind-libbind-devel-9.3.3-10.el5.i386.rpm
[root@station1~]#rpm -ivh /mnt/cdrom/Server/bind-sdb-9.3.3-10.el5.i386.rpm
[root@station1~]#rpm -ivh /mnt/cdrom/Server/bind-devel-9.3.3-10.el5.i386.rpm
[root@station1~]#rpm -ivh /mnt/cdrom/Server/caching-nameserver-9.3.3-10.el5.i386.rpm
[root@station1~]#rpm -ivh /mnt/cdrom/Server/bind-chroot-9.3.3-10.el5.i386.rpm
3、配置主DNS服务器(192.168.32.31)
3.1、环境:Master Server:station1.kvm.com 192.168.32.31
Slave Server:station2.kvm.com 192.168.32.32
Cache Server:station3.kvm.com 192.168.32.33
Cleint:station6.kvm.com 192.168.32.36
域:kvm.com.
3.2、配置主配置文件named.conf
[root@station1~]#cd /var/named/chroot/etc
#安装bind-chroot后所有named相关文件均在/var/named/chroot目录下,位置调整可修改 /etc/sysconfig/named文件 ROOTDIR=/var/named/chroot
[root@station1 etc]#cp -p named.caching-nameserver.conf named.conf
#全局配置选项均在named.caching-nameserver.conf中
[root@station1 etc]#cat named.rfc1912.zones>>named.conf
#各区域配置模板均在named.rfc1912.zones中
[root@station1 etc]#vi named.conf
options { #全局配置
listen-on port 53 { 192.168.32.31; };
#将named绑定到指定接口默认:如果缺少listen-on配置,named就会监听所有接口
listen-on-v6 port 53 { ::1; };
directory "/var/named"; #/var/named/chroot/下相对目录
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 { any; }; #允许迭代查询的客户机IP
allow-recursion { any ; }; #允许递归查询的客户机IP
allow-query-cache { localhost; };
#允许查询缓冲的客户机ip,主副服务器可不要此项,缓冲服务器中要此项
allow-transfer { 192.168.32.32; }; #允许下载区域文件的辅助服务器地址
};
logging { #日志相关
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { #根域,根类型只能是hint
type hint;
file "named.ca";
};
zone "localdomain" IN { #用于本地解析
type master;
file "localdomain.zone";
allow-update { 192.168.32.32; };
};
zone "localhost" IN { #用于本地解析
type master;
file "localhost.zone";
allow-update { 192.168.32.32; };
};
zone "0.0.127.in-addr.arpa" IN { #用于回环解析
type master;
file "named.local";
allow-update { 192.168.32.32; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { 192.168.32.32; };
};
zone "255.in-addr.arpa" IN { #广播地址反向解析
type master;
file "named.broadcast";
allow-update { 192.168.32.32; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { 192.168.32.32; };
};
#以上区域均为模板文件自带,可不修改。以下是自己添加需要解析的域kvm.com
zone "kvm.com" IN {
type master;
file "kvm.com.zone";
allow-update { 192.168.32.32; };
};
zone "32.168.192.in-addr.arpa" IN {
type master;
file "192.168.32";
allow-update { 192.168.32.32; };
};
3.3、配置正向区域文件
[root@station1 etc]#cd ../var/named/
[root@station1 named]#cp localdomain.zone kvm.com.zone
#正向解析区域文件模板localdomain.zone
[root@station1 named]#vi kvm.com.zone
$TTL 86400
@ IN SOA station1.kvm.com. root.kvm.com. (
42 ; serial (d. adams)
15M ; refresh
5M ; retry
1W ; expiry
1D ) ; minimum
IN NS station1.kvm.com.
server1 IN A 192.168.32.30
station1 IN A 192.168.32.31
station2 IN A 192.168.32.32
station3 IN A 192.168.32.33
ftp IN CNAME station3.kvm.com.
www 0 IN A 192.168.32.31 #多个www的解析,可以实现简单负载均衡
www 0 IN A 192.168.32.32
www 0 IN A 192.168.32.33
bbs.kvm.com. IN A 192.168.32.30
$GENERATE 1-200 station$ IN A 192.168.32.$ #连续地址解析
相关说明:
区块文件的内容:
记录集合,从SOA记录开始
@符号是一个变量,代表区块的始发地址。始发地址是: /etc/named.conf的zone说明中指定
注释使用汇编语言模式(;)
注意事项:
若没有使用“点”来终止名称,BIND会在这个名称后补充域的始发地址
如果记录中缺少域字段,BIND会使用前一个记录中的值(危险!如果另一个管理员改变了记录顺序怎么办?)
修改了区块文件后,不要忘记递增系列号码,重载named服务
$TTL是全局定义的
第二行 SOA记录,@取代在/etc/named.conf中指定的域名。
SOA段中的数字,分别为:序列号、刷新、重试、过期、生存期
序列号:序列号用于DNS数据库文件的版本控制。每当数据被改变,这个序列号就应该被增加。
刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别。
重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间。
过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期。
生存期:服务器回答 ‘无此域名’ 的间隔时间。
数字的默认单位为秒。否则:W= 周、D= 日、H= 小时、M= 分钟。
station1.kvm.com.:是DNS服务器的名称
root.kvm.com.: 是管理员的邮箱地址
NS(name server):设置域名服务器的域名
MX (Mail eXchanger ): 设置邮件交换器资源记录
CNAME:别名
实现连续地址解析
$GENERATE 是函数
1-200 是要循环的变量
station$是主机名
192.168.32.$是对应的IP地址
3.4、配置反向解析区域文件
[root@station1 named]#cp named.local 192.168.32
#反向解析区域文件模板named.local
[root@station1 named]#vi 192.168.32
$TTL 86400
@ IN SOA station1.kvm.com. root.kvm.com. (
1997022700 ; Serial
15M ; Refresh
5M ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS station1.kvm.com.
31 IN PTR station1.kvm.com.
30 IN PTR server1.kvm.com.
32 IN PTR station2.kvm.com.
33 IN PTR station3.kvm.com.
$GENERATE 1-200 $ IN PRT station$.kvm.com #反向连续域名解析
3.4、测试配置文件
[root@station1 named]#service named start
[root@station1 named]# named-checkconf ../../etc/named.conf
#主配置文件测试,无任何输出,表示配置正确
[root@station1 named]# named-checkzone kvm.com kvm.com.zone
zone kvm.com/IN: loaded serial 42
OK
#区域配置文件测试
4、辅助DNS服务器配置(192.168.32.32)
主服务器中全局选项要求加入(见主服务器named.conf配置):
allow-transfer { 192.168.32.32; };
4.1、 [root@station2 etc]# vi 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";
allow-query { any; };
allow-query-cache { localhost; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain" IN {
type slave; #指定自己的角色是slave服务器
file "localdomain.zone";
masters { 192.168.32.31; }; #指定主服务器
};
zone "localhost" IN {
type slave;
file "localhost.zone";
masters { 192.168.32.31; };
};
zone "0.0.127.in-addr.arpa" IN {
type slave;
file "named.local";
masters { 192.168.32.31; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type slave;
file "named.ip6.local";
masters { 192.168.32.31; };
};
zone "255.in-addr.arpa" IN {
type slave;
file "named.broadcast";
masters { 192.168.32.31; };
};
zone "0.in-addr.arpa" IN {
type slave;
file "named.zero";
masters { 192.168.32.31; };
};
zone "kvm.com" IN {
type slave;
file "slaves/kvm.com.zone"; #相对路径
masters { 192.168.32.31; };
};
zone "32.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.32";
masters { 192.168.32.31; };
};
[root@station2 etc]#service named start
[root@station2 etc]#ls /var/named/chroot/var/named/slaves
8 -rw-r--r-- 1 named named 444 12-29 11:17 192.168.32
8 -rw-r--r-- 1 named named 516 12-29 11:13 kvm.com.zone
#自动从主服务器通过区域文件
5、缓冲服务器配置(192.168.32.33)
[root@station3 etc]# cat 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";
allow-query { any; };
allow-query-cache { any; }; #必须允许客户查询缓冲,否则客户机无法解析
forward only; #指定只做转发
forwarders { 192.168.32.31; }; #指定将查询转发给主服务器
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
注:一般缓存域名服务器都是ISP或者大公司才会使用
6、访问控制列表(ACL)
6.1、地址匹配列表
适用分号间隔的IP地址列表或者与基于主机的访问控制安全性指令共同使用的子网列表
格式
IP地址:192.168.0.1
后续的点:192.168.0.
CIDR:192.168.0/24
使用叹号(!)来代表相反的结果
按顺序检查匹配列表,找到第一个匹配后就停止
示例:{ 192.168.0.1; 192.168.0.; !192.168.1.0/24; };
6.2、访问控制列表(ACL)
简单地说,ACL将一个名称分配给一个地址列表
一般可以用来代替匹配列表(允许嵌套!)
最好的办法是在/etc/named.conf文件的开始处定义ACL
声明示例
acl "trusted" { 192.168.1.21; }; acl "classroom" { 192.168.0.0/24; trusted; }; acl "cracker" { 192.168.1.0/24; }; acl "mymasters" { 192.168.0.254; }; acl "myaddresses" { 127.0.0.1; 192.168.0.1; };
6.3、内置ACL
BIND预定义了四个ACL
none 不匹配任何IP地址
any 匹配所有IP地址
localhost 匹配名称服务器的任何IP地址
localhosts 匹配直接连接的网络
6.4、带有基本访问控制选项的/etc/named.conf文件示例:
// acl's make security directives easier to read
acl "myaddresses" { 127.0.0.1; 192.168.0.1; };
acl "trusted" { 192.168.1.21; };
acl "classroom" { 192.168.0.0/24; trusted; };
acl "cracker" { 192.168.1.254; };
options {
# bind to specific interfaces
listen-on port 53 { myaddresses; };
listen-on-v6 port 53 { ::1; };
# make sure I can always query myself for troubleshooting
allow-query { localhost; classroom; cracker; };
allow-recursion { localhost; classroom; !cracker; };
/* don't let cracker (even trusted) do zone transfers */
allow-transfer { localhost; !cracker; classroom; };
# use a recursive, upstream nameserver
forwarders { 192.168.0.254; };
forward only;
};
7、客户机配置(192.168.32.36)
[root@station6 etc]#vi /etc/reslov.conf
search kvm.com
nameserver 192.168.32.31
8、查询工具(dig、host、nslookup)
dig
从不读取/etc/nsswitch.conf文件
默认情况是在/etc/resolv.conf文件中只查找nameserver行
输出是RFC标准的区块文件格式。该格式被DNS服务器使用,从而使dig对查看DNS解析情况特别有用
dig kvm.com :正向查询
dig -x 192.168.32.32 :反向查询
dig -t mx|SOA|A kvm.com :指定查找类型
dig -t axfr example.com. @192.168.32.31 :该命令可显示所有记录
a:全部 ,x:反向, r:递归, f:指定服务器为@192.168.32.31或@filename根据指定文件查询
dig +trace kvm.com
读取/etc/resolv.conf文件来判定名称服务器
查询根名称服务器
从根服务器开始追踪一个域名的解析过程
若培训中心的防火墙禁止输出的DNS,则参考注释中的输出示例