Возвращает записи A, но не записи AAAA для определенного домена в bind9

Возвращает записи A, но не записи AAAA для определенного домена в bind9

Я настроил кэширующий 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;
    };
};

Это отвратительный трюк, но, похоже, он работает.

Связанный контент