ubuntu上BIND9安装及设置转发遇到的坑

先列出参考文献,太重要了: BIND9安装指南 , 可以说如果没有这篇文章就不会有我这个博文了 - -

先描述下需求,之前写了个DNS服务,用作权威解析。

现在想要测试DNS转发的情况下是否可以正常使用,所以需要利用BIND模拟转发的情况,思路是:

1. 在A服务器部署权威DNS解析服务,并监听53端口(UDP);

2. 在B服务器上修改BIND配置,将对B服务器的DNS请求都转发(forward)到A服务器上去。

本机验证:

1. 利用dig指令,dig @xxx.xxx.xxx.xx(B服务器地址)  domain_name, 来看解析结果是否符合预期;

2. 直接将本机DNS服务器地址修改为B,然后利用ping指令, ping domain_name, 看解析的IP是否符合预期。

接下来开始工作:

首先利用apt-get安装BIND, 配置文件会在/etc/bind/ 路径下,主要是name.conf文件,现在版本的name.conf中其实只是引入了三个子配置文件:

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

其中named.conf.options文件中用于配置options相关的,其中包括forwarders,转发配置。我们只需要在options {}中,找到forwarders {},添加我们的A服务器的地址即可,需要注意后边需要加分号。 

BIND默认是通过systemd来管理进程的,所以执行 systemctl restart bind9 进行重启。

利用前文提到的验证方式在本机进行验证,结果返回了REFUSED...

翻回头去查看,在B服务器上,dig @127.0.0.1 domain_name,结果是可以的,说明我们B服务器上配置的forwarder是起作用的。那么问题应该是出在从我们本机到B服务器的这个环节了。在我的同事T的提醒下,利用tcpdump抓包,发现本机到B服务器并没有包的发送。于是他建议我在.options文件中添加 allow-query {0.0.0.0/0;}; 。

之后重启BIND服务,在B服务器上 dig @127.0.0.1 domain_name 正常,再在本机dig终于得到了预期结果。

PS: 在BIND9配置手册中,options的allow-query项是用来指定允许哪些主机可以进行普通的 DNS 查询,如果未指定,缺省是允许所有主机请求。所以感觉好像实际并不是这样,尚且未搞清楚原因,只能解释为不加这个转发不能allow吧 - -

你可能感兴趣的:(Linux)