手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

nsupdate(1M)

名称

nsupdate - 动态 DNS 更新实用程序

用法概要

nsupdate [-dv] [-y keyname:secret | -k keyfile] [-t timeout]
     [-u udptimeout] [-r udpretries] [filename]

描述

nsupdate 实用程序向名称服务器提交动态 DNS 更新请求(如 RFC 2136 中定义)。该实用程序允许从区域添加或删除资源记录,无需手动编辑区域文件。单一更新请求可以包含添加或删除多个资源记录的请求。

nsupdate 或 DHCP 服务器动态控制下的区域不应手动编辑。手动编辑会与动态更新冲突,从而导致数据丢失。

通过 nsupdate 动态添加或删除的资源记录必须在相同区域中。请求将发送到区域 SOA 记录的 MNAME 字段标识的区域主服务器。

事务签名可用于对使用 RFC 2845 中描述的 TSIG 资源记录类型的动态 DNS 更新进行验证。签名依赖于应仅由 nsupdate 和名称服务器知道的共享密钥。当前,TSIG 唯一支持的加密算法是 HMAC-MD5,该算法在 RFC 2104 中定义。一旦为 TSIG 定义其他算法,应用程序在彼此验证时将需要确保它们选择了适当的算法和密钥。例如,适用的 key 和 server 语句将会添加到 /etc/named.conf,这样,名称服务器可以将适当的密钥和算法与将要使用 TSIG 验证的客户机应用程序的 IP 地址关联。nsupdate 实用程序不会读取 /etc/named.conf。

nsupdate 实用程序使用 –y 或 –k 选项提供共享密钥,生成用于验证动态 DNS 更新请求的 TSIG 记录时需要该密钥。这些选项是互斥的。请参见“选项”部分。

选项

支持以下选项:

–d

在调试模式下操作。这可以提供有关提出的更新请求以及从名称服务器接收到的回复的跟踪信息。

–k keyfile

从文件 keyfile 读取共享密钥,其名称格式为 K{name}.+157.+{random}.private。由于历史原因,还必须存在文件 K{name}.+157.+{ random}.key。

–r udpretries

设置 UDP 重试次数。缺省为重试 3 次。如果将 udpretries 设置为零,仅进行一次更新请求。

–t timeout

设置中止更新前的 timeout 间隔(以秒为单位)。缺省值是 300 秒。设置为零会禁用超时。

–u udptimeout

以秒为单位设置 UDP 重试之间的间隔,缺省设置是 3 秒。如果设置为零,会根据超时 (–t) 和 UDP 重试次数 (–r) 计算间隔时间。

–v

使用 TCP 连接。进行批量更新请求时,使用 TCP 连接更合适。缺省情况下,nsupdate 使用 UDP 向名称服务器发送更新请求。

–y keyname:secret

从 keyname:secret 生成签名,其中 keyname 是密钥名称,secret 是 base64 编码的共享密钥。

不建议使用 –y 选项,因为共享密钥作为命令行参数以明文形式提供,可以在 ps(1)的输出中或用户 shell 维护的历史文件中看到。

输入格式

输入格式

nsupdate 实用程序从 filename 读取输入或读取标准输入。每个命令都以单行输入提供。有些命令用于管理目的。其他则是对区域内容的更新说明或先决条件检查。这些检查设置某些名称或资源记录集合 (RRset) 在区域中存在或不存在的条件。要成功执行整个更新请求,必须满足这些条件。如果对先决条件的测试失败,更新将被拒绝。

每个更新请求都包含零或多个先决条件以及零或多个更新。如果某些指定资源记录在区域中存在或缺失,该条件允许适当验证的更新请求继续执行。空白输入行(或 send 命令)将累积的命令作为一个动态 DNS 更新请求发送到名称服务器。

命令格式及其意义如下:

server servername [ port ]

将全部动态更新请求发送到名称服务器 servername。未提供 server 语句时,nsupdate 将更新发送至正确区域的主服务器。该区域 SOA 记录的 MNAME 字段标识该区域的主服务器。port 参数是动态更新请求发送到的 servername 上的端口号。如果未指定端口号,会使用缺省 DNS 端口号 53。

local address [ port ]

