djbdns/dbndns dnscache 查询仅限 ipv6 的名称服务器?

djbdns/dbndns dnscache 查询仅限 ipv6 的名称服务器?

我已经(尝试)在 Ubuntu 14.04(Trusty)上设置 dnscache,以实现双栈来服务请求和查询权威名称服务器。

需要明确的是,我正在使用 dbndns 包,它有 fefe 的 IPv6 补丁。

我安装了 dbndns 和 dnscache-run 包。我确保/etc/service/dnscache/env/IP0.0.0.0/etc/service/dnscache/env/IPSEND0.0.0.0

我还在中添加了我们的 IP 范围/etc/service/dnscache/root/ip

我现在可以dig在另一台机器上通过 IPv4 和 IPv6 加载 aaaa 和 a 记录。但 testipv6.com 有一个从仅 IPv6 权威名称服务器加载记录的测试。为了测试这一点,它加载了 URLhttp://ds.v6ns.test-ipv6.com/ip/?callback=ds.v6ns.test-ipv6.com?. 如果我使用(谷歌的 IPv6 启用 DNS 服务器)挖掘该主机名8.8.8.8,我会得到一个 AAAA 记录。但是对我的 dbndns 缓存(通过 IPv4 和 IPv6)执行相同操作不会返回任何结果。

IPSEND 是否需要更改?如果需要,该怎么做?我不想破坏 IPv4 专属权威名称服务器的解析功能。

答案1

我遇到了同样的问题,我发现通过从 Fefe 的补丁升级test23到他的test27补丁可以解决这个问题;具体来说,diff 可以query.c解决这个问题。

主要的变化如下:

-dtype = z->level ? DNS_T_A : z->type;
+dtype = z->level ? (z->ipv6[z->level] ? DNS_T_AAAA : DNS_T_A) : z->type;

但是,第 950 行左右的 if 语句中缺少一个括号(我现在会向 Fefe 报告),dtype如果你安装了来自的安全补丁,你也需要进行不同的更改http://www.your.org/dnscache/应用(您可能应该这样做)。

我维护了一个高度合并和定制的版本(用于支持 OpenBSD 风格的 IPv6),但是这是我的 query.c 补丁这应该可以帮助您合并它们。

IPSEND::当然,必须这样才能正常工作。您提到的测试主机ds.v6ns.test-ipv6.com在更改后对我来说是可以工作的,之前却失败了,所以我很确定就是这个原因。

答案2

不幸的是,即使修补了 dbndns,它仍然无法正常工作。

您需要两个 dnscache 实例才能使其工作,一个具有特定的 IPv4 地址(像之前一样使用它),另一个具有特定的 IPv6 地址:

root@fw0:/service# grep '' dnscache*/env/IP*
dnscache/env/IP:10.66.1.1
dnscache/env/IPSEND:198.51.100.1
dnscache6/env/IP:2001:db8:10:30::1
dnscache6/env/IPSEND:0.0.0.0

将其替换10.66.1.1为您的私有 IPv4、198.51.100.1公有 IPv4 和2001:db8:10:30::1(公有的,呵呵)IPv6 地址。然后它对我来说就起作用了:

# dig aaaa ds.v6ns.test-ipv6.com @2001:db8:10:30::1

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> aaaa ds.v6ns.test-ipv6.com @2001:db8:10:30::1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32403
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ds.v6ns.test-ipv6.com.         IN      AAAA

;; ANSWER SECTION:
ds.v6ns.test-ipv6.com.  360     IN      AAAA    2001:470:1:18::119

相关内容