Linux nsupdate 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux nsupdate 命令。

1、命令简介

nsupdate:用于动态更新 DNS(Domain Name System)记录的工具。它通常与 BIND(Berkeley Internet Name Domain)服务器一起使用,允许管理员通过命令行接口执行 DNS 记录的动态修改。

2、命令语法

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

3、命令描述

nsupdate 用于向名称服务器提交动态DNS更新请求,如RFC2136中所定义。这允许在不手动编辑区域文件的情况下添加或删除资源记录。单个更新请求可以包含添加或删除多个资源记录的请求。

通过nsupdate或DHCP服务器进行动态控制的区域不应手动编辑。手动编辑可能与动态更新发生冲突并导致数据丢失。

使用nsupdate动态添加或删除的资源记录必须位于同一区域。请求将发送到区域的主服务器,这由区域的SOA记录的MNAME字段确定。

使用-d选项使nsupdate进入调试模式。这提供了有关所做的更新请求以及从名称服务器接收的响应的跟踪信息。

事务签名可用于对动态DNS更新进行身份验证。这些使用了RFC2845中描述的TSIG资源记录类型或RFC3535和RFC2931中描述的SIG(0)记录。TSIG依赖于一个共享密钥,只应该为nsupdate和名称服务器所知。目前,TSIG支持的唯一加密算法是HMAC-MD5,这在RFC 2104中定义。一旦为TSIG定义了其他算法,应用程序将需要确保它们在使用TSIG身份验证时选择适当的算法以及密钥。例如,适当的key和server语句将被添加到/etc/named.conf中,以便名称服务器可以将适当的秘密密钥和算法与将使用TSIG身份验证的客户端应用程序的IP地址关联起来。SIG(0)使用公钥加密。要使用SIG(0)密钥,公钥必须存储在由名称服务器提供服务的区域中的KEY记录中。nsupdate不读取/etc/named.conf

nsupdate使用-y-k选项(带有HMAC-MD5密钥)来提供生成用于身份验证动态DNS更新请求的TSIG记录所需的共享密钥。这些选项是互斥的。对于-k选项,nsupdate从文件keyfile中读取共享密钥,其名称形式为K{name}.+157.+{random}.private。由于历史原因,文件K{name}.+157.+{random}.key也必须存在。使用-y选项时,将从keyname:secret生成签名。keyname是密钥的名称,secret是Base64编码的共享密钥。不建议使用-y选项,因为共享密钥作为明文命令行参数提供。这可能会在ps(1)的输出中可见,或者在用户Shell维护的历史文件中。

-k还可以用于指定用于身份验证动态DNS更新请求的SIG(0)密钥。在这种情况下,指定的密钥不是HMAC-MD5密钥。

默认情况下,nsupdate使用UDP将更新请求发送到名称服务器,除非它们太大而无法适应UDP请求,否则将使用TCP。-v选项使nsupdate使用TCP连接。这在进行一批更新请求时可能更可取。

-t选项设置更新请求在被中止之前的最长时间。默认值为300秒。可以使用零来禁用超时。

-u选项设置UDP重试间隔。默认值为3秒。如果为零,则间隔将根据超时间隔和UDP重试次数计算。

-r选项设置UDP重试次数。默认值为3。如果为零,将只进行一个更新请求。

4、命令选项

nsupdate从文件名或标准输入中读取输入。每个命令只在一行输入中提供。有些命令用于管理目的。其他是更新指令或对区域内容的先决条件检查。这些检查设置了一些条件,即某些名称或一组资源记录(RRset)在区域中存在或不存在。如果要使整个更新请求成功,必须满足这些条件。如果对先决条件的测试失败,更新将被拒绝。

每个更新请求由零个或多个先决条件和零个或多个更新组成。如果区域中存在或缺少某些指定的资源记录,则允许进行适当身份验证的更新请求。空白输入行(或send命令)导致将累积的命令作为一个动态DNS更新请求发送到名称服务器。

命令

描述

server {servername} [port]

发送所有动态更新请求到名称服务器

servername。如果没有提供server 声明,

nsupdate 将发送更新请求到正确区域的主服务器。

 port 是 servername

上用于发送动态更新请求的端口号,

默认使用 DNS 的端口号 53。

local {address} [port]

使用本地地址发送所有动态更新请求。

如果没有提供 local 声明,

nsupdate 将使用系统选择的地址和端口发送更新请求。

port 可以用于指定请求来自特定端口。如果未指定端口号,

系统将分配一个。

zone {zonename}

指定所有更新都要应用到区域

zonename

。如果未提供 zone 声明,

nsupdate 将尝试根据输入的其余部分

确定要更新的正确区域。

class {classname}

指定默认类别。如果未指定类别,

将使用默认类别

IN(互联网)。

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}

要求指定类型、类别和

domain-name

的资源记录不存在。如果省略了类别,将假定为

IN(互联网)。

prereq yxrrset {domain-name} [class] {type}

要求指定类型、类别和

domain-name

的资源记录存在。如果省略了类别,

将假定为 IN(互联网)。

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

删除名为 domain-name 的任何资源记录。

如果提供了类型和数据,则仅删除匹配的资源记录。

如果未提供类别,默认为互联网类别。

ttl 将被忽略,仅为了兼容性而允许。

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

添加具有指定ttl、类别和数据的新资源记录。

show

显示当前消息,

包含自上次发送以来指定的所有先决条件和更新。

send

发送当前消息,相当于输入一个空行。

answer

显示应答。

以分号开头的行是注释,将被忽略。这些命令和选项用于配置和执行 nsupdate 命令,用于进行动态 DNS 更新。

选项

说明

-d

以调试模式运行

nsupdate

,提供更新请求和名称服务器响应的跟踪信息。

-k keyfile

指定用于进行 TSIG 签名的密钥文件。允许对更新请求进行身份验证。

-y keyname:secret

使用指定的 TSIG 密钥对进行签名。

keyname

是密钥的名称,

secret

是以 base64 编码的共享密钥。

请注意,此选项在命令行上以明文形式提供密钥,

可能对安全性构成风险。

-t timeout

设置更新请求的最大超时时间(以秒为单位)。默认为 300 秒。

如果将超时时间设置为 0,则禁用超时。

-u retry-interval

设置 UDP 重试间隔(以秒为单位)。默认为 3 秒。

如果将重试间隔设置为 0,

则系统将根据超时间隔和 UDP 重试次数来计算间隔。

-r retries

设置 UDP 重试次数。默认为 3 次。

如果将重试次数设置为 0,则只会进行一次更新请求。

-v

使用 TCP 连接发送更新请求,而不是默认的 UDP。

适用于批量更新请求。

5、使用示例

1)向域名 example.com 添加一个新的 A 记录

nsupdate -k /path/to/keyfile << EOF
server dns.example.com
zone example.com
update add host1.example.com 86400 A 192.168.1.100
send

2)从域名 example.com 删除一个 MX 记录(邮件交换记录)

nsupdate -k /path/to/keyfile << EOF
server dns.example.com
zone example.com
update delete mail.example.com MX
send

3)设置资源记录的 TTL(生存时间)和类别

nsupdate -k /path/to/keyfile << EOF
server dns.example.com
zone example.com
update add txtrecord.example.com 3600 CH TXT "This is a TXT record"
send

4)多网卡可以使用 -l 选项来指定本地地址

nsupdate -l 192.168.1.10 << EOF
server dns.example.com
zone example.com
update add host2.example.com 86400 A 192.168.1.200
send

推荐阅读
cjavapy编程之路首页