在bind9中傳回特定網域上的A記錄,但不傳回AAAA記錄

在bind9中傳回特定網域上的A記錄,但不傳回AAAA記錄

我已經使用 root-hints 方法(例如)。它按預期工作——但是,我們的IPv6 流量通過我所在國家/地區之外的網關,這使Netflix 認為我們是從另一個國家/地區訪問的,這會阻止我的孩子觀看他們最喜歡的節目。因此,我在想,如果我可以阻止 bind9 返回 netflix.com 的任何 AAAA 記錄,客戶端將只嘗試 IPv4 連接到 Netflix。

也就是說:如何設定bind9,以便在為 netflix.com 傳回有效的 A 記錄結果時抑制對 netflix.com 的 AAAA 記錄查找?

我意識到我可以創建一個僅包含 Netflix 網域的區域文件,並讓它包含我能找到的 netflix.com 的所有 A 記錄,而不包含 AAAA 記錄。但我想知道上面的情況是否可行,這樣我就不必更新區域文件中的 A 記錄。

答案1

我知道這是一篇舊文章,但(至少)在我的 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; };
  };
};

當網域與 netflix.com 相符時,這使得 Bind 在另一個 IP 上對其自身進行正向查找。

這消除了兩個實例的需要,但遺憾的是需要 2 個內部 IP 位址。如果我們還可以在「match-destinations」中指定連接埠號,那就太好了。

答案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; };
};

這裡的關鍵是使用“filter-aaaa-on-v4 yes;”所以它會忽略 AAAA 請求。

然後在原始的綁定服務中,我為 netflix.com 新增了一個使用上述 DNS 服務的區域:

zone "netflix.com" {
    type forward;
    forward only;
    forwarders {
        127.0.0.1 port 5353;
    };
};

這是一個醜陋的黑客,但它似乎有效。

相關內容