使用本地 address 发送所有动态更新请求。未提供 local 语句时,nsupdate 使用系统选择的地址和端口发送更新。port 参数也可用于从特定端口提出请求。如果没有指定端口号,系统会分配一个。

zone zonename

指定要对区域 zonename 做出所有更新。如果未提供 zone 语句,nsupdate 会根据输入的剩余部分尝试确定要更新的正确区域。

class classname

指定缺省类。如果未指定类,缺省类为 IN。

key name secret

指定所有更新将使用 name secret 对进行 TSIG 签名。key 命令覆盖通过 –y 或 –k 选项在命令行上指定的所有密钥。

prereq nxdomain domain-name

要求不能存在名称为 domain-name 的任何类型的资源记录。

prereq yxdomain domain-name

要求存在 domain-name(至少有一个资源记录,无论类型如何)。

prereq nxrrset domain-name [ class ] type

要求不能存在指定 type、class 和 domain-name 的资源记录。如果省略 class,则假定是 IN (internet)。

prereq yxrrset domain-name [ class ] type

要求必须存在指定 type、class 和 domain-name 的资源记录。如果省略 class,则假定是 IN (internet)。

prereq yxrrset domain-name [ class ] type data...

来自共享相同 type、class 和 domain-name 的格式的每一组先决条件的 data 将组合构成一个 RR 集合。该 RR 集合必须与区域中给定 type、class 和 domain-name 的现有 RR 集合完全匹配。data 以资源记录的 RDATA 的标准文本表示来书写。

update delete domain-name [ ttl ] [ class ] [ type [ data... ] ]

删除名为 domain-name 的任何资源记录。如果提供了 type 和 data,只会删除匹配的资源记录。如果未提供 class,则假定为 internet 类。将忽略 ttl,其仅为兼容性而提供。

update add domain-name ttl [ class ] type data...

添加具有指定 ttl、class 和 data 的新资源记录。

show

显示当前消息,包含上次发送以来指定的所有先决条件和更新。

send

发送当前消息。这等效于输入空白行。

answer

显示回答。

以分号开始的行是注释,将被忽略。

示例

示例 1 在区域中插入和删除资源记录

以下示例显示如何使用 nsupdate 在 example.com 区域插入和删除资源记录。请注意,每个示例中的输入包括一个结尾空白行,这样,一组命令会作为一个动态更新请求发送到 example.com 主名称服务器。

# nsupdate
> update delete oldhost.example.com A
> update add newhost.example.com 86400 A 172.16.1.1
> send

oldhost.example.com 的所有 A 记录都会删除。会为 IP 地址为 172.16.1.1 的 newhost.example.com 添加 A 记录。新添加的记录有 1 天的 TTL(86400 秒)。

示例 2 仅当无记录存在时添加 CNAME

以下命令仅在其不存在记录时添加 CNAME。

# nsupdate
> prereq nxdomain nickname.example.com
> update add nickname.example.com 86400 CNAME somehost.example.com
> send

先决条件使名称服务器检查 nickname.example.com 是否有任何类型的资源记录。如果有,更新请求失败。如果该名称不存在,会为其添加 CNAME。该操作确保添加 CNAME 时,它不会与 RFC 1034 中的以下长期存在的规则冲突:如果一个名称作为 CNAME 存在,就不能作为任何其他的记录类型存在。(该规则已经为 RFC 4035 中的 DNSSEC 进行了更新,以允许 CNAME 具有 RSIG、DNSKEY 和 NSEC 记录。)

文件

/etc/resolv.conf

用于标识缺省名称服务器

K{name}.+157.+{random}.key

dnssec-keygen(1M) 创建的 HMAC-MD5 密钥的 base-64 编码。

K{name}.+157.+{random}.private

dnssec-keygen(1M) 创建的 HMAC-MD5 密钥的 base-64 编码

已知问题

TSIG 密钥分别存储在两个单独文件中。这是为加密操作使用 DST 库的 nsupdate 结果,在未来的发行版中可能会有所变化。

属性

有关下列属性的说明,请参见 attributes(5):

属性类型
属性值
可用性
service/network/dns/bind
接口稳定性
Volatile(可变)

另请参见

named(1M)、dnssec-keygen(1M)、attributes(5)

RFC 2136、RFC 3007、RFC 2104、RFC 2845、RFC 1034、RFC 2535、RFC 2931、RFC 4035