Как долго тайм-аут DNS кэшируется?
Если ни один из серверов для всей зоны не может быть установлен, как долго этот факт будет кэшироваться?
4 ответа
Согласно 1998-03 rfc2308#section-7.1
, если разрешение не является успешным, и приводит к SERVFAIL
(например, из тайм-аута), тогда он МОЖЕТ быть кэширован, но если это так, он НЕ ДОЛЖЕН кэшироваться дольше 5 минут.
На практике кажется, что он часто вообще не кэшируется или, если кэшируется, кэшируется в течение чисто символического промежутка времени, например одной секунды.
До появления BIND 9.9.6-S1 (выпущенного в 2014 году), по-видимому,
SERVFAIL
не был кеширован вообще.Это было введено с коммитом
a878301
(2014-09-04).Например, во время этого вопроса и во всех версиях BIND, выпущенных до 2014 года, рекурсивный преобразователь BIND НЕ кэшировал
SERVFAIL
, если верить вышеуказанному коммиту и документации о первом введении в 9.9.6-S1.В последней версии BIND по умолчанию
servfail-ttl
настройка была установлена на1s
с 2015 года (по состоянию на 2016 год), и был жестко закодирован до30s
(вместо RFC-обязательного потолка300s
).Смотрите коммит
90174e6
(2015-10-17).В течение 2014/2015 по умолчанию было
10s
и потолок был300s
, но согласно приведенным ниже цитатам, более высокие цифры оказались необоснованно пессимистичными.
Примечательные ссылки (с соответствующими цитатами) включают в себя:
https://kb.isc.org/article/AA-01178/ (2014 / 2016-01-07)
Результат кэширования ответов SERVFAIL включал в себя некоторые ситуации, в которых он был признан вредным для клиента, особенно когда причины представления SERVFAIL клиенту были временными и в сценарии, где немедленная повторная попытка запроса была бы более подходящее действие.
http://cr.yp.to/djbdns/third-party.html (2003-01-11)
Вторая тактика состоит в том, чтобы утверждать, что широко распространенные клиенты DNS будут делать что-то особенно плохое, когда они не могут получить доступ ко всем серверам DNS. Проблема с этим аргументом заключается в том, что утверждение является ложным. Любой такой клиент явно глючит и не сможет выжить на рынке: подумайте, что произойдет, если маршрутизаторы клиента ненадолго выйдут из строя, или если сеть клиента будет временно затоплена.
В итоге, SERVFAIL
маловероятно, что он будет кэширован, но даже если он будет кэширован, это будет максимум двузначное или даже однозначное число секунд.
В BIND 9.11, SERVFAIL
Ответ по умолчанию кэшируется на 1 секунду.
Из Справочного руководства администратора BIND:
SERVFAIL-ТТЛ
Устанавливает количество секунд для кеширования
SERVFAIL
ответ из-за сбоя проверки DNSSEC или другого общего сбоя сервера. Если установлено в 0,SERVFAIL
кеширование отключено.SERVFAIL
кеш не используется, если запрос имеетCD
(Проверка отключена) бит установлен; это позволяет повторить запрос, который не удался из-за проверки DNSSEC, не дожидаясьSERVFAIL
TTL истекает.Максимальное значение составляет 30 секунд; любое более высокое значение будет тихо уменьшено. По умолчанию это 1 секунда.
Это реализовано в соответствии с RFC 2308, хотя на практике максимальные значения времени ожидания, указанные в нем, были признаны проблематичными, поэтому и существует текущее значение по умолчанию.
Согласно http://cr.yp.to/djbdns/third-party.html
RFC 2182 утверждает, что сбои DNS не кэшируются; это утверждение является ложным.