本节介绍系统管理员可用于控制和调试名称服务器守护进程的几个不可或缺的诊断、管理和监视工具。
dig
、 host
和 nslookup
程序都是用于手动查询名称服务器的命令行工具。它们在风格和输出格式上有所不同。
dig
dig
是这些查找工具中最通用、最完整的。它有两种模式:用于单个查询的简单交互模式和批处理模式,批处理模式在多个查询行的列表中为每个查询行执行一个查询。所有查询选项都可以从命令行访问。
有关更多信息以及可用命令和选项的列表,请参阅dig - DNS lookup utility。
host
host
实用程序强调简单性和易用性。默认情况下,它在主机名和Internet地址之间进行转换,但可以使用选项扩展其功能。
有关更多信息以及可用命令和选项的列表,请参阅dig - DNS lookup utility。
nslookup
nslookup
有两种模式:交互式和非交互式。交互模式允许用户查询名称服务器以获取有关各种主机和域的信息,或打印域中的主机列表。非交互模式用于仅打印主机或域的名称和请求的信息。
由于其晦涩难懂的用户界面和经常不一致的行为,我们不建议使用 nslookup
。用 dig
代替。
管理工具在服务器管理中起着不可或缺的作用。
named-checkconf
named-checkconf
程序检查 named.conf
文件的语法。
有关更多信息和可用命令和选项的列表,请参阅 named-checkconf - named
配置文件语法检查工具。
named-checkzone
named-checkzone
程序检查区域文件的语法和一致性。
有关更多信息以及可用命令和选项的列表,请参阅named-checkzone - zone
文件验证工具。
named-compilezone
此工具类似于 named-checkzone
,但它总是将区域内容转储到指定的文件中(通常采用不同的格式)。
有关更多信息和可用命令和选项的列表,请参阅named-checkzone - zone
文件转换工具。
rndc
远程名称守护进程控制(rndc
)程序允许系统管理员控制名称服务器的操作。
有关可用rndc命令的详细信息,请参阅rndc - name server control utility。
rndc
需要一个配置文件,因为与服务器的所有通信都是通过依赖于共享密钥的数字签名进行身份验证的,除了配置文件外,无法提供该密钥。rndc配置文件的默认位置是 /etc/rndc.conf
,但可以使用-c选项指定其他位置。如果找不到配置文件,rndc还会查找 /etc/rndc.key
(或配置BIND构建时定义的任何 sysconfdir
)。rndc.key
文件是通过运行 rndc-confgen -a
生成的,如 controls
中所述。
配置文件的格式类似于 named.conf
,但仅限于三个块:options
、key
、 server
和包含指令(include Directive)。这些块将密钥与它们要共享的服务器相关联。区块的顺序并不重要。
options
Grammar:
options {
default-key <string>;
default-port <integer>;
default-server <string>;
default-source-address ( <ipv4_address> | * );
default-source-address-v6 ( <ipv6_address> | * );
};
Blocks:topmost
default-server
default-server <string>;
default-server
接受主机名或地址参数,表示如果命令行上没有提供 -s
选项,则联系的服务器。
default-key
default-key <string>;
default-key
以key的名称作为其参数,如 key
块所定义。
default-port
default-port <integer>;
default-port
指定如果命令行或server
块上没有给出端口,rndc
应连接到的端口。
default-source-address
default-source-address ( <ipv4_address> | *);
default-source-address-v6
default-source-address-v6 ( <ipv6_address> | * );
default-source-address
和 default-source-address-v6
指定了用于与服务器通信的IPv4和IPv6源地址,如果命令行或 server
块中没有给出地址。
key
Grammar server: key <string>;
Grammar topmost:
xxxxxxxxxx
key <string> {
algorithm <string>;
secret <string>;
}; // may occur multiple times
Blocks:topmost,server
key
块定义了 rndc
在使用 named
进行身份验证时使用的密钥。它的语法与named.conf
中的 key
语句相同。关键字 key
后面跟着一个键名,键名必须是有效的域名,尽管它实际上不需要是层次结构的;因此,像 rndckey
这样的字符串是一个有效的名称。密钥块有两个语句: algorithm
和 secret
。
algorithm
algorithm <string>;
虽然配置解析器接受任何字符串作为 algorithm
的参数,但目前只有字符串 hmac-md5
、 hmac-sha1
、 hmac-sha224
、 hmac-sha256
、 hmac-Shah384
和 hmac-sha512
具有任何含义。
secret
secret <string>;
secret是 RFC 3548
中指定的Base64编码字符串。
server
Grammar:
xxxxxxxxxx
server <string> {
addresses { ( <quoted_string> [ port <integer> ] | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ); ... };
key <string>;
port <integer>;
source-address ( <ipv4_address> | * );
source-address-v6 ( <ipv6_address> | * );
}; // may occur multiple times
Blocks: topmost
server
块指定给定服务器的连接参数。服务器可以指定为主机名或地址。
addresses
addresses { ( <quoted_string> [ port <integer> ] | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ); ... };
key
将使用 key
语句定义的密钥与服务器相关联。
port
port <integer>;
指定服务器上 rndc
应连接的端口。
source-address
source-address ( <ipv4_address> | *);
source-address-v6
source-address-v6 ( <ipv6_address> | *);
覆盖此特定服务器的 source-address
和 source-address-v6
。
示例最小配置文件如下:
xxxxxxxxxx
key rndc_key {
algorithm "hmac-sha256";
secret
"c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};
options {
default-server 127.0.0.1;
default-key rndc_key;
};
如果此文件安装为 /etc/rndc.conf
,则允许执行以下命令:
rndc_reload
如果本地计算机上的名称服务器正在使用以下控制语句运行,则连接到127.0.0.1端口953并使名称服务器重新加载:
xxxxxxxxxx
controls {
inet 127.0.0.1
allow { localhost; } keys { rndc_key; };
};
并且它具有与rndc_key
相同的密钥块。
运行 rndc-confgen
程序可以方便地创建 rndc.conf
文件,并显示添加到 named.conf
所需的相应 controls
语句。或者,可以运行 rndc-confgen -a
来设置 rndc.key
文件,而根本不修改 named.conf
。
某些Unix信号会导致名称服务器采取特定操作,如下表所述。这些信号可以使用 kill
命令发送。
SIGHUP | 使服务器读取named.conf 并重新加载数据库。 |
---|---|
SIGTERM | 使服务器清理并退出。 |
SIGINT | 使服务器清理并退出。 |
插件是一种使用动态可加载库扩展 named
功能的机制。通过使用插件,对于大多数用户来说,核心服务器功能可以保持简单;实现可选功能的更复杂的代码只需要由需要这些功能的用户安装。
插件接口正在开发中,预计会随着更多插件的添加而不断发展。目前只支持“query plugins” (查询插件);这些修改了名称服务器查询逻辑。未来可能会添加其他插件类型。
BIND中目前唯一包含的插件是 filter-aaaa.so
,它取代了之前作为 named
的一部分本机存在的 filter-aaaa
功能。此功能的代码已从 named
中删除,不能再使用标准 named.conf
语法进行配置,但 filter-aaaa.so
插件中的链接提供了相同的功能。
plugin
Grammar: plugin ( query ) <string> [ { <unspecified-text> } ]; // may occur multiple times
Blocks: topmost, view
Tags: server
在 named.conf
中配置插件。
插件是使用named.conf中的plugin语句配置的:
xxxxxxxxxx
plugin query "library.so" {
parameters
};
在这个例子中, filelibrary.so
是插件库。 query
表示这是一个查询插件。
可以指定多个 plugin
语句,以加载不同的插件或同一插件的多个实例。
parameters
以不透明字符串的形式传递给插件的初始化例程。配置语法因模块而异。
每个插件实现四个功能:
plugin_register
要分配内存,请配置插件实例,并附加到 named
中的挂钩点plugin_destroy
拆除插件实例并释放内存plugin_version
以检查插件是否与插件API的当前版本兼容plugin_check
测试插件参数的语法正确性在 named
源代码中的不同位置,有插件可以注册自己的“挂钩点”(hook points)。当 named
运行时达到挂钩点时,会检查是否有插件在那里注册;如果是这样,则调用相关的“钩子操作”(hook action)(插件库中的一个函数)。钩子操作可以检查运行时状态并进行更改:例如,修改要发送回客户端的答案或强制中止查询。更多详细信息可以在 lib/ns/include/ns/hook.h
文件中找到。