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配置,是可以控制远端服务器提交的执行命令,也就是可以通过一台服务器来管理多台