在 Windows 上阻止发往公网地址的 UDP 53 DNS 查询
-
在 Windows 上安装 AdGuard Home
设置上游服务器 为 Doh 或者其他 非 UDP 53 服务器
将 Bootstrap DNS 设置为使用 TCP 查询 即给服务器地址前面加上tcp://
示例:tcp://114.114.114.114 -
修改网卡的 DNS 为
127.0.0.1备选 DNS 可以不填
或者填写127.0.0.2整个127.0.0.0/8范围都是本地环回地址
即127.255.255.255当然需要在 AdGuard Home 中监听该地址 -
关闭 Windows 智能多宿主名称解析
Win + R 输入gpedit.msc打开组策略: 计算机配置 》 管理模板 》 网络 》 DNS 客户端
找到 “禁用智能多宿主名称解析” 设置为 已启用 -
Windows 防火墙设置出站拦截规则 powershell 命令如下:
# 创建一条阻止规则:目标端口 UDP 53,但排除所有内网和保留地址段(IPv4)New-NetFirewallRule -DisplayName "Block Public DNS (UDP 53)" `-Direction Outbound `-Action Block `-Protocol UDP `-RemotePort 53 `-RemoteAddress @("0.0.0.0-9.255.255.255","11.0.0.0-100.63.255.255","100.128.0.0-126.255.255.255","128.0.0.0-169.253.255.255","169.255.0.0-172.15.255.255","172.32.0.0-192.167.255.255","192.169.0.0-223.255.255.255") -Enabled True设置完成后即可拦截所有本地发出的 UDP 53 端口 DNS查询
使用 TCP 53 端口的 DNS 查询和其他 非 UDP 53 查询不受影响值得注意的是 此防火墙规则没有 拦截使用 IPv6 的 DNS 查询
可以添加2000::/3地址来进行拦截 其为 IPv6 全球单播地址前缀
相当于所有 IPv6 公网地址 -
这样一来 AdGuard Home 在事实上接管了 Windows 的系统解析
任何发往公网的常规 UDP 53 查询将会被拦截 私有和保留的地址的除外