Debian 上的 DNSCrypt 与 BIND9

Debian 上的 DNSCrypt 与 BIND9

我陷入了困境。鉴于美国 ISP 法律最近发生了变化,我正尝试利用 DNSCrypt。以下是我的设置:

  • 两台 Debian Jessie 服务器,安装有 BIND 9.9.5-9,已完全修补(使用稳定分支)
  • dnscrypt-proxy 1.9.4(使用 libsodium18 1.0.12 从源代码编译)

为了进行测试,我只是尝试将 OpenDNS 解析器与 DNSCrypt 一起使用。我的目标是最终将我的流量发送到我使用的 VPS,然后转发到我想要的 DNS 服务器。本地 BIND 服务器也能够响应内部 DNS 查询,这一点很重要。我确实有一个需要能够在内部解析的区域。

我正在执行以下命令来启动 dnscrypt-proxy:

dnscrypt-proxy -R cisco -a 127.0.1.2 -d -L /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv -l /var/log/dnscrypt-proxy -m 6 -p /var/run/dnscrypt-proxy

(cisco 在包含的兼容解析器列表中是预定义的。这是 OpenDNS 服务器)。

我可以使用以下命令测试它是否有效:

dig @127.0.1.2 serverfault.com

它返回正确的查找结果。

然后我使用 127.0.1.2 的转发器配置 BIND,这时它就停止工作了。如果我现在运行dig命令,127.0.0.1我会得到一个SERVFAIL错误,但 dig127.0.1.2仍然有效。

除此之外,从我的路由器执行 pcap 显示通过端口 53(而不是 dnscrypt 使用的 443)向各个根服务器发出大量出站 DNS 查询。

因此最终:

  • 我需要做什么才能让 BIND9 通过 DNSCrypt 隧道正确转发查询?
  • 如何禁止 BIND9 向根服务器发送数据(我已尝试配置forward only;recursion no;但似乎不起作用)?

答案1

recursion no并不是您想要的,因为转发本质上被视为递归的特殊情况。

定义后forwardersforward onlyBIND 应将所有递归查询发送到您的转发器。

即,类似下面的操作options应该可以工作:

recursion yes;
forwarders { 127.0.1.2; };
forward only;

关于SERVFAIL错误,请检查 BIND 日志以查看实际发生的情况。named-checkconf -zj也可能对于验证配置本身有用。

话虽如此,我确实有一个想法可以解释这些问题。

如果您必须使用 OpenDNS,请确保在 BIND 中禁用 DNSSEC 验证,因为 OpenDNS 服务与 DNSSEC 不兼容。
审查(更改)DNS 数据的想法从根本上与验证 DNS 数据的真实性相矛盾,因此我不希望这种情况发生改变。

相关内容