我使用 pfSense (Unbound) 作为我的本地解析器。从历史上看,我将其指向根递归解析,因为我认为我的主要威胁是数据的可信度和新近性(中毒/无效的 DNS)和本地 ISP DNS 跟踪。(我不知道是不是这样,但我觉得海外的根 DNS 服务器可能与我个人的连接较少,并且对我生成的任何查询不太感兴趣。)我主要使用可能相关的 IPv4。
随着对 DNS 跟踪的所有关注,出现了一些担忧和看法:
- 为了隐私/确定性,我应该使用某种 DNS 加密或签名方法吗?我没有使用 DNSSEC 或任何其他扩展,因此我的 DNS 查询是“明文”纯文本。它们在这里和各种 DNS 服务器之间是可以观察到的,并且肯定没有“在线”过度操纵(不太可能但注意到)。但是使用什么以及它会有多大帮助,因为它不是每个人都支持的。
- 我应该使用外部解析器而不是查询根服务器吗?我从一开始就查询根服务器,所以我从根服务器发出许多查询到实际感兴趣的子网,而不是在一些现有的 DNS 解析器/缓存上使用预缓存条目。但是每个 DNS 服务器只能看到域的一个组成部分,他们看不到整个目标。如果我使用中间解析器,尤其是带有签名/加密的解析器,我发出的 DNS 请求要少得多,而且我发出的问题总是会被加密和签名。但它需要一个具有相当信任(缓存等)的选定中介,并且不影响拦截的风险。
- 我应该通过某种匿名代理路由 DNS 吗?第一次请求的速度较慢,但 Unbound 会在本地缓存任何回复,并在缓存数据过期之前请求刷新数据,我猜 80/20 规则适用(大多数查询将针对我所在的域的同一子集已经有缓存的数据),所以我不太担心速度方面。但这有多实用?最突出的匿名方法是tor。Tor 不执行 UDP,因此它通过要求出口节点执行 DNS 查询并信任结果来处理 DNS。我可以将 Unbound 配置为仅通过 TCP 查询 DNS,并通过本地 tor 路由,如果这样可以解决它(=如果大多数出口节点允许端口 53,并且如果大多数 DNS 服务器都使用 TCP)。如果有特定于 DNS 的 tor 等效项,我也很乐意运行 DNS 匿名节点,如果它可以帮助其他人(这可能让我的流量与一般 DNS 查询合并)但是这样的事情存在吗?
所以我目前的风险模型大概是这样的——
- 中毒/无效数据;
- 在服务器上记录/监控,以及“在线”修改/监控;
- 将查询绑定到源 IP / DNS 匿名化。
如果我不使用 DNS 代理/匿名化,那么只有 2 个选项。我可以自己解决从根服务器向下的所有问题,在这种情况下,我相信每个域上的每个 DNS 服务器都不会记录不太可能的查询,但是识别查询目标不太容易,因为生成的子域查询分布非常广泛。如果我使用公共解析器,我会将“我所有的鸡蛋放在一个篮子里”,因为他们会看到整个目标域,而不仅仅是其中的一部分,而且我相信它们不会被记录,这也可能是不现实的。所以 DNS 匿名化似乎是必要的,但它是否现实尚不清楚。
我很高兴投入工作来解决这个问题,我相信我可以改进我正在做的事情。但是将需要解决方法,因为 DNS 从根本上说是不安全的。
鉴于 DNS 的当前状态和匿名技术的当前状态,对于 DNS 查询缓解威胁的最佳方法是什么?