BIND是实现DNS服务的一套软件(官方站点:isc.org),其包含了服务器端程序named(由bind程序包提供,监听套接字:53/tcp、53/udp),和客户端工具host、nslookup、dig(由bind-utils程序包提供)。为保证服务器的安全性,bind还提供了一种“沙箱机制”,bind-chroot是将原文件系统的根“/”替换成“/var/named/chroot”来使用。
目前主流的bind程序依旧是9.x系列。使用yum install bind命令即可安装bind程序,安装完成后会自动添加named用户,named组。使用rpm -qc bind可查看安装完成后生成的配置文件列表。
其服务脚本是:/etc/rc.d/init.d/,主配置文件:/etc/named.conf、/etc/named.rfc1912.zones,以及/var/named/下以“.zone”为后缀的区域数据解析库文件。/etc/named.conf由3段组成,见图示。
要想配置成一台可供他人服务的DNS服务器,还需要修改配置文件/etc/named.conf(帮助文档 man named.conf)。必须的配置有:
① 监听的地址:配置能与外部进行通信的地址,也可以将此项注释掉,表示监听在本机(注:本机在此不表示127.0.0.1)如:本机IP是172.16.24.1,则可配置如下:
listen-on port 53 {127.0.0.1;172.16.24.1;};
② 允许所有主机查询(也可定义为一部分主机查询,详见下文):
allow-query { any; };
③ 关闭dnssec相关配置,并注释掉ISC DLV key:
dnssec-enable no; dnssec-validation no; dnssec-lookaside no; /* Path to ISC DLV key bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; */
④ 定义zone,其格式是如下:
zone "ZONE_NAME" IN { type master|slave|forward;/*唯有根域.的type为hint*/ file "ZoneData_FILE"; /*区域数据解析库文件,工作目录是:/var/named/,通常以.zone命名。*/ };
注:a.ZONE_NAME的定义,正向区域直接写域名即可,反向区域定义格式为:逆向网络地址.in-addr.arpa,如:1.168.192.in-addr.arpa
b.若type是slave,还要注明master服务器的IP;若是forward,file项可无。
⑤ 根据实际需求自定义区域数据解析库文件(在/var/named/目录下),定义完成后记得将文件的属组改为named。
各项配置都完成之后,可以使用named-checkconf检查配置文件是否有语法错误,使用named-checkzone "ZONE_NAME" /path/to/ZoneData_FILE检查区域解析数据库文件是否有语法错误。
⑥ 启动named,并测试
service named start dig -t A www.baidu.com @localhost
客户端工具dig的使用
dig常用来测试DNS服务是否正常的工具,供攻城师们及时排查DNS故障。其常用语法格式为
dig [@DNS_Server] [-t RR_Type] Name [Query_Options]
当不指定DNS_Server时,dig将使用/etc/resolv.conf中定义的DNS服务器
dig @192.168.120.132 -t A www.test.com
其常用命令:dig @192.168.120.132 -t axfr Zone_Name表示查看该区域文件的所有资源类型
其常用的查询选项有 +[no]trace表示是否跟踪其查询过程
dig @192.168.120.132 -t A www.baidu.com +trace
示例 配置DNS服务器为某正向区域(test.com)的主DNS服务器
① 配置其成为缓存DNS服务器
② 在/etc/named.rfc1912.zones中定义区域zone
vim /etc/named.rfc1912.zones
…… …… …… …… …… …… zone "test.com" IN { type master; file "test.com.zone"; allow-update { none; }; };
③ 定义区域数据解析库文件test.com.zone,并参照named.empty修改其访问权限以及属主、属组
vim test.com.zone
$TTL 600 $ORIGIN test.com. @ IN SOA ns.test.com. admin.ns.test.com. ( 201504101 ;序列号 1H ;1小时后刷新 5M ;5分钟后重试 1W ;1周后失效 1H );缓存TTL是1小时 IN NS ns ;由于定义了ORIGIN,此处相当于ns.test.com.。 IN MX 10 mx ns IN A 1.1.1.1 mx IN A 2.2.2.2 www IN A 3.3.3.3 www IN A 3.3.3.4 pop3 IN A 4.4.4.4 web IN CNAME www imap4 IN CNAME pop3
chmod 640 test.com.zone chown :named test.com.zone
④ 检查语法是否配置有误
named-checkconf named-checkzone "test.com" test.com.zone
⑤ 重载DNS服务
service named reload
⑥ 使用dig工具验证结果
dig -t A www.test.com @localhost
结果表明,当有同一主机的多条A记录时,DNS服务器会以“轮询”的方式向客户端提供查询服务。