编译环境:centos7,使用bind-9.10.5.tar.gz源码包
./configure --prefix=/usr/local/named --enable-threads --enable-shared --with-libtool && make && make install
①添加named用户和组:groupadd named && useradd -s /sbin/nologin -d /usr/local/named[编译bind的目录] -g named named
操作后忽略file exists的报错;然后passwd -l named禁止named作为用户登录.
②搭建chroot环境:
chroot环境是为了服务器的安全,但是编译的bind是没有chroot目录的,使用rpm包就有对应的bind-chroot,所以要先创建环境
进入安装路径下cd /usr/local/named,创建chroot下的多个目录:mkdir -p chroot/{dev,etc,var/{data,log,named,run}}
对dev创建虚拟设备文件:首先查看自身系统下的 ls -lL /dev/null /dev/zero /dev/random ,会回显:
crw-rw-rw- 1 root root1, 3 May 17 23:42 /dev/null
crw-rw-rw- 1 root root1, 8 May 17 23:42 /dev/random
crw-rw-rw- 1 root root1, 5 May 17 23:42 /dev/zero
然后在/usr/local/named/chroot/dev下执行
mknod null c 1 3;mknod random c 1 8;mknod zero c 1 5 (对应值相同)
③创建配置文件
创建主配置文件:touch /usr/local/named/chroot/etc/named.conf
创建辅助配置文件:touch /usr/local/named/chroot/etc/named.zones
生成rndc文件:/usr/local/named/sbin/rndc-confgen > /usr/local/named/chroot/etc/rndc.conf
添加rndc.key:cat /usr/local/named/chroot/etc/rndc.conf |tail -10 |head -9 |sed s/^#\ //g >/usr/local/named/chroot/etc/named.conf [通过rndc-confgen生成rndc.conf,文件包含注释段为rndc.key,截取rndc.key导入named.conf]
然后编辑named.conf添加options和zone[链接]named.conf的详解
/usr/local/named/chroot/etc/named.conf
key "rndc-key" {
algorithm hmac-md5;
secret "G1UGnX9eRSoITBDciFwDuh=="; //之前通过rndc-confgen生成的密钥
};
controls {
inet 127.0.0.1 port 953 //通过953端口对dns进行操作
allow { 127.0.0.1; } keys { "rndc-key"; }; //允许的主机
};
options {
//使用双斜杠对named.conf添加注释
listen-on port 53 { any; }; //监听端口
listen-on-v6 port 53 { ::1; }; //监听ipv6
directory "/var/named"; //区域文件目录,这里由于chroot,可能不好理解,chroot机制将/usr/local/named/chroot变成了bind应用的根目录"/",所以此处的/var/named实际上是/usr/local/named/chroot/var/named
pid-file "/var/run/named.pid" //文件进程pid位置
dump-file "/var/named/data/cache_dump.db"; //执行rndc dumpdb时,存放数据库文件的位置
statistics-file "/var/named/data/named_stats.txt"; //执行rndc stats时,存放统计信息的位置
allow-query { any; }; //允许普通查询的主机
allow-recursion { any; }; //允许递归查询的主机
forwarders { 114.114.114.114; }; //转发使用的列表
};
acl "mylan" {
127.0.0.0/8;
192.168.0.0/16;
}; //相当于定义mylan = 127.0.0.0/8 和 192.168.0.0/16, mylan是自定义名
logging {
channel default_debug { //定义通道,channel channel_name
file "/var/log/named.run"[options]; //定义输出位置与方式
severity dynamic; //定义消息严重性
//可选错误等级参数:critical>error>warning>notice>info>debug,dynamic是特殊值,匹配服务器当前调试级别
};
channel log {
file "/var/log/dns.log" versions 10 size 1m; //versions:同时允许存在10个版本该文件,size:文件大小上限为1m
serverity debug 9;
print-time yes; //是否在消息添加时间前缀
print-severity yes; //是否在消息中添加消息严重性前缀
print-category yes; //是否消息中添加消息类别前缀
};
category default { default_debug; log; }; //指定类别信息使用对应通道输出
//可用的类别名:client 处理客户端请求 | config 配置文件分析和处理 | database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录 | default 匹配所有未明确指定通道的类别 | dnssec 处理 DNSSEC 签名的响应 | general 包括所有未明确分类的 BIND 消息 | lame-servers 发现错误授权,即残缺服务器 | network 网络操作 | notify 区更新通知消息 | queries 查询日志 | resolver 名字解析,包括对来自解析器的递归查询信息 | security 批准/非批准的请求 | update 动态更新事件
};
view localhost { //定义视图 view view_name
match-clients { mylan; }; //匹配主机源地址,此处引用了上文定义的 mylan,也可以使用 192.168.0.0/8等匹配
match-destinations { any; }; //匹配主机目的地址
//view可以使用部分options参数和zone参数
include "/etc/named.zones"; //包含其他文件,此处包含的为zone的部分,路径为chroot作为根的路径
};
/usr/local/named/chroot/etc/named.zones [其实zone也属于named.conf的一部分,只是独立出来就可以多次引用,如果没有必要可以合并编辑]
zone "." IN {
type hint; //zone文件类型,hint为根
file "root.zone"; //对应的配置文件位置
};
zone "localhost" IN { //正解zone,从域名到IP
type master; //主域,还有forward:转发域;slave:辅助域等
file "localhost.zone";
allow-update { none; }; //不允许提交更新,此处可以使用其他选项,可以看上文的链接
};
zone "0.0.127.in-addr.arpa" IN { //反解zone,从IP到域名,将IP反写和添加对应尾缀in-addr.apra
type master;
file "named.localhost";
allow-update { none; };
};
测试例子:/usr/local/named/chroot/var/named/test.zone
//zone内容
zone "www.test.com" IN {
type master;
file "test.zone";
};
//test.zone内容
;test.zone文件已经不属于配置文件,使用的注释为";"
;[链接]区域数据文件详解
$TTL 86400
@ IN SOA test.com. root (
42 ;serial (d.adams)
3H ;refresh
15M ;retry
1W ;expiry
1D ) ;minimum
;FQND(域名) TTL IN RPT(记录资源类型) IP
IN NS ns.test.com
IN A 192.168.100.16 ;下文测试会用到
④启动与测试
将named更改属主 chown -R named /usr/local/named
对应的配置文件都编辑好和放在对应的位置之后,可以先使用
/usr/local/named/sbin/named-checkconf来检查配置,由于编译的缘故,需要指定chroot路径
/usr/local/named/sbin/named-checkconf -t /usr/local/named/chroot /etc/named.conf [-t指定chroot目录,再添加要检查的chroot对应目录下的/etc/named.conf]
同样的,检测没有异常后,同样使用指定方式来启动
/usr/local/named/sbin/named -t /usr/local/named/chroot -c /etc/named.conf -u named
使用 netstat -tnlp|grep 53,查看端口是不是已经启动,如果启动了,那named.conf应该没有大问题了
然后用 nslookup www.test.com localhost[或本服务器的IP],如果正确回显
Server: localhost
Address: 127.0.0.1#53
Name: www.test.com
Address: 192.168.100.16
那就证明可以正确解析了,配置也就到此完结