菜鸟科技网

dnscmd命令如何使用?

dnscmd 是一个强大的命令行工具,用于管理 Windows Server 上的 DNS 服务器,它允许管理员通过脚本或命令行执行几乎所有可以在 DNS 管理控制台中完成的操作,非常适合自动化任务和批量管理。

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

基本概述

  • 全称: DNS Command
  • 用途: 管理 DNS 服务器和区域。
  • 系统要求: 必须安装在 Windows Server 的 DNS 服务器角色上,或者安装了“远程服务器管理工具 (RSAT)”的客户端计算机。
  • 权限: 需要管理员权限才能运行。

语法结构

dnscmd 命令的基本结构如下:

dnscmd [<ServerName>] <Command> [<CommandParameters>]
  • <ServerName>: (可选)要管理的 DNS 服务器的名称或 IP 地址,如果省略,则默认为本地计算机。
  • <Command>: (必需)要执行的操作命令,/ZoneAdd/RecordAdd 等。
  • <CommandParameters>: (可选)为特定命令提供的参数,例如区域名称、记录类型、IP 地址等。

常用命令分类及示例

下面我将 dnscmd 的常用命令按功能分类,并提供具体示例。

1 服务器级操作

这些命令用于管理 DNS 服务器本身。

  • 查看服务器信息

    dnscmd命令如何使用?-图2
    (图片来源网络,侵删)
    • dnscmd /Info: 显示 DNS 服务器的所有配置信息。
    • dnscmd /Info <ParameterName>: 显示特定参数的值,查看是否启用转发器:
      dnscmd /Info Forwarders
  • 配置服务器选项

    • 启用/禁用递归: 递归是 DNS 服务器向其他 DNS 服务器查询以解析未知名称的能力。
      dnscmd /ResetForwarders  # 清除所有转发器,并启用递归
      dnscmd /SetForwarders 8.8.8.8 8.8.4.4 # 设置 Google 的 DNS 为转发器,并自动禁用递归
  • 刷新服务器

    • dnscmd /ClearCache: 清空 DNS 服务器的解析缓存。
    • dnscmd /WriteBackNames: 将动态更新的记录写回 zone 文件。

2 区域级操作

这些命令用于管理 DNS 区域(正向查找、反向查找)。

  • 创建区域

    dnscmd命令如何使用?-图3
    (图片来源网络,侵删)
    • 创建正向查找区域:

      dnscmd /ZoneAdd example.com /Primary
      • /Primary: 创建一个主要区域。
      • /Secondary: 创建一个辅助区域。
      • /Stub: 创建一个存根区域。
    • 创建反向查找区域:

      dnscmd /ZoneAdd 1.168.192.in-addr.arpa /Primary
  • 删除区域

    • dnscmd /ZoneDelete example.com /f (/f 表示强制,无需确认)
  • 枚举/列出区域

    • dnscmd /EnumZones: 列出服务器上所有的区域。
  • 配置区域属性

    • 允许/禁用动态更新:
      dnscmd /ZoneResetSecureUpdates example.com # 启用安全动态更新(推荐)
      dnscmd /ZoneResetUpdates example.com /NonSecureAndSecure # 允许非安全更新(不安全)
  • 区域传输

    • 添加辅助服务器的 IP 地址:
      dnscmd /ZoneAddSecondary example.com 192.168.1.100
    • 允许区域传输到所有服务器:
      dnscmd /ZoneResetSecondaries example.com /NonSecureNotify 192.168.1.100

3 记录级操作

这是最常用的部分,用于添加、修改和删除 DNS 记录。

  • 添加记录

    • 添加 A 记录 (主机名到 IP 地址):
      dnscmd /RecordAdd example.com www 192.168.1.10
    • 添加 AAAA 记录 (主机名到 IPv6 地址):
      dnscmd /RecordAdd example.com server1 2001:db8::1
    • 添加 CNAME 记录 (别名):
      dnscmd /RecordAdd example.com webmail CNAME mail.example.com
    • 添加 MX 记录 (邮件交换器):
      dnscmd /RecordAdd example.com MX 10 mail.example.com
      • 10 是优先级值。
    • 添加 PTR 记录 (反向记录):
      dnscmd /RecordAdd 1.168.192.in-addr.arpa 10 PTR server1.example.com
  • 删除记录

    • dnscmd /RecordDelete example.com www A /f
  • 枚举/列出记录

    • dnscmd /EnumRecords example.com @: 列出区域根( 代表区域本身)的所有记录。
    • dnscmd /EnumRecords example.com www: 列出 www 主机的所有记录。

4 高级和调试操作

  • 调试日志

    • 启用日志记录,并将日志写入 C:\dns.log
      dnscmd /Config /LogLevel 7
      dnscmd /Config /LogFilePath C:\dns.log
      dnscmd /Config /LogFilePath C:\dns.log
    • 禁用日志记录:
      dnscmd /Config /LogLevel 0
  • 验证区域

    • dnscmd /ZoneValidate example.com: 验证区域的配置和完整性。

实际应用场景

批量添加 A 记录

假设你需要为 example.com 区域内的 100 台服务器添加 A 记录,可以使用 for 循环脚本:

@echo off
set zone=example.com
set prefix=server
for /l %%i in (1,1,100) do (
    set ip=192.168.1.%%i
    echo Adding %prefix%%%i.%zone% with IP %ip%
    dnscmd /RecordAdd %zone% %prefix%%%i %ip%
)
echo All records added.

检查并清理过期的记录

这个脚本会检查一个主机是否存在,如果不存在则删除其 A 记录(这是一个简化的例子,实际生产中需要更复杂的逻辑)。

@echo off
set zone=example.com
set host=old-server
REM 检查主机是否存在(简单方法:尝试枚举记录,如果出错则可能不存在)
dnscmd /EnumRecords %zone% %host% > nul 2>&1
if %errorlevel% neq 0 (
    echo Host %host% not found, deleting record...
    dnscmd /RecordDelete %zone% %host% A /f
) else (
    echo Host %host% exists. No action needed.
)

重要注意事项

  1. 脚本化: dnscmd 的最大价值在于脚本化,你可以将其与 Windows 任务计划程序结合,实现自动化的 DNS 管理。
  2. 错误处理: 在脚本中使用 if %errorlevel% neq 0 来检查命令是否执行成功,这对于健壮的脚本至关重要。
  3. 安全性: 对于生产环境,始终推荐使用 安全动态更新 (/ZoneResetSecureUpdates),这样可以防止恶意客户端随意添加或修改 DNS 记录。
  4. 备份: 在对 DNS 服务器进行重大更改(如修改区域属性、删除大量记录)前,务必备份 DNS 数据,可以使用 dnscmd /Export 命令。
    dnscmd /Export example.com C:\backup\example.com.dns
  5. 替代工具: 对于 Windows Server 2025 及更高版本,微软推荐使用 PowerShell 的 DnsServer 模块(Get-Command -Module DnsServer),它提供了更现代、更强大的功能,并且与 PowerShell 的其他功能(如管道、对象处理)集成得更好。dnscmd 仍然可用,但 PowerShell 已成为首选。

希望这份详细的指南能帮助你全面了解和使用 dnscmd 命令!

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