树莓派3B/4B安装BIND DNS服务
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配置,是可以控制远端服务器提交的执行命令,也就是可以通过一台服务器来管理多台