rhce7版本带有老的bind DNS软件包,也带有新的unbound软件包,不过默认是unbound DNS ,在新版本的RHCE里考核的也是unbound DNS。Unbound 是一款验证(validating)、递归(recursive)及缓存(caching) DNS 解析器(resolver)。以 BSD 许可证发布,轻量级+模块(iterator、validator、cache,配置:module-config)化设计,充分考虑安全,拥有出色的性能。
一、DNS中的七大资源记录
在进行近一步的配置之前,我们先了解下DNS用于解析的七大资源记录信息。
1、A记录
A记录也称为主机记录,A记录的基本作用就是说明一个域名对应的IP是多少,在配置中我们也经常叫做正向解析。
2、PTR记录
PTR记录也被称为指针记录,PTR记录是A记录的逆向记录,作用是把IP地址解析为域名。一般我们也叫做反向解析记录。
3、NS记录
NS记录和SOA记录是任何一个DNS区域都不可或缺的两条记录,NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析。
4、SOA记录
SOA名叫起始授权机构记录,SOA记录说明负责解析的DNS服务器中哪一个是主服务器。
5、MX记录
全称是邮件交换记录,在使用邮件服务器的时候,MX记录是无可或缺的,比如A用户向B用户发送一封邮件,那么他需要向DNS查询B的MX记录,DNS在定位到了B的MX记录后反馈给A用户,然后A用户把邮件投递到B用户的MX记录服务器里!
6、cname记录
别名记录,举个简单的例子,比如王小明(大名),小名叫做钢蛋。其中钢蛋就是王小明的别名记录。
7、SRV记录
SRV记录的作用是说明一个服务器能够提供什么样的服务!SRV记录在微软的Active Directory中有着重要地位 。
二、unbound的安装配置
1、安装
# yum -y install unbound
2、常见配置项
unbound的主配置文件为/etc/unbound/unbound.conf ,打开该配置文件主要修改如下几项。
监听接口,默认监听的接口为127.0.0.1,通过如下的配置,使其监听所有网络接口。
interface: 0.0.0.0
访问控制,unbound的配置是相当安全的,可以通过access-control 可以指定给哪些网段提供DNS服务。如果对所有主机提供DNS服务,则后面的地址写为0.0.0.0/0 。当然,除了配置allow规则 ,也可以配置refuse (拒绝)网段。
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/24 allow
区域配置,本地区域配置主要分为local-zone、local-data 和 local-data-ptr 。这里假设配置一个域名为111cn.net 的域名,其A记录、MX记录配置结果如下
local-zone: "111cn.net" static
local-data: "www.111cn.net. IN A 192.168.0.103"
local-data-ptr: "192.168.0.103 www.111cn.net"
local-data: "111cn.net. IN MX 5 mail.111cn.net"
local-data: "mail.111cn.net. IN A 192.168.0.103"
注意local-data配置中域名最后的点符号,在ptr 配置中域名最后没有这个点符号。
转发配置,按上面的配置,我们可以指定111cn.net、361way.com这样类似的域名设置,不过互联网上的域名如此名,我们不可能一一都配置进去。这时候就需要指定上一级DNS转发如www.baidu.com、www.163.com这样的域名请求。这需要配置forward-zone,具体类似如下:
forward-zone:
name: .
forward-addr: 114.114.114.114
forward-addr: 8.8.8.8
上面name后面用点表示根域,即转发除上面local -zone中配置的域名之外,所有的其他域名都是请求forward-addr地址 ,这里也可以指定非53端口的DNS主机,需要在主机IP后跟上端口。如果name后面跟的不是点,而是其他域名,如361way.com,则表示,只有在请求361way.com 域名时,转到114.114.114.114和8.8.8.8两个上级DNS 。
这样配置完成后,重启unbound服务就可以使用了。这里列下完整形的配置---除了上面提到的相关配置,其他都是默认配置。
# grep -v '#' unbound.conf|grep -v ^$
server:
verbosity: 1
statistics-interval: 0
statistics-cumulative: no
extended-statistics: yes
num-threads: 2
interface: 0.0.0.0
interface-automatic: no
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/24 allow
chroot: ""
username: "unbound"
directory: "/etc/unbound"
log-time-ascii: yes
pidfile: "/var/run/unbound/unbound.pid"
harden-glue: yes
harden-dnssec-stripped: yes
harden-below-nxdomain: yes
harden-referral-path: yes
use-caps-for-id: no
unwanted-reply-threshold: 10000000
prefetch: yes
prefetch-key: yes
rrset-roundrobin: yes
minimal-responses: yes
dlv-anchor-file: "/etc/unbound/dlv.isc.org.key"
trusted-keys-file: /etc/unbound/keys.d/*.key
auto-trust-anchor-file: "/var/lib/unbound/root.key"
val-clean-additional: yes
val-permissive-mode: no
val-log-level: 1
local-zone: "111cn.net" static
local-data: "www.111cn.net. IN A 192.168.0.103"
local-data-ptr: "192.168.0.103 www.111cn.net"
local-data: "111cn.net. IN MX 5 mail.111cn.net"
local-data: "mail.111cn.net. IN A 192.168.0.103"
include: /etc/unbound/local.d/*.conf
remote-control:
control-enable: yes
server-key-file: "/etc/unbound/unbound_server.key"
server-cert-file: "/etc/unbound/unbound_server.pem"
control-key-file: "/etc/unbound/unbound_control.key"
control-cert-file: "/etc/unbound/unbound_control.pem"
include: /etc/unbound/conf.d/*.conf
forward-zone:
name: .
forward-addr: 114.114.114.114
通过unbound-check工具检测配置文件中是否存在语法错误:
# unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf
3、防火墙配置
重启unbound服务,加载上面的配置
# systemctl restart unbound.service
防火墙配置
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload
查看本地DNS cache记录,可以通过unbound-control flush清空
# unbound-control dump_cache
4、DNS测试
在同网段的其他主机的/etc/resolv.conf文件中增加如下配置(这里的0.110地址,是上面配置的DNS服务器的地址)
nameserver 192.168.0.110
或者在ifcfg-ethX网络接口配置文件中增加如下行:
DNS1=“192.168.0.110”
配置完后,在本地通过nslookup、dig、ping 等进行测试,如下:
nslookup www.111cn.net
dig www.111cn.net
nslookup -type=mx 111cn.net
dig -t mx 111cn.net
ping www.111cn.net
ping www.111cn.net
在测试时,有时需要清空本地DNS cache,在windows下可以通过ipconfig /flushdns ,在linux下可以通安装nscd服务,并通过nscd -i hosts ,或都通过 dig @dns_server example.com 的方法更新DNS 。
三、unbound的其他相关项
Unbound 有一些统计相关的参数:statistics-interval,统计信息打印到纪录文件的时间间隔;statistics-cumulative 则是用于决定统计信息是否累计;extended-statistics,是否纪录一些扩展的统计信息。这些可以配合发行包 contrib/ 下的 Munin 和 Cacti 扩展来进行统计绘图。
num-threads、so-*buf、*-cache-slabs、*-cache-size,outgoing-range 和 Unbound 的性能优化相关。其中 outgoing-range 是每个线程打开的文件描述符的数量,实际打开的总数为 num-threads * outgoing-range,在没有 libevent 的情况下最大 1024。Unbound 可以运行在几种“模式”下:普通线程模式(num-threads 设置为 1 时可以停用线程,即单进程单线程)、libevent/线程模式(需要提供 --with-libevent) 、fork(据文档,因为没有线程锁开销,性能会有所提高;需要提供 --without-pthreads、--without-solaris-threads)。
关于 interface 配置,interface 用于应答,而 outgoing-interface 则是配置对权威 DNS 服务器查询从哪个 interface 走。对返回的 DNS 查询结果,Unbound 会过滤掉不合理的纪录——如果某上级 DNS 服务器返回私有 IP 地址,则该应答无效。对于需要返回这类地址的情况,可以将域加入 private-domain,同时 local-data 允许私有 IP 地址的出现。prefetch 用于配置缓存内容预取来保证缓存的新鲜。
Unbound 有一系列命令行工具,unbound-checkconf(8) 和 named-checkconf(8) 类似,用于检查配置文件。unbound-host(1) 和 host(1) 类似,用于查询,并返回一些额外的安全信息。unbound-control(8) 是一个用于控制远程 Unbound 服务器的工具。还有 LibUnbound 库用于将 Unbound 嵌入程序