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中
1 yum install bind-utils -y
rndc的配置 执行命令rndc-confgen
,生成rndc的key,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [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==" ; # }; # # 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文件中 1 2 3 4 5 6 7 8 9 10 11 12 [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文件中 1 2 3 4 5 6 7 8 9 10 [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服务 1 2 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有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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服务状态(可以取值做监控) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [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,这样就不会看到那条警告了。
1 [root@k8s-dns ~]# rndc -c /etc/rndc.conf status
管理静态域(allow-update { none; };) 1 2 3 4 5 zone "boy.com" IN { type master; file "boy.com.zone"; allow-update { none; }; };
增、删、改一条记录后
1 2 [root@k8s-dns ~]# rndc reload boy.com zone reload up-to-date
管理动态域(allow-update { 10.1.1.250; };) 1 2 3 4 5 zone "boysec.cn" IN { type master; file "boysec.cn.zone"; allow-update { 10.1.1.250; }; };
增、删、改一条记录后
1 2 [root@k8s-dns ~]# rndc reload boysec.cn rndc: 'reload' failed: dynamic zone
直接reload会报错,需要先freeze再thaw才行
1 2 3 [root@k8s-dns ~]# rndc freeze boysec.cn [root@k8s-dns ~]# rndc thaw boysec.cn The zone reload and thaw was successful.