Squid Split DNS:把私有域名交给正确的解析器
有意识地划分私有与公共 DNS 命名空间,而不是给 Squid 一份含糊的解析器列表。
把内部解析器放在首位、公共解析器放在其次,并不能告诉 Squid 哪些名字属于哪个命名空间。
在 Squid 6 和 7 中,dns_nameservers 会用服务器地址取代通常的解析器列表。它的语法没有按域名的映射。有效的否定回答也与无法访问的解析器不同,因此靠备选解析器遍历互不兼容的命名空间并不可靠。
按域名分流查询
本地 DNS 转发器可以表达缺失的策略。在已有的 dnsmasq 配置中,可以这样为一个私有后缀分流:
server=/internal.example/192.0.2.53
替换域名和地址。为其他名字配置一个经批准的默认上游、合适的监听器和访问限制。然后用在装版本支持的配置把 Squid 指向该解析器。
另一种做法是使用能正确解析两个命名空间的组织级 DNS 服务。避免使用会暴露私有名字却又无法应答的公共回退。
如果由父代理执行目的地查询,那么这一跳就必须能访问私有命名空间。本地 Squid 主机上的解析器无法修正父代理的查询。
也要检查否定情形
选择一个有效的私有名字、一个有效的公共名字和一个不存在的私有名字。对每个名字,确认预期的上游,以及预期回答是地址还是否定响应。最后一种情形会暴露内部否定回答之后意外落到公共上游的问题。
把客户端需要的地址族都包含进来。A 查询成功并不能证明 AAAA 也遵循策略,或返回了可达的目的地。还要注意缓存状态:缓存中的回答可能掩盖新的查询会选择哪个上游。