动态 DNS 更新实用程序。
nsupdate9 [-d] [-y keyname:secret | -k keyfile] [-v] [filename]
nsupdate9 命令用来给名称服务器提交定义在 RFC2136 中的动态 DNS 更新请求。它允许在没有手工编辑区域文件的情况下,从区域中添加或除去资源记录。单个的更新请求能够包含添加或除去多个资源记录的请求。
由 nsupdate9 或 DHCP 服务器动态控制的区域不能手工编辑。手工编辑会与动态更新发生冲突,并产生数据丢失。
用 nsupdate9 动态添加或除去的资源记录必须在同一个区域内。请求发送到区域的主控服务器。它由区域的 SOA 记录的 MNAME 字段标识。
-d 选项设置 nsupdate9 操作为调试方式。它提供了关于更新请求和从名称服务器接收的应答的跟踪信息。
事务签名能用来认证动态 DNS 更新。 这些使用描述在 RFC2845 中的 TSIG 资源记录类型。此签名依赖于只让 nsupdate9 和名称服务器知道的共享秘密。当前唯一支持 TSIG 加密的算法是 HMAC-MD5,它定义在 RFC 2104 中。一旦定义有 TSIG 的其它算法,当互相认证时应用程序就需要确保选择适当的算法和密钥。例如,合适的密钥和服务器语句添加到 /etc/named.conf 以便名称服务器将适当的密钥和算法与客户机应用程序的 IP 地址关联起来,该应用程序将使用 TSIG 认证。nsupdate9 不读取 /etc/named.conf.
nsupdate9 使用 -y 或者 -k 选项提供需要为认证动态 DNS 更新请求生成 TSIG 记录的共享秘密。这此选项互相排斥。带有 -k 选项,nsupdate9 从文件 keyfile 中读取共享秘密,它名字的格式为 K{name}.+157.+{random}.private。 由于历史原因,文件 K{name}.+157.+{random}.key 也必须显示。当使用了 -y 选项,签名从密钥名中生成:secret。密钥名是密钥的名称, secret 是 base64 编码共享秘密。不主张使用 -y 选项,因为共享的 secret 在明文中以命令行参数提供。它在从 ps(1)的输出中和在由用户 shell 维护的历史文件中是可见的。
缺省情况下 nsupdate9 使用 UDP 给名称服务器发送更新请求。-v 选项使 nsupdate9 使用 TCP 连接。当使用更新请求的批处理时,它是很可取的。
-d | 设置 nsupdate9 操作为调试方式。 |
-y keyname:secret | 从密钥名中生成签名:secret |
-k keyfile | 从文件 keyfile 中读取共享秘密。 |
-v | 使 nsupdate9 使用 TCP 连接。 |
filename | 需更新的文件。 |
nsupdate9 从文件 filename 或标准输入中读取输入。每个命令放在一个输入行中。一些命令用于管理用途。其它的用于更新指示信息或区域内容先决条件检查。这些检查设置了一些名称或资源记录集从区域中存在与否的条件。如果整个更新请求要成功,这些条件就必须要满足。如果先决条件测试失败,更新将拒绝。
每个更新请求包括 0 或多个先决条件和 0 或多个更新。如果一些指定的资源记录从区域中出现或者失去,它就允许合适的认证更新请求继续进行。空格输入行(或者发送命令)能引起累积的命令作为到名称服务器的一个动态 DNS 更新请求发送。
命令格式和它的意义如下:
server [servername] [port] | 发送所有动态更新请求到名称服务器 servername 。当没有提供 server 语句时,nsupdate9 将发送更新到正确区域的主控服务器。区域的 SOA 记录的 MNAME 字段将为该区域标识主控服务器。port 是在 servername 上的端口号,这里动态更新请求得到发送。如果没有指定 port 号,使用缺省的 DNS 端口号 53。 |
local [address] [port] | 使用本地地址发送所有动态更新请求。 当没有提供本地语句时,nsupdate9 将使用由系统选择的 address 和 port 发送更新。 port 能够另外用来发送来自特定端口的请求。如果没有指定端口号,系统将分配一个。 |
zone [zonename] | 指定所有的更新到区域 zonename。如果没有提供区域语句, nsupdate9 依据输入的其余部分来试图确定要更新的正确区域。 |
key [name] [secret] | 指定使用 keyname keysecret 对进行 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 的资源记录。如果省略了类,就假定 IN (因特网)。 |
prereq yxrrset [domain-name] [class] [type] | 要求指定 type, class 和 domain-name 的资源记录必须存在。如果省略了类,就假定 IN (因特网)。 |
prereq yxrrset [domain-name] [class] [type] [data...] | 来自于共享公共的 type, class, 和 domain-name 格式的先决条件集数据结合在一起形成 RRs 集。 此 RRs 集必须与存在于给定 type,class 和 domain-name 的区域中的 RRs 集精确匹配。 data 要写成资源记录的 RDATA 的标准文本表示。 |
update delete [domain-name] [ttl] [class] [type] [data...] | 删除名称为 domain-name 的任意资源记录。 如果提供了 type 和 data ,那么只有匹配的资源记录将被除去。如果没有提供类,就假定网际网类 class 。 忽略 ttl ,只允许兼容性。 |
update add [domain-name] [ttl] [class] [type] [data...] | 添加指定 ttl, class 和 data 的新的资源记录。 |
show | 显示当前消息,包含从上次发送指定的所有先决条件和更新。 |
send | 发送当前消息。等同于输入一个空行。 |
忽略带有半冒号的注释行。
下面的示例显示了 nsupdate9 如何用来从 example.com 区域中插入和删除资源记录。注意,每个示例的输入都包含尾随的空格行,因此命令组能够作为到 example.com 主控名称服务器的一个动态更新请求来发送。
# nsupdate9 > update delete oldhost.example.com A > update add newhost.example.com 86400 A 172.16.1.1 >
删除 oldhost.example.com 的任意 A 记录,添加一个 newhost.example.com IP 地址为 172.16.1.1 的 A 记录。 新添加的记录有 1 天 TTL(86400 秒)
# nsupdate9 > prereq nxdomain nickname.example.com > update add nickname.example.com CNAME somehost.example.com >
先决条件获取名称服务器来检查 nickname.example.com 有没有任意类型的资源记录。如果有,更新请求失败。如果这个名称不存在,为它添加一个 CNAME。它确保了当添加 CNAME 时不会与在 RFC 中的经过长时间考验的规则发生冲突,该规则是如果名称作为一个 CNAME 存在它就不必以其它类型存在。(该规则已经在 RFC2535 中为 DNSSEC 进行了更新,以允许 CNAME 有 SIG 、KEY 和 NXT 记录。)
/etc/resolv.conf | 用来标识缺省名称服务器 |
K{name}.+157.+{random}.key | 由 dnssec-keygen(8) 创建的 HMAC-MD5 密钥的 Base-64 编码。 |
K{name}.+157.+{random}.private | 由 dnssec-keygen(8) 创建的 HMAC-MD5 密钥的 Base-64 编码。 |
RFC2136,RFC3007,RFC2104,RFC2845,RFC1034 和 RFC2535。
named9 守护程序和 dnssec-keygen 命令。