Linux 下DNS服务器配置的分析和探讨
内容提要:有关Linux操作系统下的DNS服务器配置的文章很多,但缺乏系统的、全面的、详实的讲解,本文以配合实例的介绍方法从最基本的DNS配置讲起,并深入分析最新的DNS配置技术,同时介绍不同版本Linux的DNS配置的差别,力求让读者能轻松、全面掌握DNS的配置方法。
一、DNS简介
DNS (Domain Name System)是域名系统的缩写,用于实现IP地址与域名的转换,能够使人更方便的访问互联网。Linux下实现DNS服务器通常是使用Bind程序来实现的。Bind是Berkeley Internet Name Domain Service的简写,它是Linux中实现DNS服务器的开放源码软件。Bind最初是美国DARPA资助伯克里大学(Berkeley)开设的一个课题,经过多年的发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上绝大多数的DNS服务器有都是用Bind来架设的。
DNS服务器可以配置成以下3类之一:
1.主DNS服务器:一个区域内只能有一个主服务器。
2.辅DNS服务器:从主服务器定期下载整个区域数据库,并保存一个该区域的副本,也叫备份服务器,可以有多个。
3.缓存专用服务器:对任何区域没有授权,处理本地请求,跟踪应答并把应答保存到缓存里,只能从缓存里直接响应DNS查询请求,其他的请求被转发到一个授权服务器那里。
二、DNS快速上手配置
本文的配置环境预设为CENTOS6.4。
CENTOS6.4中主配置文件是named.conf,其路径为/etc/(早期版本的LINUX中,named.conf的路径为/etc/named/),区域配置文件name.rfc1912.zones包含于named.conf中,其路径也在/etc/,在其最后添加
Zone”test.com”IN {
type master;
file”test.com.zone”;
allow-transfer{ none; };
};
再进入/var/named/目录下,创建:test.com.zone,其内容为
www IN A 192.168.0.8
开启named进程,即可将www.test.com解析至192.168.0.8。
【实例】要添加一个域名为“center.test.com”,IP地址为192.168.16.177;域名为“news.test.com”,IP地址为192.168.16.178;域名“mail.test.com”,IP地址为192.168.16.179则可在hosts文件中添加如下记录。
【步骤1】设置主区域,编辑/etc/name.rfc1912.zones,添加如下代码。
zone “test.com" IN{ //主区域名称为test.com
type master; //DNS区域的类型为master
file “test.com.zone”; //设置主区域文件的名称为test.com.zone
allow-transfer{
192.168.1.177;
192.168.7.17;
};
};
【步骤2】设置反向解析区域,编辑/etc/name.rfc1912.zones,添加如下代码。
zone “16.168.192.in-addr.arpa” IN { //设置反向解析区域的名称
type master; //设置区域类型为“master”
file “192.168.16.arpa”; //设置反向解析区域文件的名称
allow-update{
192.168.1.177;
192.168.7.17;
};
};
【步骤3】DNS服务器的区域数据文件一般存放在/var/named/目录下,创建/var/named/test.com.zone文件,完成以下配置。
$ttl 38400 //设计允许客户端缓存来自查询的数据的默认时间
test.com. IN SOAdns.test.com. admin.test.com.( //设置所管辖的域名
2005090503 //设置序列号
10800 //设置间隔时间
3600 //设置重试时间
604800
38400 )
test.com. IN NS test.com.. //设置名称服务器NS资源记录
dns IN A 192.168.16.177 //设置主机地址A资源记录
center.test.com. IN A 192.168.16.177
news. test.com. IN A 192.168.16.178
mail. test.com. IN MX 10 192.168.16.179//设置邮件交换器MX资源记录
【步骤4】设置反向解析区域文件,创建/var/named/ 192.168.16.arpa,完成以下配置。
$ttl 38400
16.168.192.in-addr.arpa.IN SOAdns.test.com.admin.test.com. (
2005090503
10800
3600
604800
38400 )
16.168.192.in-addr.arpa. INNS dns.test.com.
177.16.168.192.in-addr.arpa. IN PTR dns.test.com.
177 IN PTR center.test.com.
178 IN PTR news. test.com.
179 IN PTR mail. test.com.
三、DNS高级配置(bind9以上版本acl、view的使用)
许多公司希望 DNS 对于内网访问和外网(Internet)访问看起来不一样,这种类型的配置称为“分离 DNS (Split DNS)”,在bind9以上版本中,可以利用acl和view的配合实现。
访问控制列表(ACL):一个被命名的地址匹配列表。使用访问控制列表可以使配置文件看上去简单而又清晰,定义一次之后可以在多处使用,不会使配置文件因为大量的 IP 地址而变得混乱。
定义 ACL,可以在 BIND 的主配置文件 /etc/named.conf中使用acl语句来实现。acl语句的语法为:
acl acl_name {
address_match_list;
};
BIND 里默认预定义了 4 个名称的地址匹配列表,他们可以直接使用,分别为any:所有主机;localhost:本机;localnets:本地网络上的所有主机;none:不匹配任何主机。
注:acl是named.conf中的顶级语句,不能将其嵌入其他的语句。
【实例】本文前面提到的实例中包含
allow-transfer{
192.168.1.177;
192.168.7.17;
};
利用ACL,可将代码编写为如下:
首先在/etc/named.conf中的最前面添加如下语句:
acl dns-transfer {
192.168.1.177;
192.168.7.17;
};
再将替换为
也就是说,配置文件中所有出现的“192.168.1.177;192.168.7.17;”都可以用“dns-transfer”来替代,ACL的作用就是为类IP命名。
在 BIND 9 中可以使用 view 语句进行配置分离 DNS 。 view 语句的语法为
viewview_name {
match-clients { address_match_list };
[ view_option; ...]
zone_statement; ...
};
其中: match-clients 子句非常重要,它用于指定谁能看到本 view,address_match_list可以利用ACL来定义。
【实例】
view "external" {
match-clients { our-nets; }; // 匹配内网客户的访问
recursion yes; // 对内网客户允许执行递归查询
zone "test.com" { // 定义内网客户可见的区声明
type master;
file "test.com.hosts.internal";
};
};
view "internal" {
match-clients { any; }; // 匹配外网客户的访问
recursion no; // 对外网客户不允许执行递归查询
zone "test.com" { // 定义外网客户可见的区声明
type master;
file "test.com.hosts.external";
};
};
需要注意的是,在使用了view语句后,所有的zone语句必须被包含在view语句中,否则将会报错;同时,配置内网的 view 应该置于外网的 view 之前。
本文从实际出发,介绍了DNS服务器的配置,解决了常用DNS配置过程中的问题,但还有一些细节没有更深入探讨,有待读者在实际解决问题时,进一步了解与掌握。
参考文献:
《基于LINUX操作系统的DNS服务器配置 》 葛慧娟西安电子科技大学
《基于Linux平台下校园网DNS服务器配置方案》刘姚岳阳职业技术学院学报
《基于VMware的DNS服务器仿真实验平台的设计及实现》余金栋数字技术与应用