bind9 тихо переключается на случайные именованные серверы при истечении времени разрешения

Вопрос или проблема

У меня на роутере PC установлен bind9. Он служит DNS-сервером для всех машин в моей домашней сети. Он настроен так, чтобы только перенаправлять DNS-запросы на stubby (слушающий локально на порту 54321), который затем отправляет эти DNS-запросы безопасно на какой-то глобальный DNS-сервер через TLS. В целом это работает нормально, если только не возникает тайм-аут, вот так (взято из системных журналов):

Feb 05 15:51:19 router named[512]: timed out resolving 'accounts.youtube.com/A/IN': 127.0.0.1#54321

Когда я включил tcpdump, я обнаружил, что эти запросы с тайм-аутом отправляются в открытом тексте на порт 53 на случайные (?) имена серверами. Не имея терпения разбираться с этим, я просто заблокировал исходящие пакеты на порт 53, и теперь в системном журнале появились новые записи (естественно, больше таких запросов видно в PCAPS от tcpdump нет) после логов с тайм-аутами:

Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.5.6.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.33.14.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.26.92.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.31.80.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.35.51.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.42.93.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.54.112.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.43.172.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.48.79.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.52.178.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.41.162.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.55.83.30#53
Feb 05 15:51:19 router named[512]: permission denied resolving 'accounts.youtube.com/A/IN': 192.12.94.30#53

Что происходит? Почему bind9 переключается на все эти DNS-серверы, полностью игнорируя stubby, который настроен как единственный форвардер? Это файл named.conf.options:

options {
    directory "/var/cache/bind";

    forwarders {
            127.0.0.1 port 54321;
    };

    dnssec-validation yes;

    allow-recursion { localhost; localnets; 192.168.0.0/24; };

    listen-on { 127.0.0.1; 192.168.0.0; };
    listen-on-v6 { none; };
};

У меня DHCP-сервер настроен так, чтобы он устанавливал все сетевые интерфейсы для всех машин в сети (включая роутер), чтобы они использовали только мой собственный DNS-сервер, работающий на роутере PC, поэтому я считаю (и журналы, похоже, подтверждают это), что bind9 сам решает попробовать другие DNS-серверы, без моего явного разрешения. Возникает три вопроса:

  1. Почему это происходит?
  2. Откуда он берет имена серверов для переключения?
  3. Как отключить его от этого? Хотя блокировка исходящего трафика на порт 53 работает, у меня все же журналы засорены его попытками попробовать другие DNS-серверы для разрешения запросов с истекшим временем ожидания, и мне это не нравится.

Эти DNS-серверы являются ‘корневыми’ DNS-серверами. Подробности см. https://kb.isc.org/docs/aa-01309.

Ответ или решение

Теория

Проблема, которую вы описали, заключается в поведении DNS-сервера BIND9, который после истечения времени ожидания при обращении к stubby неожиданно начинает выполнять запросы к ряду внешних DNS-серверов. Это происходит из-за того, что BIND9 пытается использовать корневые серверы DNS в целях резолвинга запросов, когда не удается получить ответ от указанных форвардеров.

Пример

BIND9 — это мощный инструмент для резолвинга DNS-запросов, часто используемый для организации кэширования и форвардинга DNS в локальных сетях. Когда сетевой администратор настраивает BIND9 в режиме форвардера, как в вашем случае, ожидание состоит в том, что все DNS-запросы будут направлятся на указанный форвардер (в вашем случае, stubby, функционирующий на 127.0.0.1:54321).

Стандартная конфигурация BIND9 предполагает, что при невозможности получения ответа от своих форвардеров, сервер попытается использовать корневые DNS сервера напрямую (например, 192.5.6.30, 192.33.14.30 и другие, которые вы видите в логах). Эти IP-адреса относятся к корневым серверам, которые предоставляют начальные точки для резолвинга запросов любого домена.

Применение

Почему BIND9 это делает?

По умолчанию, BIND9 настроен так, чтобы обеспечивать высокую доступность и надежность резолвинга DNS-запросов. При возникновении проблем с указанными форвардерами, BIND9 автоматически переходит на использование корневых серверов, чтобы не нарушать процесс DNS-резолвинга.

Откуда берутся дополнительные DNS-серверы?

Адреса DNS-серверов, которые вы видите в логах, это список корневых DNS-серверов, жестко закодированных в конфигурации BIND9. Они выступают в качестве резервных источников информации.

Как отключить использование этих серверов?

Если вы хотите предотвратить резолвинг через корневые серверы, можно внести изменения в конфигурационный файл named.conf.options. Вам следует использовать опцию forward only; внутри секции options, которая заставит BIND9 использовать только указанные форвардеры, не прибегая к резолвингу через корневые DNS-серверы. Вот модифицированный пример вашего файла named.conf.options:

options {
    directory "/var/cache/bind";

    forwarders {
        127.0.0.1 port 54321;
    };

    forward only;

    dnssec-validation yes;

    allow-recursion { localhost; localnets; 192.168.0.0/24; };

    listen-on { 127.0.0.1; 192.168.0.0; };
    listen-on-v6 { none; };
};

Используя директиву forward only;, вы говорите BIND9 игнорировать любые другие источники информации, кроме указанных форвардеров.

Заключение

Настройка BIND9 в роли форвардера требует четкого понимания его поведения по умолчанию и изменений, которые необходимо внести, чтобы полностью контролировать процесс резолвинга DNS-запросов. Ваша текущая настройка с блокировкой трафика на порту 53 временно решает проблему отправки неожиданных запросов, но правильная конфигурация решит это на уровне программного обеспечения, устраняя ненужные попытки резолвинга и добавляя уверенности в безопасности вашего сетевого окружения.

Оцените материал
Добавить комментарий

Капча загружается...