我已經使用 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;
};
};
這是一個醜陋的黑客,但它似乎有效。