Windows server 2022 常见 备份事项 dnscmd.exe 是一个强大的工具,适用于需要通过命令行对 DNS 服务器进行管理和配置的情况。使用它可以实现对 DNS 服务器灵活的管理和自动化操作。
dnscmd.exe 完整拆解解构
基础定位
dns.exe);仅能管理Microsoft DNS Server,不能直接管控 BIND、PowerDNS。
dns.exe 通信,并非直接操作 DNS 区域文件。区分概念:
dnscmd.exe:管理客户端(命令行工具)dns.exe:DNS 服务器服务进程(承载 DNS 解析、区域存储、动态更新 DDNS)- MS-DNSP:Microsoft DNS Server RPC Protocol,dnscmd 底层依赖协议
一、底层原理拆解
1.1 通信模型
dnscmd.exe
↓ MS-DNSP RPC(TCP 135 + RPC动态端口 / 命名管道可选)
dns.exe (DNS Server Service)
↓ 内部访问区域存储(AD集成区域 / 文件区域)
- dnscmd 本身不实现 DNS 解析协议(UDP53/TCP53);它只做管理控制。
- 所有增删记录、区域配置、服务器参数修改,全部封装为 MS-DNSP RPC 请求 发给
dns.exe。 - DNS 服务器执行操作后,将结果通过 RPC 返回 dnscmd,控制台输出。
1.2 两大区域存储模式底层差异
模式 A:标准文件区域(非 AD 集成)
- 区域文件路径:
%windir%\System32\dns\*.dns - dnscmd 下发指令 → dns.exe 修改本地区域文本文件
模式 B:AD 集成区域(Active Directory Integrated Zone)
- 数据存放于 AD 分区:
DomainDnsZones/ForestDnsZones(ntds.dit) - dnscmd 下发指令 → dns.exe 调用 DNS AD 存储提供程序,通过 LDAP 写入 ntds.dit
- 依靠 AD 复制同步区域数据,不再依靠区域文件传输
1.3 典型动作执行原理示例
dnscmd DC01 /recordadd contoso.com www A 192.168.1.100- dnscmd 解析命令行参数(区域名、记录类型、RR 数据)
- 建立到目标 DNS 服务器的 MS-DNSP RPC 会话
- 封装资源记录写入 RPC 请求发送至
dns.exe - dns.exe 判断区域类型:
- 文件区域 → 修改
.dns区域文件; - AD 集成区域 → 通过 LDAP 写入对应 DNS 应用程序分区。
- 文件区域 → 修改
- dns.exe 更新内存 DNS 缓存;向 dnscmd 返回执行状态码。
- dnscmd 打印成功 / 失败信息。
1.4 MS-DNSP RPC 关键能力(dnscmd 全部依托这套接口)
- 服务器全局配置(转发器、递归、侦听地址、EDNS0)
- 区域生命周期:创建 / 删除 / 暂停 / 启动区域
- 资源记录 RR:Add / Delete / Update / Enum 记录
- 区域传输配置(AXFR/IXFR、通知列表)
- 老化与清理(Scavenging、无记录刷新间隔)
- 数据库重新加载、重置 DNS 服务状态
二、依赖文件清单
2.1 核心程序与模块
| 文件路径 | 功能说明 |
|---|---|
%SystemRoot%\System32\dnscmd.exe |
主程序,命令行入口 |
dnsrpc.dll |
MS-DNSP RPC 客户端存根,dnscmd 核心依赖;封装 DNS RPC 调用 |
rpcrt4.dll |
Windows RPC 运行时,RPC 封包、传输、会话管理 |
dnsapi.dll |
DNS 客户端 API(辅助名称解析,用于定位 DNS 服务器名称) |
2.2 DNS 服务端配套文件(目标服务器侧)
| 文件 | 作用 |
|---|---|
dns.exe |
DNS 服务器服务进程 |
dnsrslvr.dll |
DNS 服务核心逻辑库 |
dnsadmn.dll |
AD 集成区域 LDAP 交互模块 |
dnssnap.dll |
DNS 管理控制台(dnsmgmt.msc),与 dnscmd 共享同一套 MS-DNSP RPC 接口 |
2.3 AD 集成场景额外依赖
ntdsapi.dll:dns.exe 访问 AD 分区ldap32.dll:LDAP 通信secur32.dll:RPC 身份认证(Kerberos/NTLM)
2.4 关键注册表路径
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
# 区域定义、老化、转发器、递归配置
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones
# AD集成区域存储分区配置
三、依赖关系梳理
3.1 上游调用方(谁使用 dnscmd)
- 自动化脚本(Batch/PowerShell)批量维护 DNS 记录
- 运维变更流程、CI/CD 自动化
- AD 部署脚本、DC 后配置脚本
- 第三方运维平台调用命令行接口
3.2 平层协同组件
- dnsmgmt.msc(DNS 图形控制台)
和 dnscmd 同源:均调用
dnsrpc.dll发起 MS-DNSP RPC;图形界面只是前端封装。 - AD 域控(ntds.dit)
AD 集成 DNS 区域,记录最终存入 AD 分区,依靠 AD 复制同步。
- Netlogon / NRPC
远程管理其他服务器 DNS 时,RPC 认证依赖机器安全通道。
- DNS 客户端 API (
dnsapi.dll)仅用于解析 DNS 服务器主机名,不参与资源记录管理。
3.3 底层依赖
端口要点:远程执行 dnscmd 操作远端 DNS 服务器,需要开放 TCP 135 + RPC 动态端口;仅本地执行 dnscmd(目标本机 DNS)使用本地 RPC,无需外网端口。
四、标准逻辑链路
链路 1:本地管理本机 DNS 服务器
管理员执行 dnscmd /recordadd
↓
dnscmd.exe → dnsrpc.dll 构造MS-DNSP RPC请求
↓
本地RPC传输(LPC,本地进程间通信,不走网络)
↓
dns.exe 接收请求
↓
写入区域存储(文件 / AD分区)
↓
结果原路RPC返回 → dnscmd打印输出
链路 2:远程管理另一台 DC 上的 DNS 服务
dnscmd DC02 /recordadd contoso.com www A 192.168.1.100
↓
dnscmd → dnsrpc.dll → rpcrt4.dll
↓
TCP135连接远端DC02 RPC端点映射器
↓
协商RPC动态端口,建立MS-DNSP会话
↓
Kerberos/NTLM RPC身份认证(使用当前登录凭据)
↓
RPC指令送达远端 dns.exe
↓
远端dns.exe修改区域
↓
执行结果沿RPC链路返回客户端dnscmd
链路 3:典型断链故障路径
- RPC 端口不通 → dnscmd 报 RPC 服务器不可用
- 权限不足(管理员缺失)→ RPC 访问被拒绝
- DNS 服务
dns.exe未启动 → 连接失败 - AD 集成区域 DC 复制异常 → 修改记录后无法同步至其他 DNS DC
- 区域被冻结 / 暂停 → dnscmd 写入记录返回错误
五、配套链(工具、边界、运维、关联技术)
5.1 配套工具
dnsmgmt.msc:图形管理控制台(同 RPC 后端)- PowerShell DnsServer Module(
Add-DnsServerResourceRecord)PowerShell DNS 模块底层依然封装 MS-DNSP RPC,现代替代 dnscmd 首选 - Wireshark:过滤
MS_DNSP捕获 DNS 管理 RPC 流量 nslookup/Resolve-DnsName:纯 DNS 解析工具,和 dnscmd 完全无关重点区分:nslookup 走 UDP53 DNS 协议;dnscmd 走 RPC 管理协议。
5.2 技术边界(极易混淆)
| 对象 | 使用协议 | 用途 |
|---|---|---|
| dnscmd.exe | MS-DNSP RPC | DNS 服务器配置、记录管理 |
| nslookup | DNS(UDP53) | DNS 域名解析查询 |
| dns.exe | DNS 协议 + MS-DNSP | DNS 服务进程;同时对外提供解析、对内接收 RPC 管理 |
| DDNS 动态更新 | DNS 协议(TSIG/GSS-TSIG) | 客户端自动注册 A/AAAA 记录,不走 dnscmd |
5.3 AD 场景配套联动
- DC 安装 DNS 角色,默认创建 AD 集成区域;dnscmd 写入记录最终落盘 ntds.dit
- 清理过期 DNS 记录:dnscmd 配置老化(Scavenging),由 dns.exe 后台自动清理
- 快照回滚 DC 附带风险:AD-DNS 区域跟随 ntds.dit 回滚,造成 DNS 记录老旧冲突
5.4 权限模型
- DNSAdmins 组 / Domain Admins
- RPC 访问权限 + DNS 服务命名空间权限
5.5 迁移与淘汰说明
六、高频故障现象(断链特征)
RPC server unavailable:防火墙拦截 RPC 端口、远端 dns.exe 未启动- Access denied:缺少 DNSAdmins 管理员权限
- 无法修改 AD 集成区域:DC AD 复制故障、分区不可写
- 添加记录成功,但其他 DNS 服务器看不到:AD 复制延迟 / 中断
- dnscmd 执行成功,但解析不生效:DNS 服务器内存缓存未刷新(可执行
dnscmd /clearcache)
七、极简核心总结
- dnscmd.exe 是MS-DNSP RPC 客户端,不使用 53 端口 DNS 协议,仅用于管理 Microsoft DNS 服务进程 dns.exe;
- 管理分为本地 LPC 方式与远程 RPC 网络方式,远程依赖 TCP135 与动态 RPC 端口;
- AD 集成区域下,所有记录修改最终写入 AD 应用分区,由 AD 复制同步;文件区域读写
.dns文本文件; - dnscmd 与 dnsmgmt.msc 共用同一套 RPC 接口;现代环境推荐替换为 PowerShell DnsServer 模块;
- 区分关键:dnscmd = 管理工具;nslookup = 查询工具,二者协议、用途完全隔离。
dns.exe(Windows DNS Server Service)完整拆解解构
定位:dns.exe是 Windows Server DNS 服务器角色核心宿主进程,服务名称:DNS Server,运行身份LocalSystem。区分极易混淆组件:
dns.exe:权威 DNS 服务进程,监听 UDP/TCP 53;- Dnscache(svchost 托管):客户端 DNS 缓存服务,桌面系统默认启用;
dnscmd.exe:MS-DNSP RPC 管理客户端,不参与 DNS 报文收发;协议基准:RFC1034/1035、RFC2136 动态更新、RFC3645 GSS-TSIG、MS-DNSP(DNS 管理 RPC 协议)。
一、底层原理拆解
1.1 整体分层架构
外部网络客户端
↓ UDP53 / TCP53(标准DNS报文)
dns.exe(主线程+工作线程池)
├─ DNS协议解析引擎(查询、动态更新DDNS、区域传输AXFR/IXFR、NOTIFY)
├─ MS-DNSP RPC服务端点(接收dnscmd、dnsmgmt.msc、PowerShell DnsServer模块管理指令)
├─ 内存子系统
│ ├─ 权威区域内存数据库
│ └─ 递归解析缓存(Resolver Cache)
├─ 存储适配器
│ ├─ 文件适配器:读写 %windir%\System32\dns\*.dns
│ └─ AD适配器(dnsadmn.dll):LDAP读写ntds.dit(AD集成区域)
├─ 后台任务线程
│ ├─ 老化清理Scavenging
│ ├─ 区域通知NOTIFY、辅助区域同步
│ └─ DNS调试日志写入
↓底层
TCP/IP协议栈(tcpip.sys)、RPC运行时、LSA安全子系统(GSS-TSIG鉴权)
1.2 DNS 查询标准处理流水线(核心原理)
- 查询本地权威区域
命中 → 返回权威应答(AA=1);
- 未命中权威区域 → 查询服务器递归缓存;
命中 → 返回缓存应答;
- 缓存无记录
- 启用转发器:将请求转发至上游 DNS;
- 未启用转发器:使用根提示执行递归迭代查询;
- 获取结果写入本地缓存(遵循 TTL),应答客户端。
关键:递归由 dns.exe 主动代查;迭代仅返回下级服务器引用,不主动查询。
1.3 两大存储模式底层实现
模式 A:标准主 / 辅助区域(文件存储)
- 区域持久化文件:
%SystemRoot%\System32\dns\区域名.dns - dns.exe 启动加载文件到内存;修改记录直接改写本地文本;
- 辅助区域依靠 AXFR/IXFR 从主服务器拉取副本,只读。
模式 B:AD 集成区域(AD DS 深度绑定,域控标配)
- 数据不落地 dns 文本文件,存放于 AD 应用分区:
DomainDnsZones(域内复制)ForestDnsZones(林内复制)
- dns.exe 通过
dnsadmn.dll+ LDAP 读写 ntds.dit; - 多主复制模型:任意 DC 均可写入 DNS 记录,依靠 AD 复制同步所有域控;
风险:域控快照回滚(ntds.dit 回退)会连带 DNS 区域数据回滚,产生陈旧记录、复制冲突。
1.4 动态更新 DDNS(RFC2136 + GSS-TSIG)原理
- 客户端(工作站 /netlogon)携带 Kerberos 票据发起 DNS Update 报文;
- dns.exe 调用 LSA 校验 GSS-TSIG 签名;
- 校验通过 → 写入区域;
- AD 集成区域直接写入 ntds.dit;文件区域写入 dns 文件;
- 记录打上时间戳 Timestamp,作为老化清理依据;
静态手工记录时间戳 = 0,默认不会被 Scavenging 清理。
1.5 老化与清理(Aging & Scavenging)内部机制
- 两段时间窗口:
NoRefreshInterval+RefreshInterval - NoRefresh 阶段:禁止客户端单纯刷新(仅允许修改 IP 等实质更新,减少 AD 复制流量)
- Refresh 阶段:允许客户端刷新时间戳;
- 超过两个周期 → 标记为陈旧记录 (Stale);
- dns.exe 后台周期任务扫描,批量删除陈旧记录;
三个开关必须同时开启才生效:服务器全局清理开关、区域清理开关、记录允许老化。
1.6 MS-DNSP RPC 管理通道(对接 dnscmd、图形控制台)
- 新增 / 删除资源记录、区域配置、转发器、缓存清理;
- RPC 通道与 DNS 查询通道完全隔离:
- DNS 业务:UDP/TCP 53(标准 DNS 协议)
- 管理业务:MS-DNSP RPC(TCP135 + 动态 RPC 端口 / LPC 本地调用)
二、依赖文件清单
2.1 核心主模块
| 文件路径 | 功能说明 |
|---|---|
%windir%\System32\dns.exe |
DNS 服务宿主进程 |
dnsrslvr.dll |
DNS 服务核心逻辑库,协议解析、缓存、查询引擎 |
dnsadmn.dll |
AD 集成区域适配器,LDAP 读写 AD 分区 |
dnsrpc.dll |
MS-DNSP RPC 服务端存根(与 dnscmd 使用同一套 RPC 接口定义) |
rpcrt4.dll |
Windows RPC 运行时,支撑 MS-DNSP 通信 |
2.2 安全与网络依赖库
| 文件 | 作用 |
|---|---|
secur32.dll |
SSPI、GSS-TSIG、Kerberos 身份校验 |
dnsapi.dll |
DNS 客户端 API(服务内部辅助名称解析) |
crypt32.dll |
DNSSEC、签名校验加密原语 |
ntdsapi.dll |
DC 上访问 AD 数据库依赖 |
2.3 配套静态文件(文件区域存放目录)
%windir%\System32\dns\cache.dns:根提示文件*.dns:标准文件区域文件backup\:区域导出备份目录
2.4 关键注册表配置
# DNS服务根配置
HKLM\SYSTEM\CurrentControlSet\Services\DNS
# 运行参数、转发器、递归、调试日志、老化全局配置
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
# AD集成区域分区映射
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones
三、依赖关系梳理
3.1 上游调用方(谁与 dns.exe 交互)
- DNS 客户端(PC、服务器、nslookup、Resolve-DnsName):UDP/TCP53 标准 DNS 查询
- 管理工具
dnscmd.exe:MS-DNSP RPC 客户端dnsmgmt.msc(DNS 管理器 MMC):同样调用 dnsrpc.dll 发起 RPC- PowerShell DnsServer 模块:底层封装 MS-DNSP
- 域内客户端 Netlogon:DDNS 动态注册 A/AAAA/SRV 记录
- DHCP 服务器:代客户端执行 DNS 动态更新
3.2 平层协同组件(AD 域环境重点)
- AD DS(ntds.dit)
AD 集成区域存储载体;AD 复制同步 DNS 记录;AD 复制故障直接导致 DNS 记录不同步。
- lsass.exe
提供 GSS-TSIG 鉴权、Kerberos 票据校验;动态更新安全认证依赖 LSA。
- Netlogon + NRPC
DC 开机自动注册 SRV 记录依靠 Netlogon 向本地 dns.exe 执行 DDNS。
- DNS Client(Dnscache)
二者无直接依赖:dns.exe 是服务端;Dnscache 是本机客户端缓存。
3.3 底层依赖
四、四大标准逻辑链路
链路 1:普通客户端域名查询(最常用)
客户端 → UDP53 → dns.exe
dns.exe:查询权威区域 → 查询内存缓存 → 转发/根提示递归查询
写入缓存 → 应答报文原路返回客户端
链路 2:dnscmd 远程添加 DNS 记录(MS-DNSP RPC 链路,承接上文 dnscmd)
管理员执行 dnscmd DC01 /recordadd
dnscmd.exe → dnsrpc.dll → RPC运行时
TCP135 + RPC动态端口 → 远端dns.exe MS-DNSP RPC端点
dns.exe接收指令
├─文件区域:修改 *.dns 文件
└─AD集成区域:dnsadmn.dll → LDAP写入ntds.dit
更新内存权威数据库 → RPC返回执行结果
链路 3:Windows 客户端开机 DDNS 安全动态更新
客户端Netlogon → UDP53 DNS Update报文(携带Kerberos GSS-TSIG签名)
→ dns.exe
dns.exe调用secur32/lsass校验签名
校验通过 → 写入区域,打上时间戳
链路 4:典型故障断链路径
- 防火墙拦截 UDP53 → 客户端无法解析;
- RPC 端口不通 → dnscmd 报
RPC服务器不可用; - AD 复制中断 → AD 集成区域记录修改后无法同步其他 DC;
- GSS-TSIG 鉴权失败(机器账户密码不一致,DC 快照回滚高发)→ DDNS 更新全部拒绝;
- 未开启清理,大量陈旧 DDNS 记录堆积,解析异常;
- dns.exe 缓存未刷新:新增记录后,外部查询仍返回旧缓存 → 需要
dnscmd /clearcache。
五、配套链(运维工具、边界区分、安全、故障体系)
5.1 配套运维工具链
dnsmgmt.msc:图形控制台(同源 MS-DNSP RPC)dnscmd.exe:传统命令行管理工具- PowerShell
DnsServer模块:现代推荐替代方案 nslookup/Resolve-DnsName:DNS 查询客户端(走 53 端口,不操作 dns.exe 配置)- Wireshark 抓包过滤:
dns(业务流量)、rpc && ms_dnsp(管理流量) - DNS 调试日志:注册表开启
Loglevel,由 dns.exe 输出详细报文日志
5.2 技术边界(极易混淆,运维高频踩坑)
| 对象 | 使用端口 / 协议 | 角色 |
|---|---|---|
| dns.exe | UDP/TCP53(DNS) + TCP135 RPC(MS-DNSP) | DNS 权威服务进程 |
| dnscmd.exe | MS-DNSP RPC | 管理客户端,不产生 DNS 查询报文 |
| Dnscache(Svchost) | 调用 dnsapi.dll | 本机客户端缓存,不监听 53 端口 |
| Netlogon | NRPC、DNS 动态更新 | 负责 SRV 自动注册、机器安全通道 |
5.3 安全攻击面与加固配套
- 关闭非安全动态更新,仅保留 GSS-TSIG 安全更新;
- 限制区域传输 AXFR/IXFR,启用 IP 白名单;
- 禁用递归(仅内网权威服务器场景);
- 监控 dns.exe 模块注入、异常进程终止;
- 限制 MS-DNSP RPC 访问权限,仅允许 DNSAdmins 组远程管理。
5.4 和前文 AD 域技术联动(承接域控快照、NRPC、lsass)
DC 执行快照回滚(ntds.dit 回退)连锁故障:
- AD 集成 DNS 区域跟随回滚,产生大量过期记录;
- DC 机器账户密码不一致 → NRPC 安全通道 5723 报错;
- GSS-TSIG 鉴权失败 → DDNS 更新全部失败;
- 多 DC 之间 DNS 记录冲突,AD 复制报错。
六、高频故障现象汇总
- 客户端无法解析:防火墙拦截 53、dns.exe 服务未启动、区域记录缺失;
- dnscmd 执行报错:RPC 端口不通、权限不足、dns.exe 崩溃;
- 记录添加成功,但其他 DC 看不到:AD 复制中断;
- 客户端 DDNS 注册失败:GSS-TSIG 鉴权失败、区域未启用安全更新;
- 解析持续返回旧 IP:dns.exe 递归缓存未刷新;
- dns.exe 内存持续上涨:长期开启调试日志、大量递归查询未限制。
七、极简核心总结
dns.exe= Windows 权威 DNS 服务进程,同时承载DNS 协议业务(53 端口) + MS-DNSP RPC 管理接口;- 区域两套存储:文件
.dns(独立服务器)、AD 分区 ntds.dit(域控 AD 集成,多主复制); - 域环境 DDNS 依靠 GSS-TSIG+Kerberos,鉴权链路依赖 lsass 安全子系统;
- dnscmd、DNS 管理器仅通过 RPC 下发指令,不直接读写区域文件 / AD 数据库;
- AD 集成 DNS 深度绑定 AD,域控快照回滚会同步污染 DNS 区域,属于重大运维风险点。
Dnscache(DNS Client,svchost 托管)完整拆解解构
svchost.exe -k NetworkService -p -s Dnscache
NT AUTHORITY\NetworkService
极易混淆边界区分
Dnscache(DNS Client):客户端缓存解析器,不监听 53 端口;dns.exe:Windows DNS Server 服务(权威服务,监听 UDP/TCP 53);dnscmd.exe:DNS 服务 RPC 管理工具;nslookup:独立 DNS 查询程序,默认绕过 Dnscache。
一、底层原理拆解
1.1 整体分层架构
应用程序(浏览器、powershell、ping、winsock getaddrinfo)
↓ Win32 DNS API(dnsapi.dll)
svchost.exe(承载Dnscache)
└─ dnsrslvr.dll(Dnscache核心实现)
├─ hosts文件加载器(服务启动载入内存)
├─ 内存哈希缓存表(正向记录、负向记录)
├─ NRPT策略引擎(名称解析策略表)
├─ 多网卡DNS适配器调度
├─ DNS查询发包引擎(UDP/TCP 53)
├─ 老化淘汰定时器(TTL清理缓存条目)
└─ RPC服务端点(接收ipconfig /flushdns、查询缓存指令)
↓
TCP/IP协议栈(tcpip.sys) → 网络 → 上游DNS服务器
1.2 标准域名解析流水线(优先级顺序)
- 应用调用
getaddrinfo/DnsQuery_A→dnsapi.dll将请求通过 LPC/RPC 发送 Dnscache; - Dnscache 优先检索内存 hosts 映射表(启动一次性加载,修改 hosts 默认不自动重载);
- hosts 未命中 → 查询内存 DNS 缓存;
- 命中且未过期 → 直接返回 IP;
- 缓存未命中 → 根据网卡配置 DNS 服务器,向外发送 UDP53 DNS 查询;
- 接收上游 DNS 应答:
- 正向应答:写入内存缓存(TTL 受控),返回应用;
- NXDOMAIN 不存在域名:写入负缓存 (Negative Cache),默认缓存 5 分钟;
- 返回解析结果至上层应用。
关键特性:缓存全部驻留内存,不落地磁盘;重启 Dnscache 服务缓存全部清空。
1.3 缓存两大类型机制
- 正向缓存(资源记录 A/AAAA/CNAME 等)
遵循 DNS 应答 TTL;受注册表
MaxCacheEntryTtlLimit上限约束(默认 86400s=1 天); - 负向缓存(NXDOMAIN、查询失败)
参数
NegativeCacheTime默认 300 秒;作用:短时间内不再重复查询不存在域名,减少网络流量;调试场景常设置为 0 关闭负缓存。
1.4 NRPT(名称解析策略表)内置引擎
- 匹配域名规则,强制指定 DNS 服务器、启用 DNSSEC、IPsec 加密 DNS 通信;
- 域环境 DirectAccess、企业拆分 DNS (Split DNS) 依赖 Dnscache NRPT 实现。
1.5 与 DDNS 动态更新协同逻辑
1.6 重要特殊行为
nslookup:直接调用 dnsapi 底层原始查询,绕过 Dnscache 缓存;查询结果不会写入本机缓存;ping、Resolve-DnsName、浏览器:走标准路径,使用 Dnscache;- 修改 hosts 文件后,不会自动刷新,必须执行
ipconfig /flushdns重载 hosts 内存映射。
二、依赖文件清单
2.1 核心模块
| 文件路径 | 功能说明 |
|---|---|
%SystemRoot%\System32\dnsrslvr.dll |
Dnscache 服务主体实现,嵌入 svchost |
dnsapi.dll |
Win32 DNS 客户端 API,应用程序调用入口 |
rpcrt4.dll |
RPC 运行时,本机进程间通信(LPC) |
iphlpapi.dll |
网络适配器信息读取、FlushResolverCache 接口 |
secur32.dll |
GSS-TSIG 安全动态更新身份支撑 |
2.2 静态配置文件
%SystemRoot%\System32\drivers\etc\hosts:静态域名映射,服务启动加载入内存
2.3 关键注册表路径
# Dnscache服务本体定义
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache
# 缓存策略参数(新建DWORD生效)
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
MaxCacheEntryTtlLimit ; 正向记录最大缓存TTL,默认86400
NegativeCacheTime ; NXDOMAIN负缓存时长,默认300秒
MaxNegativeCacheTtl
EnableDNSPrefetch ; DNS预取优化
2.4 服务依赖链
Dnscache
├─ Tcpip(TCP/IP协议栈)
├─ Dhcp(DHCP客户端,获取DNS服务器地址)
└─ RPC(RPC Endpoint Mapper)
三、依赖关系梳理
3.1 上游调用方(谁依赖 Dnscache)
- Winsock 应用:浏览器、ping、远程桌面、文件共享;
- Netlogon:域环境 DDNS 动态注册;
- 组策略客户端、SCCM、域内身份认证组件;
- PowerShell
Resolve-DnsName、ipconfig、WMI 网络查询。
3.2 平层协同组件
- dns.exe(Windows DNS Server)
Dnscache 作为普通客户端向 53 端口发起查询;二者无内置进程依赖;一台服务器可同时开启;
- Netlogon / NRPC
机器 SRV 记录注册依靠 Dnscache 转发 DNS Update;
- lsass.exe
安全动态更新 GSS-TSIG Kerberos 票据校验依赖 LSA;
- DHCP Client:获取网卡 DNS 服务器列表,推送至 Dnscache。
3.3 底层依赖
四、标准逻辑链路
链路 1:普通应用域名解析完整链路
浏览器/ping → getaddrinfo → dnsapi.dll
↓RPC/LPC
svchost(Dnscache+dnsrslvr.dll)
1.查询内存hosts表 → 命中直接返回
2.hosts未命中 → 查询内存DNS缓存
3.缓存未命中 → 组装UDP53 DNS报文,发送至网卡配置DNS服务器
4.接收应答,写入缓存
5.解析结果原路返回应用
链路 2:ipconfig /flushdns 执行链路
ipconfig.exe → iphlpapi.dll → FlushResolverCache()
↓RPC调用Dnscache
dnsrslvr.dll清空内存DNS缓存,并重新加载hosts文件映射
链路 3:典型故障断链路径
- Dnscache 停止 / 禁用 → 无系统全局缓存;每次解析直接发包;hosts 文件依然生效(dnsapi 直接读取 hosts,不依赖服务);
- hosts 修改但未执行 flushdns → Dnscache 依旧使用旧内存 hosts 映射;
- 负缓存生效:域名曾经不存在,短期内持续返回 NXDOMAIN;
- NRPT 策略配置错误 → 域名被强制转发至错误 DNS;
- 多网卡网卡优先级混乱 → Dnscache 选取错误网卡 DNS 服务器。
五、配套链(工具、边界、运维、故障)
5.1 配套运维工具
# 查看本机DNS缓存
ipconfig /displaydns
# 清空缓存+重载hosts
ipconfig /flushdns
# PowerShell
Clear-DnsClientCache
Get-DnsClientCache
# 服务控制
net stop dnscache
net start dnscache
sc query dnscache
dns,观察 Dnscache 向外发起的 53 端口查询。5.2 关键技术边界对照表
| 对象 | 端口 | 角色 | 是否使用 Dnscache |
|---|---|---|---|
| Dnscache(DNS Client) | 客户端随机端口→53 | 本机解析缓存器 | — |
| dns.exe | UDP/TCP 53(监听) | 权威 DNS 服务端 | 否 |
| nslookup | UDP53 | DNS 查询工具 | ❌绕过 Dnscache |
| ping / Resolve-DnsName | Winsock 调用 | 系统标准解析 | ✅使用 Dnscache |
5.3 禁用 Dnscache 影响清单(运维红线)
ipconfig /displaydns、ipconfig /flushdns失效;
不建议在域控制器、企业服务器上禁用 Dnscache。
5.4 常见故障现象
- 修改 hosts 不生效:未执行
ipconfig /flushdns; - 域名已经上线,本机依旧返回不存在:负缓存 NXDOMAIN;
- 部分内网域名解析异常:NRPT 策略冲突;
- Dnscache 高 CPU:恶意程序高频大量域名查询、网卡驱动异常;
- 域主机无法自动注册 A 记录:Dnscache 异常导致 DDNS 更新失败。
六、极简核心总结
- Dnscache =
svchost托管、dnsrslvr.dll实现的Windows 本机 DNS 解析缓存服务,不监听 53 端口; - 解析顺序:内存 hosts 映射 → 内存 DNS 缓存 → 向外 UDP53 查询上游 DNS;
- 所有缓存驻留内存,重启服务全部丢失;hosts 启动载入,修改后必须刷新缓存;
- nslookup 绕过 Dnscache,是调试时极易踩坑点;
- 承载 NRPT 策略、DDNS 动态更新转发,域环境网络基础组件,不建议随意禁用。
dnscmd 常用命令速查表 + DNS RPC 远程管理故障排查 SOP
适用:Windows Server DNS(AD 集成区域 / 标准文件区域)说明:dnscmd 依赖 MS-DNSP RPC,远程管理需开放 RPC 端口;WinServer2012 + 推荐 PowerShell DnsServer 模块作为替代。
一、dnscmd 常用命令速查表
dnscmd [DNS服务器名/IP] [操作参数]
# 本地操作可省略服务器名称;远程填写DC/DNS主机名,例:dnscmd DC01.contoso.com
1. 服务器全局操作
# 查看DNS服务器全局配置
dnscmd /info
# 清除服务器缓存(重要!新增记录不生效时执行)
dnscmd /clearcache
# 重置DNS服务(不重启进程,重载区域)
dnscmd /resetlistenaddresses
# 设置转发器
dnscmd /serverforwarders 8.8.8.8,114.114.114.114
# 启用/禁用递归查询
dnscmd /config /Recursion 1
dnscmd /config /Recursion 0
# 开启DNS老化清理全局开关
dnscmd /config /ScavengingInterval 168
2. 区域管理(Zone)
# 列出所有区域
dnscmd /enumzones
# 创建AD集成正向区域
dnscmd /zoneadd contoso.com /dsprimary
# 创建标准主要区域(文件区域)
dnscmd /zoneadd test.com /primary /file test.com.dns
# 暂停区域 / 启动区域
dnscmd /zonepause contoso.com
dnscmd /zoneresume contoso.com
# 删除区域(谨慎!)
dnscmd /zonedelete contoso.com /dsdel
# /dsdel 代表AD集成区域同时删除AD分区数据
# 重载区域文件
dnscmd /zonereload contoso.com
# 查询区域配置
dnscmd /zoneinfo contoso.com
3. DNS 资源记录增删改查(最常用)
# 添加A记录
dnscmd /recordadd contoso.com www A 192.168.1.100
# 添加CNAME
dnscmd /recordadd contoso.com web CNAME www.contoso.com.
# 添加PTR反向记录(反向区域 1.1.168.in-addr.arpa)
dnscmd /recordadd 1.1.168.in-addr.arpa 100 PTR www.contoso.com.
# 添加MX记录
dnscmd /recordadd contoso.com @ MX 10 mail.contoso.com.
# 添加TXT记录
dnscmd /recordadd contoso.com _dmarc TXT "v=DMARC1;p=none"
# 删除记录
dnscmd /recorddelete contoso.com www A 192.168.1.100
# /f 强制删除,不弹出确认
dnscmd /recorddelete contoso.com www A 192.168.1.100 /f
# 枚举区域所有记录
dnscmd /enumrecords contoso.com @
4. 老化与清理(Scavenging,AD-DNS 核心运维)
# 设置区域无刷新间隔、刷新间隔(单位:小时)
dnscmd /zoneinfo contoso.com
dnscmd /config contoso.com /NoRefreshInterval 168
dnscmd /config contoso.com /RefreshInterval 168
# 手动触发一次区域清理(清理过期DDNS记录)
dnscmd /scavengestalerecords
5. 区域传输、通知配置
# 允许区域传输列表
dnscmd /config contoso.com /AllowZoneTransfers 2
# 0=禁止,1=所有服务器,2=仅通知列表,3=指定服务器
# 设置区域通知服务器
dnscmd /zonenotify contoso.com add 192.168.1.20
6. 导出导入区域备份
# 将区域导出到文件
dnscmd /zoneexport contoso.com C:\dns_backup\contoso.txt
7. 辅助调试
# 启用DNS调试日志(生产慎用,磁盘IO压力大)
dnscmd /config /loglevel 0x00000081
# 关闭日志
dnscmd /config /loglevel 0
重要注意:AD 集成区域使用/recordadd修改后,数据写入 ntds.dit,依靠 AD 复制同步;文件区域修改写入%windir%\System32\dns\*.dns。
二、DNS RPC 远程管理故障排查 SOP
dnscmd DC01.contoso.com /enumzones 报错
RPC server unavailable、Access denied、The DNS server service is not running前置知识
dns.exe
SOP0:信息收集(故障第一步骤)
- 本地执行 dnscmd 本机操作是否正常
cmd
dnscmd /enumzones- 本地正常 → 问题在网络 / RPC / 远程权限
- 本地失败 → 本机 DNS 服务 dns.exe 异常
- 完整报错文本、目标 DNS 服务器主机名 / IP
- 客户端与目标服务器是否同一域、是否跨网段、防火墙策略
SOP1:连通性与端口基础检查
- Ping 目标服务器 IP / 主机名,确认 DNS 解析正常
ping DC01.contoso.com
nslookup DC01.contoso.com
- 测试 TCP 135 端口连通(RPC Endpoint Mapper)
telnet DC01.contoso.com 135
Test-NetConnection DC01.contoso.com -Port 135
远程管理完整端口需求:TCP 135 + RPC 动态端口范围(默认 49152–65535)企业加固方案:可配置 RPC 固定端口,或放行端口区间。
- 目标服务器确认 DNS 服务已启动
sc \\DC01 query dns
dns.exeSOP2:RPC 可用性校验(关键分界点)
wmic /node:DC01.contoso.com service get name
- wmic 同样 RPC 不可用:通用 RPC 故障,不只是 DNS
- wmic 正常,仅 dnscmd 失败:DNS 服务权限、DNSRPC 组件问题
SOP3:身份认证与权限排查(Access denied)
- 当前账号权限校验
必须属于目标服务器:Domain Admins / DNSAdmins / Enterprise Admins
- 测试强制使用 IP 访问(规避 Kerberos 名称解析异常,回退 NTLM)
dnscmd 192.168.1.10 /enumzones
- 检查目标服务器本地安全策略
secpol.msc→ 本地策略 → 用户权限分配【替换进程级令牌】【从网络访问此计算机】 - 远程 RPC 匿名访问限制
HKLM\SYSTEM\CurrentControlSet\Control\Lsa
RestrictRemoteClients策略过严会阻断 RPC 调用
SOP4:DNS 服务端组件与注册表检查
- 确认 DNS 服务依赖完整
sc qc dns
- 检查关键注册表(DNS 参数)
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters
sc stop dns
sc start dns
SOP5:AD 集成场景特有故障(域控 DNS)
- 检查 AD 复制状态
repadmin /showrepl
dcdiag /test:replications
- 验证 DNS 应用分区健康
ntdsutil
domain management
connections
connect to server DC01
list
- 区域类型确认是否为 AD 集成
dnscmd DC01 /zoneinfo contoso.com
SOP6:抓包辅助定位(高级排查)
rpc || ms_dnsp
- TCP 握手 135 是否建立
- RPC 端口映射应答
- MS-DNSP 请求是否发出
- 服务端返回拒绝码:区分权限拒绝 / 服务内部错误
SOP7:临时替代方案(RPC 无法打通应急)
- 登录目标 DC 本地执行 dnscmd
- 使用 PowerShell DnsServer 模块(底层同样 MS-DNSP,但便于远程会话执行)
Add-DnsServerResourceRecordA -Name www -ZoneName contoso.com -IPv4Address 192.168.1.100
三、高频故障根因汇总
RPC server unavailable→ TCP135 拦截 / 远端 dns.exe 未启动 / RPC 服务未运行Access Denied→ 账号不在 DNSAdmins 组、RPC 身份认证失败、LSA 远程访问限制- 命令执行成功,其他 DC 看不到新增记录
→ AD 复制中断、AD-DNS 分区同步延迟
- 添加记录成功,nslookup 无法解析
→ 需要执行
dnscmd /clearcache刷新 DNS 服务器内存缓存
四、运维最佳实践
- 自动化脚本优先迁移至 PowerShell DnsServer 模块,dnscmd 作为兼容备用
- 跨网段远程 DNS 管理,提前放行 TCP135 与 RPC 动态端口
- AD-DNS 定期执行
dnscmd /scavengestalerecords清理过期 DDNS 垃圾记录 - 禁止在生产长期开启 DNS 调试日志,防止磁盘爆满
dnscmd.exe 是 Windows 系统中用于管理 DNS 服务器的命令行工具。它允许管理员通过命令行界面执行各种 DNS 服务器管理任务,如创建和删除 DNS 区域、添加和删除 DNS 记录、配置服务器参数等。
以下是一些 dnscmd.exe 常用的操作和示例:
-
列出所有的 DNS 区域:
Copy Codednscmd.exe /enumzones这个命令将列出当前 DNS 服务器上所有的 DNS 区域。
-
列出特定区域的 DNS 记录:
Copy Codednscmd.exe /zoneprint zone_name这个命令将打印指定 DNS 区域的详细信息,包括所有的 DNS 记录。
-
创建新的 DNS 区域:
Copy Codednscmd.exe /zoneadd zone_name /primary /file zone_file_name这个命令将创建一个新的主 DNS 区域,并指定其相关的区域文件。
-
删除 DNS 区域:
Copy Codednscmd.exe /zonedelete zone_name /f这个命令将删除指定的 DNS 区域。注意使用
/f参数来强制删除。 -
添加 A 记录:
Copy Codednscmd.exe /recordadd zone_name node_name /a /ipv4_address这个命令将在指定的 DNS 区域中为指定的节点添加一个 A 记录。
-
删除 DNS 记录:
Copy Codednscmd.exe /recorddelete zone_name node_name /rrtype [/recorddata] [/f]这个命令将删除指定的 DNS 记录。
-
修改 DNS 服务器属性:
Copy Codednscmd.exe /config /Forwarders [forwarder_list]这个命令将配置 DNS 服务器的转发器列表,用于处理无法解析的 DNS 查询。
-
查看 DNS 服务器的详细信息:
Copy Codednscmd.exe /info这个命令将显示当前 DNS 服务器的详细信息,包括版本、配置和状态。
-
设置和查看缓存参数:
Copy Codednscmd.exe /Cache [add | delete | list] [/name name] [/node node] [/file filename] [/skipnodelookup] [/directory directory] [/statistics]这个命令用于管理 DNS 服务器的缓存参数,可以添加、删除、列出缓存条目,或者显示缓存的统计信息。
-
启用和禁用 DNS 日志:
Copy Codednscmd.exe /Logging level [logfilepath]这个命令可以设置 DNS 服务器的日志级别,并指定日志文件的路径。
-
修改 DNS 服务器的安全设置:
Copy Codednscmd.exe /Security /directory <directory> /protect <flag>这个命令允许管理员配置 DNS 服务器的安全设置,以保护其配置和数据。
-
导出和导入 DNS 数据:
Copy Codednscmd.exe /ZoneExport zone_name zone_file_name dnscmd.exe /ZoneImport zone_name zone_file_name这些命令用于导出和导入 DNS 区域数据,便于备份、恢复或迁移 DNS 服务器的配置。
-
配置区域传送:
Copy Codednscmd.exe /zonerefresh zone_name [server_IP_address]这个命令用于强制刷新指定区域的传送。
-
设置区域的区域传送策略:
Copy Codednscmd.exe /zonerefresh zone_name /secondary这个命令设置指定区域的传送策略为辅助。
-
查看和修改 DNS 服务器的监听地址:
Copy Codednscmd.exe /ipinfo /socket [address] [/timeout value] [/port value] [/priority value]这个命令可以查看和修改 DNS 服务器监听的 IP 地址和端口。
-
设置和查看 DNS 服务器缓存参数:
Copy Codednscmd.exe /Cache [add | delete | list] [/name name] [/node node] [/file filename] [/skipnodelookup] [/directory directory] [/statistics]这个命令用于管理 DNS 服务器的缓存参数,可以添加、删除、列出缓存条目,或者显示缓存的统计信息。
-
设置和查看 DNS 服务器转发参数:
Copy Codednscmd.exe /forwarder [IPAddress] [list | add | delete] [forwarder]这个命令可以设置 DNS 服务器的转发器地址,也可以列出、添加或删除转发器。
-
配置和管理 DNS 服务器的区域属性:
Copy Codednscmd.exe /zoneinfo zone_name [/pause | /start | /load | /reload | /clear]这个命令用于配置和管理指定 DNS 区域的属性,如暂停、启动、加载、重新加载或清除区域。
-
配置和管理 DNS 服务器的日志:
Copy Codednscmd.exe /logging level logfilepath这个命令用于设置 DNS 服务器的日志级别和日志文件路径。
-
查看和修改 DNS 服务器的安全设置:
Copy Codednscmd.exe /security /directory directory /protect {2 | 3 | 4}这个命令可以查看和修改 DNS 服务器的安全设置,包括保护目录和设置保护级别。
-
查看和修改 DNS 区域的 SOA 记录:
Copy Codednscmd.exe /recordadd zone_name @ SOA [SOA_record_data]这个命令用于添加或修改指定区域的 SOA 记录。
-
查看和修改 DNS 区域的 NS 记录:
Copy Codednscmd.exe /recordadd zone_name @ NS [NS_record_data]这个命令用于添加或修改指定区域的 NS 记录。
-
查看和修改 DNS 区域的 A 记录:
Copy Codednscmd.exe /recordadd zone_name node_name A IP_address这个命令用于添加或修改指定区域的 A 记录。
-
查看和修改 DNS 区域的 CNAME 记录:
Copy Codednscmd.exe /recordadd zone_name node_name CNAME canonical_name这个命令用于添加或修改指定区域的 CNAME 记录。
-
查看和修改 DNS 区域的 MX 记录:
Copy Codednscmd.exe /recordadd zone_name @ MX mail_exchange_host [preference]这个命令用于添加或修改指定区域的 MX 记录。
-
查看和修改 DNS 区域的 PTR 记录:
Copy Codednscmd.exe /recordadd zone_name subnet PTR host_name这个命令用于添加或修改指定区域的 PTR 记录。
-
查看和修改 DNS 区域的 SRV 记录:
Copy Codednscmd.exe /recordadd zone_name service SRV priority weight port target这个命令用于添加或修改指定区域的 SRV 记录。
-
查看和修改 DNS 区域的 TXT 记录:
Copy Codednscmd.exe /recordadd zone_name node_name TXT "text_data"这个命令用于添加或修改指定区域的 TXT 记录。
-
删除指定区域的记录:
Copy Codednscmd.exe /recorddelete zone_name node_name [/recordtype] [/f]这个命令用于删除指定区域中的记录,可以根据节点名称和记录类型进行删除。
-
设置和查看 DNS 区域的 Aging 参数:
Copy Codednscmd.exe /aging zone_name [/scavenging] [/norefresh] [/refresh] [/disable | /enable]这个命令用于设置 DNS 区域的老化参数,包括清除和刷新间隔,以及启用或禁用老化。
-
设置和查看 DNS 服务器的区域传输:
Copy Codednscmd.exe /zonetransfer [add | create | delete] zone_name [server_list]这个命令用于设置 DNS 服务器的区域传输,可以添加、创建或删除传输设置。
-
导出和导入 DNS 区域数据:
Copy Codednscmd.exe /zoneexport zone_name filename [/overwrite]Copy Codednscmd.exe /zoneimport zone_name filename [/file filename] [/load]这些命令分别用于导出和导入 DNS 区域的数据,可以实现备份和恢复的功能。
-
列出和设置 DNS 服务器的全局参数:
Copy Codednscmd.exe /info [/verbose]Copy Codednscmd.exe /config [SettingName] [Value]这些命令用于列出和设置 DNS 服务器的全局信息和配置参数。
-
显示 DNS 服务器的状态和性能统计:
Copy Codednscmd.exe /statistics [/s]这个命令用于显示 DNS 服务器的状态和性能统计信息,包括服务状态、缓存信息等。
-
执行 DNS 服务器的命令脚本:
Copy Codednscmd.exe /batch filename这个命令用于执行预先编写的 DNS 服务器命令脚本,批量进行管理操作。
-
查看和修改 DNS 缓存中的记录:
Copy Codednscmd.exe /cache [/display | /clear]这个命令用于显示或清除 DNS 服务器的缓存记录,有助于管理和优化服务器性能。
-
查看和修改 DNS 服务器的转发设置:
Copy Codednscmd.exe /forwarders [action] [forwarder_IP_address] [...]这个命令用于配置 DNS 服务器的转发器,可以添加、删除或显示当前的转发设置。
-
设置和查看 DNS 区域的安全性:
Copy Codednscmd.exe /zoneinfo zone_name [/dsprimary | /file | /load]这个命令用于配置和查看 DNS 区域的安全性选项,包括是否使用 DS 记录、文件存储方式等。
-
配置和管理 DNS 服务器的日志:
Copy Codednscmd.exe /logging [log_file] [log_file_max_size] [debug_level] [event_level]这个命令用于配置 DNS 服务器的日志记录选项,包括日志文件、最大大小、调试级别和事件级别。
-
监视和测试 DNS 服务器的运行状态:
Copy Codednscmd.exe /monitor [server_list]这个命令用于监视和测试 DNS 服务器的运行状态,可以指定多个服务器进行监控。
-
设置和查看 DNS 服务器的故障转移选项:
Copy Codednscmd.exe /ipinfo [IPAddress] [IPAddress2] [...]这个命令用于设置 DNS 服务器的故障转移选项,确保在发生故障时可以自动切换到备用 IP 地址。
-
配置和管理 DNS 服务器的区域重载:
Copy Codednscmd.exe /reload zone_name [/dsprimary | /file | /load]这个命令用于配置和管理 DNS 服务器的区域重载,包括是否使用 DS 记录、文件存储方式等选项。
-
执行 DNS 服务器的动态更新:
Copy Codednscmd.exe /zonerefresh zone_name [node_name]这个命令用于执行 DNS 服务器的动态更新操作,确保区域数据与 DNS 客户端同步更新。
-
查看和配置 DNS 服务器的监听接口:
Copy Codednscmd.exe /listenaddresses [IPv4_address | IPv6_address]这个命令用于配置 DNS 服务器监听的网络接口地址,可以指定 IPv4 或 IPv6 地址。
-
设置和查看 DNS 服务器的客户端递归查询选项:
Copy Codednscmd.exe /recursion [zone_name] [/enable | /disable]这个命令用于设置 DNS 服务器的客户端递归查询选项,可以为特定区域启用或禁用递归查询。
-
配置和管理 DNS 服务器的安全设置:
Copy Codednscmd.exe /securelist [IP_address]这个命令用于配置 DNS 服务器的安全列表,可以限制允许的查询和更新的 IP 地址范围。
-
查看和修改 DNS 服务器的监视选项:
Copy Codednscmd.exe /serverlevelplugindll [action] [plug-in DLL file name]这个命令用于配置 DNS 服务器的监视选项,可以加载或卸载监视插件 DLL 文件。
-
设置和查看 DNS 服务器的缓存参数:
Copy Codednscmd.exe /cachelimits [max_cache_size] [min_cache_size]这个命令用于设置 DNS 服务器的缓存大小限制,包括最大和最小缓存大小。
-
配置和管理 DNS 服务器的端口绑定:
Copy Codednscmd.exe /portinfo [UDP_port_number] [TCP_port_number]这个命令用于配置 DNS 服务器的端口绑定选项,可以指定 UDP 和 TCP 端口号。
-
查看和配置 DNS 服务器的启动选项:
Copy Codednscmd.exe /bootmethod [boot method]这个命令用于配置 DNS 服务器的启动选项,可以设置启动方法,如启动时加载的区域和配置文件等。
-
配置和管理 DNS 服务器的区域传送选项:
Copy Codednscmd.exe /zonetransfer [zone_name] [server_list] [action]这个命令用于配置 DNS 服务器的区域传送选项,可以指定允许传送的服务器列表和动作(如允许或拒绝)。
-
查看和修改 DNS 服务器的监听端口:
Copy Codednscmd.exe /listenport [port_number]这个命令用于配置 DNS 服务器的监听端口,可以指定服务器监听的特定端口号。
-
配置和管理 DNS 服务器的重启选项:
Copy Codednscmd.exe /resetlistenaddresses [IPv4_address | IPv6_address]这个命令用于重置 DNS 服务器的监听地址,可以指定新的 IPv4 或 IPv6 地址。
-
设置和查看 DNS 服务器的转发超时时间:
Copy Codednscmd.exe /timeout [timeout_seconds]这个命令用于设置 DNS 服务器的转发超时时间,以确保在转发查询时避免超时问题。
-
配置和管理 DNS 服务器的日志滚动选项:
Copy Codednscmd.exe /logrollover [log_file] [log_file_max_size] [log_file_path]这个命令用于配置 DNS 服务器的日志滚动选项,可以设置日志文件的最大大小和保存路径。
-
设置和查看 DNS 服务器的逆向查询选项:
Copy Codednscmd.exe /revservlist [subnet]这个命令用于配置 DNS 服务器的逆向查询选项,指定允许逆向查询的子网范围。
-
配置和管理 DNS 服务器的运行模式:
Copy Codednscmd.exe /serverlevel [action] [type]这个命令用于配置 DNS 服务器的运行模式,可以设置为主服务器、辅助服务器或缓存服务器模式。
-
设置和查看 DNS 服务器的服务状态:
Copy Codednscmd.exe /status [server_name]这个命令用于查看指定 DNS 服务器的当前服务状态,包括运行时间和活动连接数等信息。
-
配置和管理 DNS 服务器的区域数据文件:
Copy Codednscmd.exe /zoneinfo [zone_name] [filename]这个命令用于配置 DNS 服务器的区域数据文件,可以指定特定区域的数据文件名称。
-
设置和查看 DNS 服务器的传输日志选项:
Copy Codednscmd.exe /logging [log_file] [log_file_max_size] [log_file_path]这个命令用于设置 DNS 服务器的传输日志选项,可以配置传输日志文件的最大大小和保存路径。
-
配置和管理 DNS 服务器的故障转移选项:
Copy Codednscmd.exe /failover [zone_name] [master_IP] [backup_IP]这个命令用于配置 DNS 服务器的故障转移选项,指定主服务器和备份服务器的 IP 地址。
-
设置和查看 DNS 服务器的回溯传输选项:
Copy Codednscmd.exe /backtransfer [zone_name] [master_server] [/secure]这个命令用于设置 DNS 服务器的回溯传输选项,指定从主服务器回溯传输区域数据。
-
配置和管理 DNS 服务器的数据文件位置:
Copy Codednscmd.exe /fileinfo [zone_name] [file_name] [operation]这个命令用于配置 DNS 服务器的数据文件位置,可以指定区域数据文件的名称和操作。
-
查看和管理 DNS 服务器的动态更新选项:
Copy Codednscmd.exe /zoneload [zone_name] [/load | /unload]这个命令用于管理 DNS 服务器的动态更新选项,可以加载或卸载特定区域的动态更新。
-
配置和管理 DNS 服务器的租约时间选项:
Copy Codednscmd.exe /setlifetime [lease_time] [refresh_time] [renew_time] [no_refresh_time]这个命令用于配置 DNS 服务器的租约时间选项,包括租约、刷新、续订和不刷新时间。
-
设置和查看 DNS 服务器的转发选项:
Copy Codednscmd.exe /forwarders [list_of_IP_addresses] [/enable | /disable]这个命令用于配置 DNS 服务器的转发选项,指定转发查询到指定的 IP 地址列表或禁用转发功能。
-
配置和管理 DNS 服务器的区域属性:
Copy Codednscmd.exe /zoneinfo [zone_name] [property_name] [value]这个命令用于配置 DNS 服务器特定区域的属性,可以设置属性的名称和对应的值。
-
设置和查看 DNS 服务器的安全选项:
Copy Codednscmd.exe /security [zone_name] [operation] [principal_name] [permission]这个命令用于设置 DNS 服务器的安全选项,可以指定特定区域的操作、主体名称和权限。
-
配置和管理 DNS 服务器的区域类型:
Copy Codednscmd.exe /zonetype [zone_name] [type]这个命令用于配置 DNS 服务器的特定区域类型,例如主区、从区或存根区。
-
设置和查看 DNS 服务器的缓存清理选项:
Copy Codednscmd.exe /clearcache [/zone | /server]这个命令用于清除 DNS 服务器的缓存,可以选择清除特定区域的缓存或整个服务器的缓存。
-
配置和管理 DNS 服务器的记录:
Copy Codednscmd.exe /recordadd [zone_name] [node_name] [record_type] [record_data]这个命令用于添加 DNS 服务器的记录,可以指定区域名称、节点名称、记录类型和记录数据。
-
设置和查看 DNS 服务器的转储文件选项:
Copy Codednscmd.exe /config [/dsprimary | /localdirectory | /roothints]这个命令用于配置 DNS 服务器的转储文件选项,可以设置主目录服务、本地目录或根提示。
-
配置和管理 DNS 服务器的信任关系:
Copy Codednscmd.exe /trustadd [trusting_domain] [trusted_domain] [trust_type] [trust_level]这个命令用于配置 DNS 服务器的信任关系,可以指定信任的域、受信任的域、信任类型和信任级别。
-
设置和查看 DNS 服务器的优先级和权重:
Copy Codednscmd.exe /priority [zone_name] [node_name] [priority] [weight]这个命令用于设置 DNS 服务器的记录优先级和权重,可以指定区域名称、节点名称、优先级和权重。
-
配置和管理 DNS 服务器的区域刷新选项:
Copy Codednscmd.exe /refresh [zone_name]这个命令用于配置 DNS 服务器的区域刷新选项,手动触发特定区域的刷新操作。
-
设置和查看 DNS 服务器的数据更新选项:
Copy Codednscmd.exe /update [/resync]这个命令用于设置 DNS 服务器的数据更新选项,可以强制进行数据更新或重新同步。
-
配置和管理 DNS 服务器的监视选项:
Copy Codednscmd.exe /monitor [/threshold] [/timeout]这个命令用于配置 DNS 服务器的监视选项,可以设置监视的阈值和超时时间。
-
设置和查看 DNS 服务器的负载平衡选项:
Copy Codednscmd.exe /load [/test]这个命令用于设置 DNS 服务器的负载平衡选项,可以测试服务器的负载情况或进行负载平衡操作。
-
配置和管理 DNS 服务器的日志文件:
Copy Codednscmd.exe /logoff [log_file]这个命令用于配置 DNS 服务器的日志文件,可以指定日志文件的名称或关闭日志记录。
-
设置和查看 DNS 服务器的通知选项:
Copy Codednscmd.exe /notify [zone_name] [notification_address]这个命令用于设置 DNS 服务器的通知选项,可以配置特定区域的通知地址。
-
配置和管理 DNS 服务器的权威数据:
Copy Codednscmd.exe /authority [zone_name] [/reset]这个命令用于配置 DNS 服务器的权威数据,可以重置特定区域的权威设置。
-
设置和查看 DNS 服务器的解析选项:
Copy Codednscmd.exe /resolve [query_name] [query_type] [server_address]这个命令用于设置 DNS 服务器的解析选项,可以指定查询名称、查询类型和服务器地址。
-
配置和管理 DNS 服务器的缓存预热选项:
Copy Codednscmd.exe /prewarm [zone_name]这个命令用于配置 DNS 服务器的缓存预热选项,可以预热特定区域的缓存。
-
设置和查看 DNS 服务器的远程管理选项:
Copy Codednscmd.exe /remotemanagement [/enable | /disable]这个命令用于设置 DNS 服务器的远程管理选项,可以启用或禁用远程管理功能。
-
配置和管理 DNS 服务器的记录生存时间:
Copy Codednscmd.exe /ttl [zone_name] [node_name] [record_type] [ttl_seconds]这个命令用于配置 DNS 服务器记录的生存时间(TTL),可以指定区域名称、节点名称、记录类型和 TTL 值。
-
设置和查看 DNS 服务器的自动清理选项:
Copy Codednscmd.exe /cleanup [/glue]这个命令用于设置 DNS 服务器的自动清理选项,可以清理无效的记录或修剪刻录机记录。
-
配置和管理 DNS 服务器的缓存锁定选项:
Copy Codednscmd.exe /cachelock [zone_name]这个命令用于配置 DNS 服务器的缓存锁定选项,可以锁定特定区域的缓存。
-
设置和查看 DNS 服务器的区域传送选项:
Copy Codednscmd.exe /transfer [zone_name] [/timeout] [/force]这个命令用于设置 DNS 服务器的区域传送选项,可以指定传送的区域、超时时间和强制传送。
-
配置和管理 DNS 服务器的故障转移选项:
Copy Codednscmd.exe /failover [zone_name] [node_name] [primary_server] [backup_server]这个命令用于配置 DNS 服务器的故障转移选项,可以指定区域名称、节点名称、主服务器和备份服务器。
-
设置和查看 DNS 服务器的协议选项:
Copy Codednscmd.exe /protocol [/nt4emulation | /ssl]这个命令用于设置 DNS 服务器的协议选项,可以配置 NT4 模拟或启用 SSL。
-
配置和管理 DNS 服务器的逆向查找选项:
Copy Codednscmd.exe /reverselookup [/subnets]这个命令用于配置 DNS 服务器的逆向查找选项,可以设置子网的逆向查找。
-
设置和查看 DNS 服务器的验证选项:
Copy Codednscmd.exe /validate [zone_name] [/node]这个命令用于设置 DNS 服务器的验证选项,可以验证特定区域或节点。
-
-
配置和管理 DNS 服务器的数据文件选项:
Copy Codednscmd.exe /fileinfo [zone_name]这个命令用于配置 DNS 服务器的数据文件选项,可以查看特定区域的数据文件信息。
-
设置和查看 DNS 服务器的服务选项:
Copy Codednscmd.exe /service [restart | pause | resume | status]这个命令用于设置 DNS 服务器的服务选项,可以重新启动、暂停、恢复服务或查看服务状态。
-
配置和管理 DNS 服务器的缓存文件选项:
Copy Codednscmd.exe /cache [dump | reset | show]这个命令用于配置 DNS 服务器的缓存文件选项,可以导出、重置或显示缓存内容。
-
设置和查看 DNS 服务器的拒绝策略选项:
Copy Codednscmd.exe /refuse [query_type] [/subnets]这个命令用于设置 DNS 服务器的拒绝策略选项,可以指定拒绝的查询类型或子网。
-
配置和管理 DNS 服务器的资源记录选项:
Copy Codednscmd.exe /resource [zone_name] [node_name] [record_type]这个命令用于配置 DNS 服务器的资源记录选项,可以管理特定区域、节点和记录类型的资源记录。
-
设置和查看 DNS 服务器的转发选项:
Copy Codednscmd.exe /forwarder [/enable | /disable] [forwarder_address]这个命令用于设置 DNS 服务器的转发选项,可以启用或禁用转发功能,并指定转发的地址。
-
配置和管理 DNS 服务器的扩展选项:
Copy Codednscmd.exe /extension [/property] [/disable]这个命令用于配置 DNS 服务器的扩展选项,可以设置扩展的属性或禁用扩展。
-
设置和查看 DNS 服务器的策略选项:
``` dnscmd.exe /policy [/enable | /disable] ``` 这个命令用于设置 DNS 服务器的策略选项,可以启用或禁用策略功能。 -
-
- 配置和管理 DNS 服务器的记录锁定选项:
``` dnscmd.exe /recordlock [zone_name] [node_name] [record_type] ``` 这个命令用于配置 DNS 服务器的记录锁定选项,可以锁定特定区域、节点和记录类型的记录。- 设置和查看 DNS 服务器的安全选项:
``` dnscmd.exe /security [zone_name] [/directory] ``` 这个命令用于设置 DNS 服务器的安全选项,可以配置特定区域的安全设置或指定安全目录。- 配置和管理 DNS 服务器的状态选项:
``` dnscmd.exe /status [zone_name] [node_name] [record_type] ``` 这个命令用于配置 DNS 服务器的状态选项,可以查看特定区域、节点和记录类型的状态信息。- 设置和查看 DNS 服务器的区域选项:
``` dnscmd.exe /zoneinfo [zone_name] ``` 这个命令用于设置 DNS 服务器的区域选项,可以查看特定区域的信息和选项。- 配置和管理 DNS 服务器的动态更新选项:
``` dnscmd.exe /update [zone_name] [node_name] [record_type] [update_type] ``` 这个命令用于配置 DNS 服务器的动态更新选项,可以指定区域、节点、记录类型和更新类型。- 设置和查看 DNS 服务器的版本选项:
``` dnscmd.exe /version ``` 这个命令用于设置 DNS 服务器的版本选项,可以查看当前 DNS 服务器的版本信息。- 配置和管理 DNS 服务器的区域传输选项:
``` dnscmd.exe /zonetransfer [zone_name] [/timeout] [/slave] ``` 这个命令用于配置 DNS 服务器的区域传输选项,可以指定区域名称、超时时间和从服务器设置。- 设置和查看 DNS 服务器的区域属性选项:
``` dnscmd.exe /zoneproperty [zone_name] [/notify] [/ds] ``` 这个命令用于设置 DNS 服务器的区域属性选项,可以配置区域的通知设置和目录集成。- 配置和管理 DNS 服务器的监视选项:
``` dnscmd.exe /monitor [zone_name] [node_name] [record_type] ``` 这个命令用于配置 DNS 服务器的监视选项,可以监视特定区域、节点和记录类型的状态。- 设置和查看 DNS 服务器的自动更新选项:
``` dnscmd.exe /autocache [enable | disable] ``` 这个命令用于设置 DNS 服务器的自动更新选项,可以启用或禁用自动缓存更新功能。
dnscmd.exe 是一个强大的工具,适用于需要通过命令行对 DNS 服务器进行管理和配置的情况。使用它可以实现对 DNS 服务器灵活的管理和自动化操作。
dnscmd.exe 是 Windows 操作系统中用于管理和配置 DNS 服务器的命令行工具,它的架构可以简单描述如下:
-
命令行接口:
dnscmd.exe提供了命令行界面,允许管理员通过输入命令来执行各种 DNS 服务器管理任务。 -
模块化设计:
dnscmd.exe设计为模块化的工具,支持多个子命令和选项,每个子命令都对应于 DNS 服务器管理的不同功能和操作。 -
运行环境:
dnscmd.exe运行于 Windows 操作系统的命令行环境中,可以直接在命令提示符或批处理脚本中调用和使用。 -
系统依赖: 它依赖于 Windows DNS Server (DNS 服务器) 的存在和正确配置,可以连接到本地或远程的 DNS 服务器来执行管理任务。
-
管理功能:
dnscmd.exe支持多种管理功能,包括但不限于创建、删除、修改 DNS 记录、配置区域传输、设置安全选项、查看服务器状态等。 -
权限要求: 为了运行
dnscmd.exe,用户通常需要具有管理员权限或至少是 DNS 服务器管理员角色的成员。
总体来说,dnscmd.exe 的架构设计旨在为 Windows 平台上的 DNS 管理员提供一个强大和灵活的工具,帮助他们有效地管理和维护 DNS 服务器的配置和运行状态。
以下是 Windows Server 2022 的 DNS 备份批处理脚本示例:
@echo off
setlocal
rem 定义备份路径
set backupPath=c:\dns_backup\
rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=dns_backup-%datestamp%-%timestamp%.dns"
rem 导出 DNS 区域配置
dnscmd /zoneexport mydomain.com "%backupPath%%backupFileName%"
rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
echo DNS 备份成功:%backupFileName%
) else (
echo DNS 备份失败!%backupFileName% 文件不存在。
)
endlocal
pause
在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 dnscmd 命令导出 DNS 区域配置并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“DNS 备份成功”,否则输出“DNS 备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化 DNS 备份。请注意,在执行脚本之前,请确保您已经安装了 DNS 服务并在管理员权限下运行此脚本。
以下是 Windows Server 2022 的组策略备份批处理脚本示例:
@echo off
setlocal
rem 定义备份路径
set backupPath=C:\GroupPolicyBackup\
rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=GroupPolicyBackup_%datestamp%_%timestamp%.zip"
rem 备份组策略
powershell -command "& {Get-GPO -All | Backup-GPO -Path '%backupPath%'}"
rem 压缩备份文件
powershell -command "& {Compress-Archive '%backupPath%' '%backupPath%%backupFileName%'}"
rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
echo 组策略备份成功:%backupFileName%
) else (
echo 组策略备份失败!备份文件 %backupFileName% 不存在。
)
endlocal
pause
在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 PowerShell 命令 Get-GPO 和 Backup-GPO 备份所有组策略,并将其保存到指定的备份路径中。接下来,我们使用 Compress-Archive 将备份文件压缩为 ZIP 文件并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“组策略备份成功”,否则输出“组策略备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化组策略备份。请注意,在执行脚本之前,请确保您已经安装了 PowerShell 并在管理员权限下运行此脚本。
以下是 Windows Server 2022 的注册表备份批处理脚本示例:
@echo off
setlocal
rem 定义备份路径
set backupPath=C:\RegistryBackup\
rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=RegistryBackup_%datestamp%_%timestamp%.reg"
rem 备份注册表
reg export HKEY_LOCAL_MACHINE "%backupPath%%backupFileName%"
rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
echo 注册表备份成功:%backupFileName%
) else (
echo 注册表备份失败!备份文件 %backupFileName% 不存在。
)
endlocal
pause
在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 reg export 命令备份整个 HKEY_LOCAL_MACHINE 分支的注册表,并将其保存到指定的备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“注册表备份成功”,否则输出“注册表备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化注册表备份。请注意,在执行脚本之前,请确保您已经以管理员身份运行此脚本。
以下是 Windows Server 2022 的驱动程序备份脚本示例:
@echo off
setlocal
rem 定义备份路径
set backupPath=C:\DriverBackup\
rem 获取当前日期时间作为备份文件名
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set "datestamp=%%a-%%b-%%c"
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set "timestamp=%%a%%b"
set "backupFileName=DriverBackup_%datestamp%_%timestamp%.zip"
rem 备份驱动程序
dism /online /export-driver /destination:"%backupPath%"
rem 压缩备份文件
powershell -command "& {Compress-Archive '%backupPath%' '%backupPath%%backupFileName%'}"
rem 校验备份文件是否存在
if exist "%backupPath%%backupFileName%" (
echo 驱动程序备份成功:%backupFileName%
) else (
echo 驱动程序备份失败!备份文件 %backupFileName% 不存在。
)
endlocal
pause
在这个脚本中,我们首先设置了备份路径和备份文件名,然后使用 dism 命令备份当前系统中所有驱动程序,并将其保存到指定的备份路径中。接下来,我们使用 Compress-Archive 将备份文件压缩为 ZIP 文件并存储到备份路径中。最后,我们检查备份文件是否存在,如果存在则输出“驱动程序备份成功”,否则输出“驱动程序备份失败”。我们可以将此脚本保存为 .bat 文件并定期执行以实现自动化驱动程序备份。请注意,在执行脚本之前,请确保您已经以管理员身份运行此脚本。

浙公网安备 33010602011771号