457 字
2 分钟
Windows 阻断链路本地 IPv6 DNS 查询
当局域网路由器同时下发 IPv4 DNS 和 IPv6 的 RDNSS 通告时,Windows 会优先向链路本地地址(fe80::/10)发起 DNS 查询。如果上游的 IPv6 DNS 不可用或响应异常,就会出现解析缓慢、部分域名无法访问的问题。
下面两条出站规则直接在 Windows 防火墙层面拦截发往链路本地 IPv6 的 53 端口查询,迫使系统 DNS Client 自动且平滑地回退到 DHCP 下发的 IPv4 DNS,无需手动改网卡配置。
一、写入规则(启用拦截)
以管理员身份打开 PowerShell,执行以下命令:
# 阻断发往链路本地 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验证是否生效:
Get-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*" | Select-Object Name, Enabled, Direction, Action回显显示两项的 Enabled 均为 True、Action 为 Block 即表示已正常工作。
二、删除规则(恢复原状)
若后续局域网路由器关闭了 RDNSS 通告,或需要恢复默认的 IPv6 DNS 查询,以管理员身份在 PowerShell 中执行以下命令即可一键移除:
# 删除刚才添加的两条规则Remove-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*"
# 刷新本地 DNS 缓存Clear-DnsClientCache验证删除:
Get-NetFirewallRule -Name "Block-LinkLocal-IPv6-DNS*" -ErrorAction SilentlyContinue没有返回任何内容即表示已彻底清除干净。
三、补充:临时禁用 / 重新启用
如果只是临时排查网络,也可以通过启闭开关控制,无需重复创建和删除:
# 临时禁用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/