如何在 Linux 系统上配置 BIND 以根据请求主机的源 IP 和/或 MAC 将 DNS 查询转发到不同的上游转发器?
例如,我可能希望将 DNS 查询从网络上的某些主机发送到 OpenDNS,将其他主机发送到 Google,将所有其他主机发送到我的 ISP。
答案1
解决方案是绑定“视图”。您可以根据源或目标 IP 进行过滤,并将请求路由到视图。您可以提供完全不同的 DNS 区域、转发器和其他处理选项。
https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html
答案2
我有相同的用例,我按如下方式执行(虽然有点复杂,但效果很好)。
- 路由器通过 DoT 客户端运行基于 TLS 的 DNS,转发到 nextdns.io。我通过这项服务屏蔽广告和其他东西。
- 内部 linux 机器上有 2 个 dnsmasq 容器,绑定到同一机器上的不同内部 IP。它们将查询转发到路由器,并通过 TLS 转发到互联网。
- 1 dnsmasq 执行成人 DNS + DHCP,第二个仅执行儿童 DNS。第一个根据请求客户端的 MAC 地址在 DHCP 响应上设置不同的 DNS 选项 - 我专门配置我的孩子设备以获取我的第二个受限制的 dnsmasq 容器的 DNS,成人则获取另一个。
- 第二个 dnsmasq 容器仅提供一组受限制的儿童友好域,并为其余域返回 0.0.0.0。
顺便说一句,我还设置了一些 IP 表,强制通过路由器的所有请求都通过 TLS,以处理硬编码 8.8.8.8 或类似内容的不良客户端。