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

Как обновить зону с помощью auto-dnssec: сохранить

Я использую авторитетную версию BIND 9.9.5-9 + deb8u8-Debian на Debian Jessie. У меня есть рабочая зона для robin.info который работает правильно (различные тесты сообщают об успехе, например, инструмент проверки DNS pingdom.com)

Я пытаюсь защитить его с помощью dnssec. Я следую инструкциям, данным в Руководство по BIND DNSSEC, глава 4 с легким началом. Я успешно сгенерировал ZSK и KSK и обновил свою зону, добавив строки, выделенные жирным шрифтом:

zone "robin.info" {
        type master;
        file "/etc/bind/zones/robin.info";
        include "/etc/bind/include-zones/acls";
        каталог ключей "/etc/bind/dnssec/robin.info/2016"; встроенное подписывание да; автоматическое поддержание DNS;
};

Я убедился, что нет .jnl, .jbk, .signed и .signed.jnl файлы присутствовали с файлом зоны, затем перезапустили привязку с rndc reload и подтвердил, что зона загружена и имеет записи DNSKEY, хотя в журнале было несколько ошибок:

11-Dec-2016 13:54:20.742 zone robin.info/IN/internal (signed): loaded serial 2016121111
11-Dec-2016 13:54:20.742 zone robin.info/IN/external (signed): loaded serial 2016121111
11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): receive_secure_serial: unchanged
11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): reconfiguring zone keys
11-Dec-2016 13:54:20.766 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:54:20.750
11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): receive_secure_serial: unchanged
11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): reconfiguring zone keys
11-Dec-2016 13:54:20.805 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121113 != transaction first serial 2016121111
11-Dec-2016 13:54:20.805 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error

Эти последовательные ошибки, кажется, вызывают проблемы, когда я хочу обновить свою зону. Вношу изменения в беззнаковой зоне /etc/bind/zones/robin.info, и увеличить мой серийный номер до 2016121121

11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): serial 2016121121 (unsigned 2016121121)
11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): could not get zone keys for secure dynamic update
11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): receive_secure_serial: not found
11-Dec-2016 13:57:58.659 malformed transaction: /etc/bind/zones/robin.info.jnl last serial 2016121121 != transaction first serial 2016121111
11-Dec-2016 13:57:58.659 zone robin.info/IN/external (unsigned): not loaded due to errors.
11-Dec-2016 13:57:58.659 all zones loaded
11-Dec-2016 13:57:58.659 running
11-Dec-2016 13:57:58.661 zone robin.info/IN/internal (signed): reconfiguring zone keys
11-Dec-2016 13:57:58.670 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121115 != transaction first serial 2016121111
11-Dec-2016 13:57:58.670 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error
11-Dec-2016 13:57:58.670 zone robin.info/IN/external (signed): reconfiguring zone keys
11-Dec-2016 13:57:58.671 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:57:58.670

Я могу подтвердить с dig что моя старая зона все еще загружена (из SOA и изменений, которые не видны).

Здесь есть несколько сообщений об ошибках:

1) Предполагаю, что у меня проблемы с ключами («не удалось получить ключи зоны для безопасного динамического обновления»). Однако у bind не было проблем с этим при первой загрузке, и мои ключевые файлы доступны для чтения bind (named запускается как пользователь bind который является членом группы bind):

xavier@dent:/etc/bind/zones$ ls -l /etc/bind/dnssec/robin.info/2016
total 17k
-rw-r--r-- 1 root bind  603 Dec 10 17:23 Krobin.info.+008+43324.key
-rw-r----- 1 root bind 1.8k Dec 10 17:23 Krobin.info.+008+43324.private
-rw-r--r-- 1 root bind  604 Dec 10 17:22 Krobin.info.+008+44679.key
-rw-r----- 1 root bind 1.8k Dec 10 17:22 Krobin.info.+008+44679.private

2) Предложение ошибки с серийными номерами (начальная ошибка была last serial 2016121113 != transaction first serial 2016121111). Однако я думал, что мне не нужно слишком беспокоиться о сериалах, поскольку в базе знаний ISC я могу прочитать это:

