我陷入了困境。鉴于美国 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
并不是您想要的,因为转发本质上被视为递归的特殊情况。
定义后forwarders
,forward only
BIND 应将所有递归查询发送到您的转发器。
即,类似下面的操作options
应该可以工作:
recursion yes;
forwarders { 127.0.1.2; };
forward only;
关于SERVFAIL
错误,请检查 BIND 日志以查看实际发生的情况。named-checkconf -zj
也可能对于验证配置本身有用。
话虽如此,我确实有一个想法可以解释这些问题。
如果您必须使用 OpenDNS,请确保在 BIND 中禁用 DNSSEC 验证,因为 OpenDNS 服务与 DNSSEC 不兼容。
审查(更改)DNS 数据的想法从根本上与验证 DNS 数据的真实性相矛盾,因此我不希望这种情况发生改变。