DNS服务之用rndc远程管理服务器
rndc简介
rndc,英文全称为Remote Name Domain Controllor
,是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前DNS服务器的运行状况,也可以对DNS服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效。在实际情况下,DNS服务器是非常繁忙的,任何短时间的停顿都会给用户的使用带来影响。因此,使用rndc工具可以使DNS服务器更好地为用户提供服务。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf
,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key
文件中。rndc默认监听在953号端口(TCP),其实在bind9中rndc默认就是可以使用,不需要配置密钥文件。
rndc是BIND安装包提供的一种控制域名服务运行的工具,它可以运行在其他计算机上,通过网络与DNS服务器进行连接,然后根据管理员的指令对named进程进行远程控制,此时,管理员不需要DNS服务器的根用户权限。使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效而且rndc与DNS服务器实行连接时,需要通过数字证书进行认证,而不是传统的用户名/密码方式,rndc在连接通道中发送命令时,必须使用经过服务器认可的密钥加密。为了生成双方都认可的密钥,可以使用rndc-confgen命令产生密钥和相应的配置,再把这些配置分别放入named.conf和rndc的配置文件rndc.conf中
代码语言:javascript复制yum install bind-utils -y
rndc的配置
执行命令rndc-confgen
,生成rndc的key,内容如下:
[root@k8s-dns ~]# rndc-confgen -r /dev/urandom
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "PmY9ozjj3 pkKJ4NXLpIlQ==";
};
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 "PmY9ozjj3 pkKJ4NXLpIlQ==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
然后新建rndc.conf配置文件,将rndc-confgen生成的如下部分复制到rndc.conf文件中
代码语言:javascript复制[root@k8s-dns ~]# cat /etc/rndc.conf
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "waEmuOMU3OnrTsvdOBDQdQ==";
};
options {
default-key "rndc-key";
default-server 10.1.1.250;
default-port 953;
};
再然后新建rndc.key配置文件,将rndc-confgen生成的如下部分复制到rndc.key文件中
代码语言:javascript复制[root@k8s-dns ~]# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "waEmuOMU3OnrTsvdOBDQdQ==";
};
controls {
inet 10.1.1.250 port 953
allow { 10.1.1.250;10.1.1.254; } keys { "rndc-key"; };
};
注意:这里要配置一下controls段的acl,限定好哪些主机可以使用rndc管理DNS服务
再然后在named.conf中使用include "/etc/named/rndc.key"
;指令将rndc.key的文件内容引入到named.conf中。
重启bind9服务
代码语言:javascript复制systemctl restart named
netstat -luntp|grep 953
rndc的常用操作命令
rndc命令的通用操作格式为:
rndc [-c config-file] [-k key-file] [-s server] [-p port] {command}
其中-c config-file
指定rndc的配置文件,若不显式指定,则默认为/etc/rndc.conf
。-k key-file
执行rndc的eky文件,若不显式指定,则默认为/etc/rndc.key
。
常用的执行的命令command有:
代码语言:javascript复制rndc status #查询DNS服务器状态
rndc reload #重新加载配置文件和zone file
rndc reload zone_name #重新加载指定zone file
rndc reconfig #重读配置文件并加载新增的区域
rndc querylog #关闭或开启查询日志
rndc dumpdb #将高速缓存转储到转储文件 (named_dump.db)
rndc freeze #暂停更新所有动态zone
rndc freeze zone [class [view]] #暂停更新一个动态zone
rndc flush [view] #刷新服务器的所有高速缓存
rndc flushname name #为某一视图刷新服务器的高速缓存
rndc stats #将服务器统计信息写入统计文件中
rndc stop #将暂挂更新保存到主文件并停止服务器
rndc halt #停止服务器,但不保存暂挂更新
rndc trace #打开debug, debug有级别的概念,每执行一次提升一次级别
rndc trace LEVEL #指定 debug 的级别, trace 0 表示关闭debug
rndc notrace #将调试级别设置为 0
rndc restart #重新启动服务器(尚未实现)
rndc addzone zone [class [view]] { zone-options } #增加一个zone
rndc delzone zone [class [view]] #删除一个zone
rndc tsig-delete keyname [view] #删除一个TSIG key
rndc tsig-list #查询当前有效的TSIG列表
rndc validation newstate [view] #开启/关闭dnssec
查询DNS服务状态(可以取值做监控)
代码语言:javascript复制[root@k8s-dns ~]# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
version: 9.9.4-RedHat-9.9.4-72.el7 <id:8f9657aa>
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
可以看到,上面的输出信息中包含了一条警告,这个其实没什么影响的,如果你有强迫症可以使用下面这条命令开启动rndc,这样就不会看到那条警告了。
代码语言:javascript复制[root@k8s-dns ~]# rndc -c /etc/rndc.conf status
管理静态域(allow-update { none; };)
代码语言:javascript复制zone "boy.com" IN {
type master;
file "boy.com.zone";
allow-update { none; };
};
增、删、改一条记录后
代码语言:javascript复制[root@k8s-dns ~]# rndc reload boy.com
zone reload up-to-date
管理动态域(allow-update { 10.1.1.250; };)
代码语言:javascript复制zone "boysec.cn" IN {
type master;
file "boysec.cn.zone";
allow-update { 10.1.1.250; };
};
增、删、改一条记录后
代码语言:javascript复制[root@k8s-dns ~]# rndc reload boysec.cn
rndc: 'reload' failed: dynamic zone
直接reload会报错,需要先freeze再thaw才行
代码语言:javascript复制[root@k8s-dns ~]# rndc freeze boysec.cn
[root@k8s-dns ~]# rndc thaw boysec.cn
The zone reload and thaw was successful.