菜鸟科技网

rndc命令如何使用?

rndc (Remote Name Domain Controller) 是一个用于管理 BIND (Berkeley Internet Name Domain) DNS 服务器的命令行工具,它允许系统管理员在不重启 DNS 服务的情况下,安全地控制和查询服务器状态。

rndc命令如何使用?-图1
(图片来源网络,侵删)

rndc 就是你远程控制 BIND DNS 服务器的“遥控器”。


rndc 的工作原理

rndc 通过一个加密的 TCP 连接(默认端口 953)与 DNS 服务器通信,这个过程需要以下几个关键组件协同工作:

  1. rndc 客户端:你用来执行命令的程序(rndc reload)。
  2. named 服务器:正在运行的 BIND DNS 服务器进程。
  3. rndc.keyrndc.conf:包含共享密钥的配置文件,用于验证客户端和服务器的身份,确保通信安全。没有这个密钥,rndc 命令将无法连接到服务器。

核心配置文件

rndc 的行为由两个主要文件控制:

a. rndc.conf

这是 rndc 客户端的配置文件,它告诉 rndc 命令如何连接到 DNS 服务器,它定义了:

rndc命令如何使用?-图2
(图片来源网络,侵删)
  • 默认的服务器地址和端口。
  • 连接时使用的密钥名称。
  • 可用的服务器和密钥。

在大多数现代 Linux 发行版中,这个文件可能不存在,或者是一个非常简单的模板。rndc 会自动去寻找 /etc/rndc.key/etc/bind/rndc.key

b. named.confrndc.key

这是 BIND 服务器的配置文件,它必须包含一个与 rndc.conf 中相匹配的配置块,通常位于 optionscontrols 语句中。

controls 语句示例 (在 named.conf 中):

controls {
    inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

这个语句告诉 named 服务器:

rndc命令如何使用?-图3
(图片来源网络,侵删)
  • 监听在 0.0.1953 端口上。
  • 只允许来自 0.0.1 的连接。
  • 使用名为 "rndc-key" 的密钥进行认证。

key 语句示例 (在 named.conf 中):

key "rndc-key" {
    algorithm hmac-sha256;
    secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYSBzZWNyZXQ=";
};

这个语句定义了密钥的名称、加密算法和Base64 编码的密钥字符串,这个密钥必须和客户端 rndc.key 文件中的完全一致。

c. /etc/rndc.key

这是一个简化的配置,它将密钥直接存储在一个文件中,同时被 rndc 客户端和 named 服务器(通过 include 指令)使用。 示例:**

key "rndc-key" {
    algorithm hmac-sha256;
    secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYSBzZWNyZXQ=";
};

named.conf 中,你只需要用一行来包含它:

include "/etc/rndc.key";

注意: 此文件的权限通常设置为 640,所有者为 rootbind 组,以增强安全性。


常用 rndc 命令

以下是 rndc 最常用的一些命令:

命令 描述 示例
reload 重新加载主配置文件 (named.conf) 和区域文件,如果配置有误,服务器会继续使用旧配置运行。 rndc reload
reconfig 仅重新加载主配置文件 (named.conf),而不重新加载区域文件,用于添加或删除新的区域。 rndc reconfig
refresh 强制所有区域重新检查其 SOA 记录中的刷新时间,并开始与主服务器同步。 rndc refresh example.com
retransfer 强制指定区域从主服务器重新进行区域传输。 rndc retransfer example.com
stats 将服务器的统计信息打印到 /var/named/named.stats(或日志中)。 rndc stats
querylog 开启或关闭查询日志记录。 rndc querylog on
rndc querylog off
trace 增加调试级别,可以多次使用以获取更详细的日志。 rndc trace 5
notrace 将调试级别设置为 0,关闭调试日志。 rndc notrace
status 显示服务器的基本状态信息,包括版本号、运行时间、内存使用情况等。 rndc status
stop 优雅地停止 DNS 服务器,完成当前处理的所有查询后关闭。 rndc stop
halt 立即停止 DNS 服务器,不完成正在处理的查询。 rndc halt
flush 清空服务器的缓存。 rndc flush
flushname name 从缓存中移除特定名称的所有记录。 rndc flushname www.example.com
tsig-verify keyname 验证 TSIG 密钥。 rndc tsig-verify my-tsig-key

实际操作示例

场景 1:更新区域文件后,让服务器重新加载

假设你修改了 example.com 的区域文件 /var/named/example.com.zone

  1. 修改区域文件

    vim /var/named/example.com.zone
    # 修改 A 记录或其他内容
  2. 检查语法错误 在重新加载之前,最好先检查配置文件和区域文件的语法是否正确。

    named-checkconf /etc/named.conf  # 检查主配置文件
    named-checkzone example.com /var/named/example.com.zone  # 检查区域文件
  3. 使用 rndc reload 重新加载

    rndc reload

    如果成功,你会看到类似 server reload successful 的输出。

场景 2:添加一个新的区域

  1. named.conf 中添加新的区域配置

    zone "newzone.com" {
        type master;
        file "/var/named/newzone.com.zone";
    };
  2. 使用 rndc reconfig 重新加载配置

    rndc reconfig

    这个命令会告诉 named 读取新的 named.conf 配置,并加载 newzone.com 区域,而不会影响其他已经加载的区域。

场景 3:清空 DNS 缓存

当 DNS 记录已更改,但客户端仍在获取旧记录时,可以清空服务器缓存。

rndc flush

常见问题排查

问题 1:rndc: connect failed: 127.0.0.1#953: connection refused

  • 原因named 服务器没有在监听 953 端口。
  • 解决方案
    1. 检查 named 是否正在运行:systemctl status namedps aux | grep named
    2. 检查 named.conf 中是否有 controls 语句,并且配置正确。
    3. 检查防火墙(如 firewalldiptables)是否阻止了 953 端口。

问题 2:rndc: neither /etc/rndc.conf nor /etc/rndc.key was found

  • 原因rndc 找不到它的配置文件。
  • 解决方案
    1. 如果你已经配置了 named.conf 中的 controlskey,可以忽略此警告(如果命令能执行成功)。
    2. 如果没有,可以生成一个默认的 rndc.key 文件:
      rndc-confgen -a -r /dev/urandom

      这会自动创建 /etc/rndc.key 文件,并设置正确的权限,然后你需要将这个 key 的内容复制到 named.conf 中。

问题 3:rndc: incorrect key for server

  • 原因rndc.keynamed.conf 中定义的密钥不匹配。
  • 解决方案:仔细比较 rndc.key 文件和 named.confkey 语句的 secret 值,确保它们完全相同。

rndc 是 BIND DNS 服务器管理的核心工具,它提供了安全、高效的远程管理能力,是任何 BIND 管理员必须掌握的命令,理解其背后的密钥认证机制和常用命令,对于维护一个稳定可靠的 DNS 服务至关重要。

分享:
扫描分享到社交APP
上一篇
下一篇