使用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服务器相关