centos6下BIND配置DNS缓存服务

2013年2月21日 发表评论 阅读评论

DNS服务是linux下最常用的一个服务,其一般是CDN 架设前的基础。在centos6下默认使用的DNS服务包软件是bind。本地DNS缓存的作用是将根DNS或远程DNS查询的结果在本地主机上进行缓存,加快DNS查询的速度。同时对于内网中假设只有一台主机可以上外网的情况下,也可以通过将内网主机的DNS指向能上外网的主机,从而解析出外网域名和IP的对应关系。

一、相关包与环境

其相关软件包有如下三个:

bind-libs.x86_64      #提供库文件
bind-utils.x86_64     #提供工具包
bind.x86_64           #提供主程序包
bind-chroot           #安全套件,本篇不涉及

实验环境:

192.168.0.103      DNS服务器

192.168.0.109      DNS测试服务器

二、安装与主配置文件

1、安装bind程序包

# yum -y install bind bind-libs bind-utils

2、named.conf配置文件

bind DNS服务的主配置文件是/etc/named.conf,默认情况下是已经启用了本地缓存功能。不过为了加快查询速度和解决一些报错,通常情况下我们还需要一些调整。先看下named.conf配置文件,如下:

bind-dns

其中listen与query项出于安全考虑,也可以将any设置为192.168.1.0/24这样的格式;

dump-file项需要注意的是默认情况下dns本地缓存数据都是存放在内存中,只有在使用rndc dumpdb -all 时才会将内存中的数据保存在本地盘中,保存的路径就是该项配置的名称;

启用forwarders查询会减少本地流量的浪费,直接从转发的服务器上查询的结果返回;

默认dnssec功能是yes的,启用在日志中会出现报错,后面会提到;

named.conf最终的配置如下:

# cat /etc/named.conf |grep -v '//'
options {
        listen-on port 53 { any; };
        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; };
        recursion yes;
    forwarders { 114.114.114.114; 8.8.8.8;  };
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

3、根配置named.ca

在named.ca中配置有十三个根域 ,具体如下:

# cat /var/named/named.ca |grep -v '^;'
.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
.                       518400  IN      NS      m.root-servers.net.
a.root-servers.net.     518400  IN      A       198.41.0.4
b.root-servers.net.     518400  IN      A       192.228.79.201
c.root-servers.net.     518400  IN      A       192.33.4.12
d.root-servers.net.     518400  IN      A       199.7.91.13
e.root-servers.net.     518400  IN      A       192.203.230.10
f.root-servers.net.     518400  IN      A       192.5.5.241
g.root-servers.net.     518400  IN      A       192.112.36.4
h.root-servers.net.     518400  IN      A       128.63.2.53
i.root-servers.net.     518400  IN      A       192.36.148.17
j.root-servers.net.     518400  IN      A       192.58.128.30
k.root-servers.net.     518400  IN      A       193.0.14.129
l.root-servers.net.     518400  IN      A       199.7.83.42
m.root-servers.net.     518400  IN      A       202.12.27.33
a.root-servers.net.     518400  IN      AAAA    2001:503:ba3e::2:30
c.root-servers.net.     518400  IN      AAAA    2001:500:2::c
d.root-servers.net.     518400  IN      AAAA    2001:500:2d::d
f.root-servers.net.     518400  IN      AAAA    2001:500:2f::f
h.root-servers.net.     518400  IN      AAAA    2001:500:1::803f:235
i.root-servers.net.     518400  IN      AAAA    2001:7fe::53
j.root-servers.net.     518400  IN      AAAA    2001:503:c27::2:30
k.root-servers.net.     518400  IN      AAAA    2001:7fd::1
l.root-servers.net.     518400  IN      AAAA    2001:500:3::42
m.root-servers.net.     518400  IN      AAAA    2001:dc3::35

其中AAAA(4A)项为IPv6项,不过目前大多数企业的网络环境中还没有用到ipv6。

4、防火墙配置

在/etc/sysconfig/iptables中增加如下配置,并重启iptables服务:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

三、优化与排错

通过上面的配置启用后虽然可以正常使用,不过在/var/log/message 和 /var/named/data/named.run 日志中会出现相关报错。

1、ipv6相关报错

