Вопрос или проблема
Я запускаю сервер имен bind 9.16.33 на Debian. Он работал нормально, но вдруг несколько доменов перестали работать. Логи named показывают:
dns_master_load: ki9.us.db:3: TTL 604800 превышает установленное max-zone-ttl 86400
dns_master_load: ki9.us.db:3: вне диапазона
зона ki9.us/IN: загрузка из мастер-файла ki9.us.db не удалась: вне диапазона
зона ki9.us/IN: не загружена из-за ошибок.
Это произошло неожиданно посреди ночи, не после внесения каких-либо изменений.
В какой-то момент с последнего переопределения ключа dnssec я добавил несколько новых записей с TTL 604800. max-zone-ttl
является частью dnssec-policy
. Согласно документации v9.18:
Это указывает максимальное допустимое значение TTL для зоны. Когда загружается файл зоны, любая запись с TTL, превышающим max-zone-ttl, приводит к отклонению зоны.
Это гарантирует, что при переходе на новый DNSKEY старый ключ останется доступным до тех пор, пока записи RRSIG не истекут из кэшей. Опция max-zone-ttl обеспечивает, чтобы максимальный TTL в зоне не превышал известного и предсказуемого значения.
Таким образом, проблема не проявилась до момента ротации ключей. Я использовал значение dnssec-policy
по умолчанию, которое, очевидно, имеет значение max-zone-ttl
равное 86400.
Вместо того чтобы изменять свои записи, я решил увеличить максимальное значение в named.conf.local
. Вот что было, когда это не работало:
zone "ki9.us" {
dnssec-policy default;
....
};
И я изменил это на следующее:
dnssec-policy "bigttl" {
max-zone-ttl 604800;
};
zone "ki9.us" {
dnssec-policy bigttl;
....
};
После этого я перезапустил bind, и проблема была решена. Новая политика “bigttl” должна была быть определена только один раз, а затем ее можно было использовать в разделе зоны каждого из моих доменов.
Ответ или решение
Ваша проблема связана с ошибкой, возникающей при загрузке зоны DNS, где значение TTL (Time to Live) превышает максимально допустимое значение, установленное в конфигурации BIND. Сообщение об ошибке в журналах указывает, что значение TTL 604800 (7 дней) превышает установленное значение max-zone-ttl 86400 (1 день).
Причина проблемы
Как вы уже правильно заметили, данное ограничение введено для обеспечения того, чтобы при смене ключа DNSKEY старый ключ оставался доступным до тех пор, пока записи RRSIG не истекут из кэша. Это позволяет гарантировать предсказуемое время жизни для записей зоны.
Проблема могла возникнуть после автоматической ротации ключей DNSSEC, когда все новые записи с TTL 604800 начали вызывать исключение при загрузке зоны.
Решение проблемы
Чтобы решить данную проблему, вы приняли правильное решение — изменить параметры конфигурации, увеличив значение max-zone-ttl. Вот шаги, которые вы предприняли:
-
Вы создали новую политику DNSSEC с именем "bigttl" и установили для нее max-zone-ttl 604800. Ваш код выглядит следующим образом:
dnssec-policy "bigttl" { max-zone-ttl 604800; };
-
В конфигурации зоны для вашего домена ki9.us вы заменили ссылку на политику
default
наbigttl
:zone "ki9.us" { dnssec-policy bigttl; .... };
-
После внесения изменений вы перезапустили службу BIND, и проблема была устранена.
Итоги
Теперь все записи в зоне ki9.us будут корректно загружаться с установленным TTL 604800, и ваша DNS-система будет функционировать как ожидалось. Если в будущем вы будете добавлять записи с высоким TTL, убедитесь, что вы либо скорректировали значение max-zone-ttl, либо контролируете TTL добавляемых записей в соответствии с текущими ограничениями.
Если у вас будут дополнительные вопросы или возникнут проблемы с конфигурацией DNSSEC, не стесняйтесь обращаться за помощью.