在 Debian 上使用 BIND9 的 DNSCrypt
我被困住了。在美國 ISP 法律最近發生變化之後,我正在嘗試利用 DNSCrypt。這是我的設置:
- 兩台帶有 BIND 9.9.5-9 的 Debian Jessie 伺服器,已完全修補(使用穩定分支)
- 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
錯誤,但是 dig against127.0.1.2
仍然有效。除此之外,從我的路由器執行 pcap 會顯示大量通過埠 53(而不是 dnscrypt 使用的 443)到各種根伺服器的出站 DNS 查詢。
所以最終:
- 我需要做什麼才能讓 BIND9 通過 DNSCrypt 隧道正確轉發查詢?
- 如何禁用 BIND9 將數據發送到根伺服器(我已嘗試配置
forward only;
,recursion no;
但似乎不起作用)?
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 數據的真實性根本不一致,所以我不希望這種情況發生改變。