Обратите внимание, что серийный номер в этом ответе не совпадает с номером в файле example.com.db. Named отслеживает серийный номер подписанной версии зоны независимо от неподписанной версии. Если беззнаковая зона обновляется новым серийным номером, который выше, чем в подписанной копии, то подписанная копия будет увеличена, чтобы соответствовать ему, но в противном случае они будут храниться отдельно.[1]

Пока что единственный способ обновить зону, который я нашел, - это остановить привязку, удалить .jnl, .jbk, .signed и .signed.jnl файлы и снова начните связывание. Это кажется неправильным, и мне нужно убедиться, что я увеличил серийный номер достаточно, чтобы активировать новую зону. Что я делаю не так и как исправить dnssec?

Думаю, я наконец нашел основную причину своей проблемы. У меня есть два представления, которые были настроены для включения одного и того же главного файла зоны дважды.

Вы не можете использовать один и тот же файл для двух зон. Итак, это недействительно и вызвало мою проблему:

view "internal" {
    match-clients ...;
    zone "example.com" {
        type master;
        file "/etc/bind/zones/example.net";
    };
};
view "external" {
    match-clients ...;
    zone "example.com" {
        type master;
        file "/etc/bind/zones/example.net";
    };
};

Правильный способ совместного использования зоны описан в главе 4 руководства «Общие сведения о представлениях в BIND 9 на примерах». По сути, только одна зона должна быть главной, а другая - подчиненной. После добавления нескольких acls, ключей и уведомлений для localhost в нужные места я избавился от этих ошибок.

В итоге это моя окончательная конфигурация:

key "internal" {
    // TSIG Key generated with dnssec-keygen -a HMAC-MD5 -b 512 -n USER internal
    algorithm hmac-md5;
    secret "XXXX";
};

view "internal" {
    match-clients { key internal; ...IPs...; }; // our network
    zone "robin.info" {
        type slave;
        file "/etc/bind/slave-zones/robin.info"; // Not the same file as external view!
        masters { 127.0.0.1; };
    };
};

view "external" {
    match-clients { !key internal; "any"; }; // everyone else
    server 127.0.0.1 {
        /* Deliver notify messages to internal view with internal key. */
        keys { internal; };
    };
    zone "robin.info" {
        type master;
        file "/etc/bind/zones/robin.info";
        // ACL file with allow-transfer and also-notify
        // including secondary DNS servers and 127.0.0.1
        include "/etc/bind/acls"; 
        key-directory "/etc/bind/dnssec/robin.info/2017";
        inline-signing yes;
        auto-dnssec maintain;
    };
};

Ядро кажется could not get zone keys for secure dynamic update сообщение об ошибке, поэтому возврат к беззнаковому; и поскольку он не проходит путь подписи, который автоматически подталкивает SOA для подписи, он жалуется, что SOA устарела.

Я получил такое же сообщение об ошибке при добавлении подписи в три зоны и почесал голову, затем вздохнул и просто перезапустил имя полностью. Это решило проблему для меня. Привязать 9.11.0P3.

Я не припомню, чтобы когда-либо сталкивался с этой проблемой при добавлении подписи, но все остальные зоны были подписаны давным-давно с переходом под более раннюю версию Bind. Кроме того, эти три зоны являются файлами обратного DNS, поэтому их имя немного необычно. Это все, что мне нужно объяснить.

Итак: привязать ошибку, перезапустить имя целиком, позволить ему найти ключевые файлы по-настоящему, а затем подписать.

У меня возникла аналогичная проблема, также я использовал привязку debian jessie. У меня нет нескольких представлений или общих файлов, но привязка жаловалась на те же ошибки, что и:

11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): reconfiguring zone keys
11-Dec-2016 13:54:20.805 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121113 != transaction first serial 2016121111
11-Dec-2016 13:54:20.805 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error

Мое решение было использовать

rndc sync -clean

вместе с перезагрузкой привязки (даже если динамические обновления не включены!). От мужчины:

Sync changes in the journal file for a dynamic zone to the master file. If the 
"-clean" option is specified, the journal file is also removed. If no zone is 
specified, then all zones are synced.