1.rndc命令解析:
rndc是BIND安装包提供的一种控制
域名服务运行的工具,它可以运行在其他计算机上,通过网络与
DNS服务器进行连接,然后根据管理员的指令对named进程进行远程控制,此时,管理员不需要DNS服务器的根用户权限。使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效而且rndc与DNS服务器实行连接时,需要通过
数字证书进行认证,而不是传统的用户名/密码方式,rndc在连接通道中发送命令时,必须使用经过服务器认可的密钥加密。为了生成双方都认可的密钥,可以使用
rndc-confgen命令产生密钥和相应的配置,再把这些配置分别放入named.conf和rndc的配置文件rndc.conf中
rndc命令选项参数:
rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] [-V] [-y key_id] {command}
参数:
-b source-address #使用 source-address 作为连接服务器的源地址。允许多个实例设置 IPv4 和 IPv6 源地址
-c config-file #使用config-file 作为缺省的配置文件/etc/rndc.conf 的替代。
-k key-file #使用 key-file 作为缺省的密钥文件/etc/rndc.key 的替代。如果config-file 不存在,/etc/rndc.key 中的密钥将用于认证发向服务器的命令。
-s server server #是与 rndc 的配置文件中 server语句匹配的服务器的名字或地址。如果命令行没有提供服务器,会使用 rndc 配置文件中 options 语句中的 default-server子句所命名的主机。
-p port #发送命令到 TCP端口 port,以取代 BIND 9 的缺省控制通道端口 953。
-V #打开冗余日志。
-y key_id #使用配置文件中的密钥 key_id
command参数:
reload 重新装入配置文件和区域
reload zone [class [view]] 重新装入单个区域
refresh zone [class [view]] 安排区域的立即维护
reconfig 仅重新装入配置文件和新区域
stats 将服务器统计信息写入统计文件中
querylog 切换查询日志
dumpdb 将高速缓存转储到转储文件 (named_dump.db)
stop 将暂挂更新保存到主文件并停止服务器
halt 停止服务器,但不保存暂挂更新
trace 将调试级别增加一级
trace level 更改调试级别
notrace 将调试级别设置为 0
flush 刷新服务器的所有高速缓存
flush [view] 为某一视图刷新服务器的高速缓存
status 显示服务器的状态
*restart 重新启动服务器(暂不能实现)
2.在同一台主机(192.168.85.128)上测试rndc
2.1 使用rndc-confgen > /etc/rndc.conf命令生成配置文件
[root@localhost ~]# rndc-confgen > /etc/rndc.conf
[root@localhost ~]# cat /etc/rndc.conf
# Start of rndc.conf #配置文件的内容
key "rndc-key" {
algorithm hmac-md5;
secret "PVxyBkLAK+edj/3tEuckJg==";
};
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: #把这些内容加到named.conf中
# key "rndc-key" {
# algorithm hmac-md5;
# secret "PVxyBkLAK+edj/3tEuckJg==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
注意:这里我在SecureCRT软件中输入rndc-confgen一直无法显示,但是在虚拟机里的终端中却一下子就好了,查了一下,别人也碰到过这种情况,我也不清楚原理,查到有一种方法可以,不过我没试,把这种方法复制下来:
rndc-confgen 调用 /dev/random ,而 /dev/random 又通过 /proc/interrupts 产生随机数不足,导致
rndc-confgen 一直等待
rndc-confgen --help 可以指定 randomfile
1.
手动生成一个 randomfile 文件
# echo "selbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselbooselboo" > test
# rndc-confgen -r test
2.
rndc-confgen -r /dev/urandom
/dev/random 和 /dev/urandom 详解
2.2 下面就是把rndc.conf中的后半部分注释内容加到named.conf中并去掉注释生效
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" { #将鼠标移动到此行
# algorithm hmac-md5;
# secret "PVxyBkLAK+edj/3tEuckJg==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
:.,$-1w >> /etc/named.conf #功能是将当前行到倒数第二行(包括)的内容追加到named.conf中
编译/etc/named.conf文件
# key "rndc-key" { #鼠标移动到此行
# algorithm hmac-md5;
# secret "PVxyBkLAK+edj/3tEuckJg==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
:.,$s/^# //g #功能是将从当前行到最后一行以#开头且紧跟着一个空格的字符替换为空格
确定保存退出即可
2.3 测试
先重启服务在测试否则会出现错误:
[root@localhost ~]#
service named restart
Stopping named: .[ OK ]
Starting named: [ OK ]
[root@localhost ~]#
rndc -c /etc/rndc.conf status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.3 #版本号
CPUs found: 1 #主机上cpu个数
worker threads: 1 #named工作进程个数
number of zones: 20
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 #服务状态
错误如下:
[root@localhost ~]# rndc -c /etc/rndc.conf status
rndc: connection to remote host closed
This may indicate that
* the remote server is using an older version of the command protocol,
* this host is not authorized to connect,
* the clocks are not synchronized, or
*
the key is invalid.
或者
[root@localhost ~]#
rndc -c /etc/rndc.conf stop
[root@localhost ~]# service named status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
rndc: connect failed: 127.0.0.1#953: connection refused
named dead but subsys locked
[root@localhost ~]#
netstat -untlp | grep 53
[root@localhost ~]# service named start
Starting named: [ OK ]
3.测试在192.168.85.133上控制192.168.85.128上的DNS服务
3.1 修改192.168.85.128上的/etc/named.conf文件
controls {
inet 192.168.85.128 port 953 #在本机运行一个rndc监听端口953来监听主机192.168.85.128
allow { 192.168.85.133; } keys { "rndc-key"; }; #允许192.168.85.133主机使用rndc-key来控制
};
保存退出并重启服务
此时的监听情况
[root@localhost ~]# netstat -antlp | grep named
tcp 0 0 192.168.85.128:53 0.0.0.0:* LISTEN 4732/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 4732/named
tcp 0 0
192.168.85.128:953 0.0.0.0:* LISTEN 4732/nam
此时远程主机192.168.85.133可以通过953端口连接该主机但是还没有密钥
3.2 将本地主机的/etc/rndc.conf发送到远程主机上(如果远程主机上的/etc中已有该文件时就换个目录存放以免文件覆盖)
[root@localhost ~]# scp /etc/rndc.conf 192.168.85.133:/root/
The authenticity of host '192.168.85.133 (192.168.85.133)' can't be established.
RSA key fingerprint is e5:5e:5f:35:39:f9:71:f0:80:7b:60:a6:83:eb:7c:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.85.133' (RSA) to the list of known hosts.
root@192.168.85.133's password:
rndc.conf 100% 479 0.5KB/s 00:00
3.3 在远程主机133上查看并修改文件
[root@localhost ~]# ls /root/ | grep rndc
rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "PVxyBkLAK+edj/3tEuckJg==";
};
options {
default-key "rndc-key";
default-server
192.168.85.128;
default-port 953;
};
3.4 测试远程主机133控制本地服务器128
[root@localhost ~]#
rndc -c rndc.conf status #注意此时的路径
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.3
CPUs found: 1
worker threads: 1
number of zones: 20
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