Назад | Перейти на главную страницу

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

Я установил кеширующий DNS-сервер с помощью bind9, используя метод корневых ссылок (например, этот). Это работает так, как нужно, но наш трафик IPv6 проходит через шлюз за пределами моей страны, что заставляет Netflix думать, что мы приехали из этой другой страны, и это мешает моим детям смотреть их любимые шоу. Итак, я думаю, что если я могу запретить bind9 возвращать какие-либо записи AAAA для netflix.com, клиенты будут пытаться подключаться к Netflix только по IPv4.

То есть: как мне настроить bind9, чтобы поиск записей AAAA для netflix.com подавлялся, в то время как действительные результаты A-записи возвращались для netflix.com?

Я понимаю, что могу создать файл зоны только с доменом Netflix, и он будет содержать все записи A для netflix.com, которые я могу найти, и никаких записей AAAA. Но мне интересно, возможно ли это, так что мне не нужно обновлять записи A в файле зоны.

Как указывается в комментариях, 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;
    };
};

Уродливый хакер, но, похоже, работает.

Я знаю, что это старый пост, но (по крайней мере) в моей версии bind (9.11 в Ubuntu 18.04) я обнаружил, что вы можете использовать filter-aaaa-on-v4 в сочетании с назначениями совпадений в представлении.

Он по-прежнему требует, чтобы вы прослушивали привязку по 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".