BIND(Berkeley Internet Name Domain)当前使用最为广泛的DNS服务器软件之一,最早有伯克利大学的一名学生编写,大多运营商都在使用BIND作为自己网络的DNS服务器。BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows)

之前做过关于BIND DNS服务基于Raspberry Pi 3B测试

树莓派3B/4B基于debian系统,在网络配置完成后,确保debian系统的DNS解析正常,查看配置

root@raspberrypi:/etc/bind# cat /etc/resolv.conf
# Generated by resolvconf
nameserver 61.139.2.69

通过apt-get install获取bind9

sudo apt-get install bind9 bind9utils dnsutils

安装完成后,bind9的配置路径在/etc/bind下面,首先查看配置文件named.conf

cat /etc/bind/named.conf

可以看到包含了三个配置文件

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

named.conf.options选项用来定义整个DNS服务器的运行环境,在Debian环境中,options语句的配置内容, 被移至named.conf.options文件中

我们首先配置named.conf.options文件,通过nano编辑器配置,nano /etc/bind/named.conf.options ,配置可以选择:转发运营商和递归查询两种方法其中一种

配置1:转发上级运营商DNS

options {
directory “/var/cache/bind”;

allow-query-cache {any;}; //允许缓存
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on port 53 {192.168.88.88;}; //定义DNS服务器的监听端口为53,监听IP为129.168.88.10
forward only; //定义转发类型为only,只向上级DNS转发请求,及时失败也会转发
forwarders { 61.139.2.69;218.6.200.139; }; //定义上级电信DNS服务器IP
listen-on-v6 { any; }; //开启IPv6监听
allow-query {any;}; //允许任何IP的请求

};

 

以上配置意思是:用192.168.88.88作为dns服务器IP进行解析,所有请求都转发到上级的DNS 61.139.2.69和218.6.200.139,允许任何IP的DNS请求,并开启DNS缓存

配置2:递归查询配置

如果你不想转发到运营商DNS,可以修改为递归查询,向全球根DNS服务器查询

options {
directory “/var/cache/bind”;

allow-query-cache {any;}; //允许缓存
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on port 53 {192.168.88.88;}; //定义DNS服务器的监听端口为53,监听IP为129.168.88.10
recursion yes; //向全球的根DNS服务器请求递归查询
listen-on-v6 { any; }; //开启IPv6监听
allow-query {any;}; //允许任何IP的请求

};

将forward配置删除,改为recursion yes,注意递归查询配置好了后,未访问过的域名第一次解析域名会失败,第二次就会正常,BIND会写入缓存中。

指定域名转发配置

当我们有两条线路时,如果需要转发指定的域名,到另外一条线路DNS进行解析,进入named.conf.default-zones,在配置文件后添加如下:

zone “google.com” {
type forward;
forward first;
forwarders { 8.8.8.8; };
};

zone类型是forward,转发类型为first,仅转发一次,如果失败,会使用options下的DNS解析

重启bind服务

当你每次设置完bind配置后,需重启bind9服务

/etc/init.d/bind9 restart

通过netstat 命令查看服务是否启动

root@raspberrypi:/etc/bind# netstat -nptul
Active Internet connections (only servers)
Proto   Recv-Q      Send-Q      Local Address        Foreign Address     State    PID/Program name
tcp        0                  0                192.168.88.88:53  0.0.0.0:*               LISTEN  18007/named
tcp        0                  0                0.0.0.0:22              0.0.0.0:*                LISTEN  501/sshd
tcp        0                  0                127.0.0.1:953          0.0.0.0:*              LISTEN  18007/named
tcp6      0                  0                :::53                          :::*                         LISTEN  18007/named
tcp6      0                  0                :::22                          :::*                         LISTEN  501/sshd
tcp6      0                  0                ::1:953                      :::*                         LISTEN  18007/named
udp       0                 0                192.168.88.88:53   0.0.0.0:*                                   18007/named
udp6     0                0                 :::53                          :::*                                             18007/named

到此基本的DNS服务器搭建就完成,可以通过局域网内的电脑用192.168.88.88解析域名测试。

关于rndc

从上面的网络进程看,named除了开启tcp/udp的53端口监听外,还启用了一个953的端口,这个是用于rndc连接的,rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程查看当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。

如果有多台BIND DNS服务器组网,可以通过rndc命令进行统一管理,例如1台服务器做了配置荣光rsync进行同步到其他服务器,再通过rndc命令进行统一执行

rndc reload   #重新载入配置,类似与重启服务
rndc flush   #刷新DNS服务缓存

rndc配置,通过rndc.key进行同步。

rndc配置需要通过 rndc-confgen 生成配置文件

rndc-confgen > /etc/bind/rndc.conf

生成文件后,可以查看配置

root@raspberrypi:/etc/bind# cat rndc.conf
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “+kxliHl+1qRqD90khsUOrg==”;
};

options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key “rndc-key” {
# algorithm hmac-md5;
# secret “+kxliHl+1qRqD90khsUOrg==”;
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { “rndc-key”; };
# };
# End of named.conf

 

根据配置文件提示,上面部分配置需要加入到named.conf中

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

key “rndc-key” {
algorithm hmac-md5;
secret “+kxliHl+1qRqD90khsUOrg==”;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { “rndc-key”; };
};

原来的rndc.key文件还在,如果执行rndc reload出现以下提示,可以忽略,也可以将rndc.key文件重命名

WARNING: key file (/etc/bind/rndc.key) exists, but using default configuration file (/etc/bind/rndc.conf)

在rndc中的controls配置,是可以控制远端服务器提交的执行命令,也就是可以通过一台服务器来管理多台