457 字
2 分钟
Windows 阻断链路本地 IPv6 DNS 查询

当局域网路由器同时下发 IPv4 DNS 和 IPv6 的 RDNSS 通告时,Windows 会优先向链路本地地址(fe80::/10)发起 DNS 查询。如果上游的 IPv6 DNS 不可用或响应异常,就会出现解析缓慢、部分域名无法访问的问题。

下面两条出站规则直接在 Windows 防火墙层面拦截发往链路本地 IPv6 的 53 端口查询,迫使系统 DNS Client 自动且平滑地回退到 DHCP 下发的 IPv4 DNS,无需手动改网卡配置。

一、写入规则(启用拦截)#

以管理员身份打开 PowerShell,执行以下命令:

Terminal window
# 阻断发往链路本地 IPv6 的 UDP 53 (常规 DNS)
New-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS-UDP" `
-DisplayName "Block Link-Local IPv6 DNS UDP" `
-Direction Outbound `
-Action Block `
-Protocol UDP `
-RemotePort 53 `
-RemoteAddress "fe80::/10"
# 阻断发往链路本地 IPv6 的 TCP 53 (大包/长响应 DNS)
New-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS-TCP" `
-DisplayName "Block Link-Local IPv6 DNS TCP" `
-Direction Outbound `
-Action Block `
-Protocol TCP `
-RemotePort 53 `
-RemoteAddress "fe80::/10"
# 刷新本地 DNS 缓存使之立即生效
Clear-DnsClientCache

验证是否生效:

Terminal window
Get-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*" | Select-Object Name, Enabled, Direction, Action

回显显示两项的 Enabled 均为 True、Action 为 Block 即表示已正常工作。

二、删除规则(恢复原状)#

若后续局域网路由器关闭了 RDNSS 通告,或需要恢复默认的 IPv6 DNS 查询,以管理员身份在 PowerShell 中执行以下命令即可一键移除:

Terminal window
# 删除刚才添加的两条规则
Remove-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*"
# 刷新本地 DNS 缓存
Clear-DnsClientCache

验证删除:

Terminal window
Get-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*" -ErrorAction SilentlyContinue

没有返回任何内容即表示已彻底清除干净。

三、补充:临时禁用 / 重新启用#

如果只是临时排查网络,也可以通过启闭开关控制,无需重复创建和删除:

Terminal window
# 临时禁用
Disable-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*"
# 重新启用
Enable-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*"
Windows 阻断链路本地 IPv6 DNS 查询
https://iiii.fun/posts/win/windows-block-ipv6-dns/
作者
庆灵
发布于
2025-10-05
许可协议
CC BY-NC-SA 4.0