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

dnsmasq кеш NOERROR с ОТВЕТОМ: 0, АВТОРИТЕТ: 0

Я использую общедоступный DNS-провайдер (nextdns.io), который блокирует некоторые домены. Эти заблокированные домены возвращают такой ответ, когда dig-ed:

; <<>> DiG 9.16.1-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63541
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.               IN      A

;; Query time: 66 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Jul 22 12:03:25 CDT 2020
;; MSG SIZE  rcvd: 33

Я использую dnsmasq на маршрутизаторе DD-WRT для обработки всех DNS-запросов от устройств в локальной сети. Есть ли способ настроить dnsmasq для кеширования этих NOERROR результаты с 0 ANSWER/AUTHORITY?

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

Я изучил справочную страницу dnsmasq, но флаги cache / ttl, которые я вижу, похоже, не влияют на эти типы ответов, поскольку они не являются отрицательными (например, NXDOMAIN) кэшируемые, но на них просто нет ответа. Я знаю, что могу явно обрабатывать определенные домены в моей конфигурации dnsmasq, добавляя такие записи, как address=/.example.com/::, но я бы предпочел добавить кеш / ttl в свой dnsmasq, чтобы кешировать отсутствие ответов в течение примерно 300 секунд, прежде чем снова пытаться запросить ответ из восходящего потока.

Основная проблема с точки зрения кеширования заключается в том, что это некоторая форма неправильного ответа (я бы подумал, что это неработающий NODATA исходя из предполагаемого намерения).

Кэширование DNS выполняется на основе некоторого TTL, для положительных ответов - TTL RRSet, а для отрицательных ответов - TTL кеша на основе SOA запись в AUTHORITY раздел (в частности, используется TTL MIN(SOA TTL, SOA.MINIMUM)).

Будет ли отрицательный ответ NXDOMAIN или NODATA (NOERROR с пустым ANSWER), эти типы ответов всегда имеют соответствующие SOA запись в AUTHORITY раздел.

Конечно, было бы лучше, если бы провайдер фильтрации DNS обслуживал действительные ответы также и для отфильтрованных доменов (т.е. NXDOMAIN или NODATA ответ).

Обойти проблему не всегда просто, так как это не тот тип ответа, который должен существовать, и не обязательно есть возможность поймать этот случай.

Однако вы используете dnsmasq, что согласно dnsmasq руководство имеет настройку, которая, казалось бы, справляется с этой ситуацией:

--neg-ttl=<time>
Отрицательные ответы от вышестоящих серверов обычно содержат информацию о времени жизни в записях SOA, которые dnsmasq использует для кэширования. Если в ответах от вышестоящих серверов эта информация отсутствует, dnsmasq не кэширует ответ. Эта опция дает значение по умолчанию для времени жизни (в секундах), которое dnsmasq использует для кэширования отрицательных ответов даже при отсутствии записи SOA.