如果不想让防火墙后面的客户端使用自定义或其他公共 DNS,可以设置规则,将所有对外部服务器的 DNS 请求重定向到本地 DNS 服务器。这不但有助于确保网络设备的正常功能,还可以应用 DNS 的阻止/过滤功能。
创建端口转发规则
进入 防火墙 > NAT > 端口转发 页面,单击 添加 按钮,进行以下设置:
| 选项 | 值 |
|---|---|
| 接口 | IOT |
| 协议 | TCP/UDP |
| 目标/反转 | 选中 |
| 目标 | IOT net |
| 目标端口范围 | DNS |
| 重定向目标 IP | 127.0.0.1 |
| 重定向目标端口 | DNS |
| 描述 | Redirect DNS requests to internal DNS resolver |

- 接口:需要定义本地网络接口。
- 目标:为接口选择系统生成的网络地址。
- 目标端口范围:选择 DNS,匹配 DNS 请求流量。
- 重定向目标 IP:设置为 127.0.0.1 (localhost),使用 OPNsense 中的内部 Unbound DNS 服务。
关键设置:勾选 目标/反转 非常重要,这会使规则匹配来自 IOT 网络的任何流量,而不是用本地 IOT 接口/网关 IP 去解析 DNS 查询。这样所有接口地址的 DNS 查询都会被重定向到本地 Unbound DNS 解析器(127.0.0.1)。
单击 保存 并应用更改后,转到 防火墙 > 规则 > IOT 页面。将 DNS 重定向规则移动到列表顶部,确保其拥有更高优先级。
如果防火墙有多个内部接口,可以通过创建 组 来批量应用规则。
多接口配置
为将单条规则应用于多个接口,可创建防火墙组。组允许同时对多个接口分组,并在组上创建规则,且组规则的执行顺序优先于接口规则。
转到 防火墙 > 组 页面,单击 添加 按钮。

输入组 名称(例如 CommonDNS),并勾选所有需要重定向 DNS 请求的接口,然后单击 保存 创建组。

之后,像之前那样创建重定向规则,只是将接口和目标替换为组。进入 防火墙 > NAT > 端口转发 页面,单击 添加,输入以下值:
| 选项 | 值 |
|---|---|
| 接口 | CommonDNS |
| 协议 | TCP/UDP |
| 目标/反转 | 选中 |
| 目标 | CommonDNS |
| 目标端口范围 | DNS |
| 重定向目标 IP | 127.0.0.1 |
| 重定向目标端口 | DNS |
| 描述 | Redirect DNS requests to internal DNS resolver |
转到 防火墙 > 规则 > CommonDNS 页面,可看到 NAT 端口转发的重定向规则已自动添加到规则列表中。

测试重定向
可通过添加 DNS 覆盖来测试。DNS 覆盖能为指定域名设置不同的 IP 地址,包括互联网公共域名。
转到 服务 > Unbound DNS > 覆盖 页面,单击 添加 按钮。输入一个网络中未使用的知名域名(例如 yahoo.com),并选择一个随机的本地 IP 地址(例如 192.168.20.200)。

保存覆盖后,单击 应用 按钮。

在 Linux 上运行 host 命令进行 DNS 查找,可看到返回的是本地 IP 而非公共 IP:
$ host yahoo.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
yahoo.com has address 192.168.20.200在 Windows 下直接使用浏览器访问 yahoo.com,除非浏览器缓存,否则应无法正常访问。
结论
通过设定 DNS 重定向规则,可以将对外部 DNS 的请求重定向到配置的 Unbound DNS、Pi‑hole 或 AdGuardHome,甚至可以借助别名将 DNS 请求随机重定向到多个 IP 地址,从而提升外部网络访问的安全性。
原文参考:https://homenetworkguy.com/how-to/redirect-all-dns-requests-to-local-dns-resolver/
觉得内容不错?我要