#Что произошло и как распознать неисправность
Внутренние пользователи отправляют DNS-запросы на собственный BIND9, но внешние домены не разрешаются: ответ REFUSED, отсутствует флаг RA или клиент видит отказ службы. При этом записи зон, за которые сервер отвечает авторитетно, могут открываться нормально. Причина часто в recursion, allow-recursion, allow-query-cache или сетевом доступе. Рекурсия нужна клиентам доверенной сети, но публичный рекурсор без ограничений опасен: его могут использовать для атак с усилением трафика. Исправлять нужно только допуск конкретной внутренней подсети и прослушивание на её интерфейсе, а не разрешать запросы всем.
#Причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Подсеть отсутствует в ACLАдминистратор настроил allow-recursion только для localhost или старой сети. | Из сети REFUSED, с самого DNS-сервера запрос проходит. | Добавить фактическую доверенную подсеть в именованный список доступа. |
Ограничен кеш запросовallow-query-cache может накладывать собственные ограничения. | Ответы локальных зон работают, рекурсивные — нет. | Согласовать allow-recursion и allow-query-cache. |
Рекурсия выключена в нужном viewПравило recursion no действует только для подключённого клиента. | Другие VLAN работают, одна — REFUSED. | Проверить выбор view по клиентскому IP. |
| Нет доступа к DNS через UDP или TCPКлиент не достигает порта 53 либо сервис слушает другой адрес. | Вместо REFUSED запрос оканчивается временем ожидания. | Проверить listen-on, маршрут и действующие правила фильтрации. |
#Пошаговая диагностика и исправление
- Проверьте отказ именно из проблемной сетиНа компьютере внутри нужной подсети откройте терминал и выполните
dig @192.0.2.53 example.org A +recurse, заменив адрес DNS-сервера и домен. Если сервер отвечаетstatus: REFUSEDбез RA, вероятно запрет. Если TIMEOUT — проверьте сеть и порт 53. Если NOERROR — настройка уже разрешает запрос, а проблема может быть в устройстве, которое использует другой DNS. - Сравните результат непосредственно с DNS-сервераВойдите по SSH на Linux-сервер и выполните
dig @127.0.0.1 example.org A +recurse. Если localhost успешно отвечает, а клиентам отказано, запишите обе пары адресов и результаты. Если локальный запрос тоже REFUSED, проверьте отключённую рекурсию, view и обработку localhost. Не пытайтесь исправлять отказ изменением публичной зоны домена. - Определите реальную подсеть клиентовНа клиенте Linux выполните
ip -br addr, на Windows откройте PowerShell и введитеipconfig. Запишите локальный IPv4 и маску; отличайте адрес устройства, адрес VPN и внешний IP. Если запрос приходит через NAT, BIND видит адрес транслятора, а не конечного пользователя. Для добавления разрешения нужен фактический адрес источника запроса, подтверждённый журналом или сетевой схемой. - Прочитайте активные правила и viewsНа DNS-сервере с SSH запустите
sudo named-checkconf -pи найдитеrecursion,allow-recursion,allow-query-cache,allow-query-cache-on,view,match-clients. Вывод может содержать TSIG-ключи: не публикуйте его. Для чтения без раскрытия секретов используйте вывод с поддерживаемой вашей версией опцией скрытия ключей. Проверьте также, не включено лиrecursion noв нужной view. - Подготовьте ограниченное изменениеСоздайте копию
named.conf.optionsлибо файла, в котором на вашей системе находятся параметры рекурсии. Добавьте только доверенный диапазон, например вacl "trusted_lan" { 192.0.2.0/24; localhost; };и используйте его вallow-recursionи при необходимостиallow-query-cache. Это учебный диапазон: замените его реальной внутренней подсетью, избегайтеany;и не копируйте ACL в неправильную вложенность. - Проверьте синтаксис и примените настройку без отключения защитыПо SSH выполните
sudo named-checkconfи убедитесь, что ошибок нет. Еслиnamed-checkconfвозвращает строку с ошибкой, не перечитывайте конфигурацию; устраните строку или верните копию. Затем выполнитеsudo rndc reconfigдля перечитывания конфигурации BIND. При отказе rndc сначала проверьте управляющее соединение и журналы, не перезапускайте всю сеть. - Проверьте внутреннего и постороннего клиента отдельноПовторите
dig @192.0.2.53 example.org A +recurseиз доверенной сети. Ожидается корректный рекурсивный ответ с RA. Если есть возможность, проверьте с постороннего адреса: рекурсия должна оставаться запрещённой. Отдельно убедитесь, что авторитетные публичные зоны отвечают независимо от доступа к кешу. Никогда не отправляйте из открытой сети тестов больше необходимого. - Если результат не меняется, выясните источник конфигурацииПроверьте, что у BIND действительно выбран нужный view, клиент не использует DNS-over-HTTPS в обход локального сервера, а firewall не меняет исходный IP. Сверьте журналы и состояние службы. Для отката восстановите копию ACL, затем
sudo named-checkconfиsudo rndc reconfig. До устранения причины не делайте DNS-сервер открытым рекурсором. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить результат и что делать при неуспехе
Успех означает корректное разрешение внешних имён из доверенной сети при сохранении запрета рекурсии для остальных. При невозможности подтвердить ограничения не публикуйте сервер как публичный DNS до проверки доступа.