在客户端上ping www.baidu.com或其他域名时,查看上面的两个日志,会在日志中发现类似如下的报错:

error (network unreachable) resolving 'com/DNSKEY/IN': 2001:503:231d::2:30#53
error (network unreachable) resolving 'com/DNSKEY/IN': 2001:503:a83e::2:30#53

该报错是由于启用了ipv6的原因导致的,虽然我们在/etc/named.conf中将listen项的IPv6配置已禁用,但是在named.ca配置中还有13台根域的ipv6配置。所以还需要如下两种方法中的任一种来关闭ipv6的使用。

方法1:修改/etc/sysconfig/named配置

直接编辑配置文件/etc/sysconfig/named:

OPTIONS="whatever" 改为  OPTIONS="-4"
# 注意OPTIONS选项的值可以是:whatever、-4、-6中的一个

方法2:完全禁用IPv6

这部分可以参看我的博文 centos关闭ipv6 --- 这里有提供一些老版本的关闭方法。这里也提下在centos6下的关闭方法:

配置文件/etc/sysconfig/network,然后 将NETWORKING_IPV6=YES改为NETWORKING=no;关闭ip6tables这个服务;向/etc/modprobe.conf文件中,添加如下内容:

alias ipv6 off
alias net-pf-10 off

完了还需要重启主机。如果不想重启主机,可以参看我上面链接的博文。

2、dnssec报错

默认情况下未使用forwards转发,为了优化查询速度,我这里开启了转发 。不过不论是否开启转发,在默认启用dnsec的情况下,还会在日志中收到如下报错(虽然有报错,但不影响使用):

error (insecurity proof failed) resolving './NS/IN': 114.114.114.114#53
error (no valid RRSIG) resolving 'arpa/DS/IN': 114.114.114.114#53
error (no valid RRSIG) resolving 'in-addr.arpa/DS/IN': 114.114.114.114#53
validating @0x7ffb78470420: . NS: got insecure response; parent indicates it should be secure

访报错是由于每次验证的时候会对dns进行安全验证,验证失败时会出现上面的报错。禁用dnssec 功能即可。

四、rndc管理工具

rndc是bind为dns管理提供的一个工具,该工具参数如下:

reload                                 重新装入配置文件和区域
reload zone [class [view]]      重新装入单个区域
refresh zone [class [view]]     安排区域的立即维护
reconfig                              仅重新装入配置文件和新区域
stats                                   将服务器统计信息写入统计文件中
querylog                              切换查询日志
dumpdb                              将高速缓存转储到转储文件 (named_dump.db)
stop                                   将暂挂更新保存到主文件并停止服务器
halt                                    停止服务器,但不保存暂挂更新
trace                                  将调试级别增加一级
trace level                           更改调试级别
notrace                              将调试级别设置为 0
flush                                  刷新服务器的所有高速缓存
flush [view]                        为某一视图刷新服务器的高速缓存
status                                显示服务器的状态
restart                               重新启动服务器(尚未实现)

上面的参数主机常用的有rndc dumpdb -all 将内存中划存的数据存放到文件,可以了解缓存了哪些域名;rndc  refresh zone 重刷某个区域(即域名);flush 清除当前缓存;stats 这个主要结合监控有用 ,和这个相关的还有rndc status 。

五、测试

配置测试主机192.168.0.109的/etc/resolv.conf文件,增加:nameserver 192.168.0.103 ,使用ping 其他域名进行测试或使用dig或nslookup进行测试,如下:

# dig -t NS baidu.com
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t NS baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6532
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com.                     IN      NS
;; ANSWER SECTION:
baidu.com.              12320   IN      NS      ns7.baidu.com.
baidu.com.              12320   IN      NS      ns2.baidu.com.
baidu.com.              12320   IN      NS      ns3.baidu.com.
baidu.com.              12320   IN      NS      ns4.baidu.com.
baidu.com.              12320   IN      NS      dns.baidu.com.
;; Query time: 158 msec
;; SERVER: 192.168.0.103#53(192.168.0.103)  //这里就是DNS服务器的地址
;; WHEN: Tue Nov 10 23:45:10 CST 2015
;; MSG SIZE  rcvd: 128


参考页面:

oracle bind 相关手册

chinaunix forwards相关介绍




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.