以下是故事内容:
在我的本地网络上,我使用带有 dnsmasq 的 Raspberry Pi 进行名称解析和 DHCP。我们家有两个大人和两个小孩,我正在考虑通过 OpenDNS 限制孩子们的互联网访问。
我有几乎让它正常工作,从开始这个问题本质上,我所做的就是用关键字(“孩子”)“标记”孩子的设备,并通过以下方式将备用 DNS 服务器(OpenDNS)与该标记关联起来:
# regular DNS for most devices
dhcp-option=option:dns-server,192.168.111.11,8.8.8.8,8.8.4.4
# restricted DNS for kids (two OpenDNS IP addresses, and my local DNS server)
dhcp-option=tag:kids,option:dns-server,208.67.222.222,208.67.220.220,192.168.1.11
# IP reservations for kids devices
XX:XX:XX:XX:XX:XX,set:kids,192.168.1.190
YY:YY:YY:YY:YY:YY,set:kids,192.168.1.191
这一方法有效:孩子们的设备访问 OpenDNS 服务器进行名称解析,从而阻止他们访问不适当的网站。
但问题是孩子们无法再访问我们本地网络上的主机。这意味着,例如,他们无法访问我们的本地 Minecraft 服务器或文件共享。我尝试过切换 DNS 服务器的顺序,并将我们的本地 DNS 服务器放在孩子们的顺序的第一位,但这会禁用 OpenDNS 服务器。
我试图想出一个解决方案,而我唯一想到的就是在另一台 Raspberry Pi 上设置第二个 DNS 服务器,但这意味着重复大量我不想跟踪的配置。
如何配置 DNSMasq,以便为两组不同的客户端使用不同的“外部”DNS 服务器正确解析本地地址?
答案1
恐怕这样的配置是不可能的,您需要运行第二个内部 DNS 才能控制使用哪个上游 DNS 服务器。不过,您可以在辅助服务器上设置条件转发器,这样就不需要配置两次了:
- 配置辅助 DNS 服务器以进行“限制访问”
- 为了便于说明,我们假设主 DNS 服务器上的内部区域为
homedomain.local
。在辅助 DNS 服务器上配置条件转发器,将所有请求转发homedomain.local
到主 DNS 服务器。
这样,任何查询minecraftserver.homedomain.local
都会被发送到您的内部 DNS 服务器,但任何其他域的查询都会被发送到 OpenDNS。