在bind9中返回特定域上的A记录,但不返回AAAA记录

Ole*_*olf 5 domain-name-system bind

我已经使用 root-hints 方法(像这样)设置了一个带有 bind9 的缓存 DNS 服务器。它按预期工作 - 但是,我们的 IPv6 流量通过我所在国家/地区之外的网关,这使 Netflix 认为我们是从另一个国家/地区访问的,这会阻止我的孩子观看他们最喜欢的节目。因此,我在想,如果我可以阻止 bind9 返回 netflix.com 的任何 AAAA 记录,客户端将只尝试 IPv4 连接到 Netflix。

也就是说:如何配置bind9,以便在为 netflix.com 返回有效的 A 记录结果时抑制对 netflix.com 的 AAAA 记录查找?

我意识到我可以创建一个仅包含 Netflix 域的区域文件,并让它包含我能找到的 netflix.com 的所有 A 记录,而不包含 AAAA 记录。但我想知道上面的情况是否可行,这样我就不必更新区域文件中的 A 记录。

小智 5

我知道这是一篇旧文章,但是(至少)在我的 bind 版本(Ubuntu 18.04 上的 9.11)中,我发现您可以在视图中将 filter-aaaa-on-v4 与 match-destinations 结合使用。

它仍然需要你在 2 个 IP 地址上进行绑定监听,但至少你不需要多个实例。

192.168.1.1是普通的dns服务器。192.168.1.2 是 ipv6 屏蔽地址之一。

我的配置看起来有点像这样(部分):

options {
    listen-on port 53 { 192.168.1.1; };
    listen-on port 5353 { 192.168.1.2; };
};

view "ipv4only" {
  match-destinations { 192.168.1.2/24; };
  filter-aaaa-on-v4 yes;
};

view "normal" {
  match-clients { 192.168.1.1/24; };
  zone "netflix.com" {
    type forward;
    forward only;
    forwarders { 192.168.1.2 port 5353; };
  };
};
Run Code Online (Sandbox Code Playgroud)

当域与 netflix.com 匹配时,这使得 Bind 在另一个 IP 上对其自身进行正向查找。

这消除了对两个实例的需要,但遗憾的是需要 2 个内部 IP 地址。如果我们还可以在“match-destinations”中指定端口号,那就太好了。

  • 您可以使用本地主机网络 (127.0.0.0/8) 中的 IP 之一作为第二个 IP。我个人使用 127.0.0.2 - 它就像 Linux 上的 Bind 的魅力一样。这样您就不会浪费“常规”IP。 (2认同)

Ole*_*olf 2

正如注释所示,bind 可能无法做到这一点。但是,我设法通过解决方法解决了该问题:

首先,我使用以下配置文件添加了第二个监听端口 5353 的绑定服务:

acl mynetworks {
    localhost;
    (And a list with my various LAN networks such as 192.168.0.0/24;)
};

acl everyone {
    any;
};

options {
    directory "/var/cache/bind-ipv4limited";
    filter-aaaa-on-v4 yes;
    #dnssec-validation auto;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    dnssec-lookaside . trust-anchor dlv.isc.org.;
    recursion yes;
    allow-query { mynetworks; };

    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward only;

    auth-nxdomain no;    # conform to RFC1035
    listen-on port 5353 { any; };
};
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用“filter-aaaa-on-v4 yes;” 所以它会忽略 AAAA 请求。

然后在原来的绑定服务中,我为 netflix.com 添加了一个使用上述 DNS 服务的区域:

zone "netflix.com" {
    type forward;
    forward only;
    forwarders {
        127.0.0.1 port 5353;
    };
};
Run Code Online (Sandbox Code Playgroud)

这是一个丑陋的黑客,但它似乎有效。