🔐 DNS 安全与 DNSSEC

DNS 服务器 · 第 6 篇 · 适用于 Windows Server 2019 / 2022 / 2025

1. DNS 安全威胁概述

DNS 是网络基础设施的关键组件,但也面临着多种安全威胁:

防护措施

措施说明
DNSSEC对 DNS 响应进行数字签名,验证数据完整性
安全动态更新仅限已加入域的计算机更新 DNS 记录
区域传输限制仅允许授权辅助服务器进行区域传输
递归查询限制限制谁可以向 DNS 服务器发起递归查询

2. DNSSEC 配置

DNSSEC(DNS Security Extensions)通过公钥加密为 DNS 记录添加数字签名,确保解析结果的完整性和来源验证。

1

DNS 管理器 → 展开服务器 → 正向查找区域 → 右键 iehang.cn属性

2

切换到区域验证选项卡

3

勾选为这个区域签名(DNSSEC),点击确定开始签名

4

等待签名过程完成(几秒钟),DNSSEC 会在区域中添加 RRSIG 记录

5

重复以上步骤为反向查找区域启用 DNSSEC(可选但推荐)

PowerShell - DNSSEC 签名
# 为正向区域启用 DNSSEC 签名
Invoke-DnsServerZoneSign -ZoneName "iehang.cn"

# 查看签名后的记录统计
Get-DnsServerResourceRecord -ZoneName "iehang.cn" -RRType RRSIG | Measure-Object

# 为反向区域启用 DNSSEC
Invoke-DnsServerZoneSign -ZoneName "10.168.192.in-addr.arpa"

# 导出 DNSSEC 信任锚点(用于客户端验证)
Get-DnsServerDnsSecZoneSigningKey -ZoneName "iehang.cn" `
    -CryptoAlgorithmId 13

3. 区域传输安全

PowerShell - 区域传输安全
# 查看区域传输设置
Get-DnsServerZone -Name "iehang.cn"

# 允许特定 IP 进行区域传输
Set-DnsServerZoneTransfer `
    -Name "iehang.cn" `
    -AllowTransfer `
    -Server19216810100, "192.168.10.253"

# 或者禁用区域传输(仅限本地)
Set-DnsServerZoneTransfer -Name "iehang.cn" -NoTransfer

4. 递归查询限制

默认情况下,DNS 服务器对所有查询者提供递归查询服务。在公网 DNS 服务器上,应当限制递归查询仅对内部网络生效。

PowerShell - 递归限制
# 查看当前递归设置
Get-DnsServerRecursion

# 仅允许特定客户端使用递归查询
Add-DnsServerQueryResolutionPolicy `
    -Name "AllowInternalClients" `
    -Action ALLOW `
    -ApplyTo All `
    -ClientSubnet "192.168.10.0/24" `
    -RecursionScopes "RecursionDefault"

# 禁用递归(转发器模式下使用)
Set-DnsServerRecursion -Enable $false
警告

DNSSEC 需要客户端操作系统支持验证(Windows 10/11 和 Windows Server 2016+ 默认支持)。较老的客户端可能无法解析启用了 DNSSEC 的区域。建议先在测试环境验证。

5. 常见问题

Q1:DNSSEC 签名后客户端无法解析

确保客户端 DNS 指向已正确配置 DNSSEC 的 DNS 服务器。如果客户端操作系统不支持 DNSSEC,考虑在内网环境中禁用 DNSSEC 或使用支持 DNSSEC 验证的解析器。

Q2:区域传输被拒绝

检查辅助 DNS 服务器是否在允许列表中,以及是否使用安全的 TLS 通道(DNS over TLS)进行区域传输。