1. 首页
  2. 系统运维
  3. Linux

使用Bind在Ubuntu上搭建缓存或转发DNS服务器

DNS的作用不多说,主要是解析域名主机地址为IP,以方便我们记忆。注册域名后,一般DNS服务器我们使用域名商或者公共的解析服务(如DNSPOD)比较多,简单方便,又省心,基本不用维护。而客户端的DNS解析地址基本使用ISP运营商提供或者公共的。但是在一些情景中可能需要手动搭建,例如内网局域网环境。接下来本文主要介绍满足缓存和转发需求的DNS服务器,测试下来ubuntu 12.04,14.04和最新的16.04步骤配置都一样。

准备

准备两台服务器,一台是server,一台是client。

server:192.168.140.129

client:192.168.140.130

优点

想到的几个优点。

1、不使用ISP或者公共DNS服务器,特别对于国外运营商,经常会在解析中添加广告。

2、能把缓存记录保存在本地,通过局域网解析速度变快。

3、也能节省点带宽,虽然很少。

步骤

1、安装

登录server服务器,运行apt-get命令安装,这个很简单。

apt-get update
apt-get install bind9 bind9utils bind9-doc

命令结束有可以看到有一个named进程在运行,配置文件目录为/etc/bind ,监听在TCP和UDP的53端口。

2、关闭IPv6

一般现在bind工作在ipv4环境居多,所以先把ipv6监听的地址关了。

vi /etc/default/bind9

OPTIONS中增加-4选项,例如:OPTIONS=”-u bind -4″。

3、配置缓存

默认bind可以允许所有人通过递归来查询,但是如果放在互联网上这个可能会引来“DNS amplification attack”(DNS放大攻击)。假设我们配置DNS主要给内网环境使用,配置内网可信任。做公网DNS解析服务器的需求下次再研究。

打开/etc/bind/named.conf.options目录,修改后如下。

acl goodclients {
        192.168.140.0/24;
        localhost;
        localnets;
};

options {
        directory "/var/cache/bind";
        listen-on { 192.168.140.129;};
        listen-on-v6 { none; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035

        recursion yes ;
        allow-query { goodclients;};

};

acl中添加了192.168.140.0/24整个网段为可信任,允许递归查询,详见recursion和allow-query 。

listen-on,只监听在192.168.140.129这个地址上。

到这一步,dns缓存器就配置好了,重启即可生效。

service bind9 restart

4、配置转发器

缓存器配置好后一般就能解析记录了,不过因为这些服务器都在国外,首次查询的时候可能会比较慢,所以我们可以再配置转发器。转发请求到国内公共dns(阿里云公共DNS为例)上,以实现快速响应的目的。配置如下。

acl goodclients {
        192.168.140.0/24;
        localhost;
        localnets;
};

options {
        directory "/var/cache/bind";
        listen-on { 192.168.140.129;};
        listen-on-v6 { none; };

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035

        recursion yes ;
        allow-query { goodclients;};

        forwarders {
                223.5.5.5;
                223.6.6.6;
        };
        forward only ;

};

重启后一台既能转发又能缓存的DNS服务器就配置好了。

如果配置好后/var/log/syslog日志中有类似错误:

Nov 11 15:03:29 cache named[2512]: error (chase DS servers) resolving 'in-addr.arpa/DS/IN': 8.8.8.8#53
Nov 11 15:03:29 cache named[2512]: error (no valid DS) resolving '111.111.111.111.in-addr.arpa/PTR/IN': 8.8.4.4#53

那么再修改dnssec配置。

dnssec-enable yes;
dnssec-validation yes;

5、测试

登录client服务器,修改resolv.conf为刚刚我们搭建的dns服务器。

cat /etc/resolv.conf 
nameserver 192.168.140.129

使用dig命令测试,dig命令是测试DNS的一个很好工具。

[root@localhost ~]# dig -t A blog.nbhao.org

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A blog.nbhao.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63913
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;blog.nbhao.org. IN A

;; ANSWER SECTION:
blog.nbhao.org. 57350 IN A 1.2.3.4

;; Query time: 24 msec
;; SERVER: 192.168.140.129#53(192.168.140.129)
;; WHEN: Mon Nov 14 11:40:01 2016
;; MSG SIZE rcvd: 49

其中最后部分说明解析是通过server,相应时间为29毫秒。如果再请求一次相同域名,因为缓存的原因,相应时间会很快。

最后每次我们修改bind配置的时候,重启之前最好做下检查,常用的检查命令是named-checkconf和named-checkzone。named-checkconf检查语法,named-checkzone检查区域配置文件,这个下一篇文章再介绍。

DNS服务器相关

1、使用Bind在Ubuntu上搭建缓存或转发DNS服务器

2、Ubuntu系统Bind搭建配置私有、主备DNS服务器

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code