Я настроил кэширующий DNS-сервер с помощью bind9, используя метод root-hints (например,этот). Работает как надо, но наш трафик IPv6 проходит через шлюз за пределами моей страны, что заставляет Netflix думать, что мы из той другой страны, и это не позволяет моим детям смотреть их любимые шоу. Поэтому я думаю, что если я смогу запретить bind9 возвращать какие-либо записи AAAA для netflix.com, клиенты будут пытаться подключаться к Netflix только по IPv4.
То есть: как настроить bind9 так, чтобы поиск записей AAAA для netflix.com был подавлен, а для netflix.com были возвращены допустимые результаты записи A?
Я понимаю, что могу создать файл зоны только с доменом Netflix и сделать так, чтобы он содержал все записи A для netflix.com, которые я смогу найти, и никаких записей AAAA. Но мне интересно, возможно ли это, чтобы мне не пришлось обновлять записи A в файле зоны.
решение1
Я знаю, что это старый пост, но (по крайней мере) в моей версии bind (9.11 на Ubuntu 18.04) я обнаружил, что можно использовать filter-aaaa-on-v4 в сочетании с match-destinations в представлении.
Вам по-прежнему потребуется прослушивание bind на 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; };
};
};
Это заставляет bind выполнять прямой поиск самого себя на другом IP-адресе, когда домен совпадает с netflix.com.
Это устраняет необходимость в двух экземплярах, но, к сожалению, требует 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;
};
};
Это отвратительный трюк, но, похоже, он работает.