我已经(尝试)在 Ubuntu 14.04(Trusty)上设置 dnscache,以实现双栈来服务请求和查询权威名称服务器。
需要明确的是,我正在使用 dbndns 包,它有 fefe 的 IPv6 补丁。
我安装了 dbndns 和 dnscache-run 包。我确保/etc/service/dnscache/env/IP
是0.0.0.0
和/etc/service/dnscache/env/IPSEND
是0.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