У меня проблемы с тем, чтобы автоматическое подписание DNSSEC было фактически автоматическим. Он не может подписать автоматически (ну, он подписывает автоматически, но, очевидно, подписывает не то, см. Ниже). Кроме того, загадочные ошибки иногда возникают в непредсказуемое время, а затем, кажется, снова исчезают.
Настройка:
zone "example.com" in {
# file "/etc/bind/zones/db.example.com"; # raw data comment out
file "/etc/bind/zones/db.example.com.signed";
key-directory "/etc/bind/keys";
auto-dnssec maintain;
inline-signing yes;
};
Потом подписываю зону:
dnssec-signzone -o example.com -t -k ../keys/Kexample.com.+008+04309.key db.example.com ./keys/Kexample.com.+008+21996.key
и обновляю все:
rndc reload
rndc reconfig
rndc loadkeys example.com
rndc signing -list example.com
Вроде все заработало. Никаких ошибок, даже в syslog
, и dig @ ns.example.com example.com
отвечает должным образом. Как и dig @ ns.example.com + dnssec + cd + multiline example.com
. Выглядит здоровым, как лошадь. Ну, почти.Когда я смотрю на каталог: ls -la / etc / bind / zone
, я вижу вещи, которые показались мне странными:
-rw-r--r-- 1 root root 4578 Apr 14 11:06 db.example.com
-rw-r--r-- 1 root bind 21189 Apr 14 13:01 db.example.com.signed
-rw-r--r-- 1 bind bind 512 Apr 14 13:01 db.example.com.signed.jbk
-rw-r--r-- 1 bind bind 4720 Apr 14 13:15 db.example.com.signed.signed
-rw-r--r-- 1 bind bind 67248 Apr 14 13:24 db.example.com.signed.signed.jnl
Подписанные подписанные файлы? Хм? ОК, но все работает. Ну почти все. Вскоре после этого я начинаю видеть ошибки в системном журнале:
named[25494]: malformed transaction: /etc/bind/zones/db.example.com.signed.signed.jnl last serial 2021041421 != transaction first serial 2021041404
named[25494]: zone example.com/IN (signed): zone_sign:dns_journal_write_transaction -> unexpected error
Они будут появляться пачками, повторяясь раз в минуту, а затем исчезнут на некоторое время (нет предсказуемой закономерности). Кажется, они исчезают, когда я говорю rndc sync -clean
. Новая копия db.example.com.signed.signed
появляется время от времени в непредсказуемых временных масштабах: может быть, через 5 минут, может через полчаса, может быть, через несколько часов.
Неважно. Теперь у нас все хорошо. Игнорируйте вещи в течение месяца, вернитесь и обнаружите, что подписи DNSSEC истекли! Как это может быть? ls -la
показывает, что метки времени на db.example.com.signed.signed
и db.example.com.signed.signed.jnl
являются недавними: очевидно, bind9 считает, что их нужно регулярно обновлять. Отметка времени на db.example.com.signed
устарела - ей месяц, и, глядя на ее содержимое, я вижу, что действительно RRSIG SOA
имеет отметку времени с истекшим сроком действия Это.
Очевидно, что-то не так. Поскольку наличие файла с двойной подписью db.example.com.signed.signed
кажется неправильным, а с db.example.com.подписанный
никогда не обновлялся автоматически, я так понимаю, ага! Я не должен был подписывать вещи вручную! Итак, я возвращаюсь и редактирую файл зоны, чтобы он читался:
zone "example.com" in {
file "/etc/bind/zones/db.example.com"; # oh, maybe use this, the unsigned zone
# file "/etc/bind/zones/db.example.com.signed"; # manual signing must be wrong.
...
};
Но если я использую вышеупомянутое, не будет комбинации запуска и остановки bind9 или выполнения команд rndc, которые заставили бы все работать: ничего не подписано, и зона не будет обслуживаются, и ошибок нет. Это включает попытку rndc sign example.com
, которая, похоже, ничего не делает: нет ошибок, нет сообщений, нет изменений в том, что обслуживается.
Я, конечно, могу решить вышесказанное, вставив руководство dnssec-signzone
в файл crontab, но это, похоже, позволяет обойти весь смысл «автоматической подписи». Что здесь не так? Что я сделал не так?
Это с именем -v
версия BIND 9.11.3-1ubuntu1.14-Ubuntu
.
Я нашел "ядерный вариант", который, похоже, восстанавливает систему в состояние, соответствующее документации. Он состоит из следующих шагов:
service bind9 stop
Остановите демон, пока мы работаем. Другие серверы имен подхватят его работу.
Далее, удалите автогенерируемые/кэшированные файлы:
rm -r /var/cache/bind/*
Этот каталог содержит различные автогенерируемые файлы. Похоже, что они содержат устаревшие данные, которые мешают интерпретации файлов зон и состояния ZSK/KSK (т.е. содержат кэшированные значения, которые не подходят). Они будут воссозданы при запуске.
Далее отредактируйте все файлы зон (не только некоторые из них!) и увеличьте серийные номера на 50-100. Это число должно быть достаточно большим, чтобы избежать потенциальных жалоб на неправильно сформированную транзакцию, последняя серия != первая серия
. Это большое увеличение может потребоваться выполнить несколько раз.
Редактируя все файлы зон, преобразуйте любые $INCLUDE
утверждения для использования абсолютных путей вместо относительных. Хотя относительные пути отлично работают для неподписанных зон, похоже, что когда зона подписана, относительный путь интерпретируется неправильно (это похоже на ошибку bind9
... трудно понять, почему это имеет значение).
Есть также больше автогенерируемых/кэшируемых файлов, которые находятся в /etc/bind/zones
; их следует удалить.
rm *.signed *.jnl *.jbk
Все эти файлы будут созданы заново при запуске сервера. Они содержат кэшированную информацию (например, старые серийные номера), которая приводит к ложным ошибкам.
Не используйте dnssec-signzone
. Он не нужен, и его использование приведет к созданию файлов, конфликтующих с автоматическим подписанием зон.
Наконец, перезапустите сервер.
service bind9 start
Вышеуказанных действий, похоже, достаточно, чтобы очистить непоследовательные кэшированные данные, и на данный момент, похоже, генерируются действительные, подписанные зоны для меня. Потребуется некоторое количество TTL и переносов, чтобы увидеть, будет ли все работать дальше. На данный момент, по крайней мере, поведение соответствует документации и "здравому смыслу", для меня.