Установка, настройка OpenDNSSEC 1.3.х и 1.4.1, NSD, FreeBSD 9.2

в 9:40, , рубрики: DNS, mysql, sqlite3, метки: , ,

Что такое и для чего OpenDNSSEC есть информация в сети. Подробной информации на эту тему немного и в основном на английском. Попробую восполнить пробел. Сам не являюсь специалистом в этой области, было интересно, захотел, сделал.

Статья писалась одновременно с установкой/настройкой OpenDNSSEC. В общей сумме ушло около месяца. Процедура выполнялась дважды. Сначала был установлен OpenDNSSEC 1.3. Зоны подписаны, якоря у регистратора домена(РД) прописаны, цепочка доверия выстроена, о чём сообщалось в личном кабинете регистратора домена(РД), в общем всё получилось. Спустя полгода, в результате очередного ручного обновления портов, порт OpenDNSSEC 1.3.x был автоматически обновлён на 1.4.1, а там много чего по другому. Но всё, разумеется, продолжало работать без каких-либо намёков на проблему. Обнаружил случайно, когда в DNS зону потребовалось внести изменения. И началось…

Предполагаем, что NSD DNS сервер настроен, несколько лет работает, всё в порядке.

Версию 1.4 долго не получалось настроить, не появлялись ключи, зоны не подписывались. Пакет устанавливался с поддержкой MySql55. На официальном сайте, при перечислении официально поддерживаемых OS для 1.4 была заявлена FreeBSD 9.0. Вряд ли в этом была причина(причина и была не в этом), но на всякий обновился с FreeBSD 8.2 до 9.1. От незнания нюансов даже предположил, что мешала уже выстроенная цепочка доверия. Поэтому в личном кабинете РД разорвал цепочку доверия. И настроил NSD на работу с неподписанными зонами. Пробовать конвертировать существующую базу SQLite2 в SQLite3 не стал. Решено было всё заново сделать и использовать MySql55, как было рекомендовано.

В целом, картина выглядит скорее всего так: NSD как обслуживал зоны, так и обслуживает. Между собой NSD и Opendnssec никак и ничем не связаны. Opendnssec является удобной примочкой для автоматизации процесса подписи зон. Opendnssec берёт существующие, неподписанные файлы зон NSD сервера и производит их подпись/пере подпись с заданной периодичностью. После автоматической пере подписи Opendnssec перезапускает NSD. Далее NSD использует уже подписанные файлы зон. Причём DNSSEC в NSD включается автоматически. NSD сам распознаёт подписанные файлы зон. Остался не понятен один момент: в личном кабинете у РД (регистратор домена) нужно прописывать некоторые ключи, так называемые якоря. Нужно ли их будет править вручную в дальнейшем, когда произойдёт автоматическая пере подпись зон новыми ключами? Предположу конечно, что проблем не будет.

Забегая вперёд: c MySql OpenDNSSEC настроить не удалось. Точно выяснил, что проблема связана с базой данных, или с взаимодействием между базой данных и OpenDNSSEC. OpenDNSSEC может работать как с SQLight, так и с MySql. Вернулся на SQLight3 там всё пошло сразу и без вопросов. На официальном сайте SQLight3 рекомендуется только для тестовых применений. Предположу, что MySql рекомендуется, если файлов зон и записей в них много, тысячи. Для случая тестового сервера решил использовать SQLight. Таким образом, всё нижеописанное, относящееся к MySql не используем. Но на всякий эту информацию оставил. Ниже приводится схематичная картинка, описывающая происходящее. Картинка взята с официального сайта документации OpenDNSSEC.

image

Вторичные сервера DNS не требуют над собой никаких действий, однако нужно убедиться, что вторичный сервер также поддерживает DNSSEC. У РД, у которого в своё время было заказано два вторичных DNS, всё поддерживается.

Предусмотрено 2 пары ключей:
Первая пара – ZSK используется для подписи зонного файла.
Вторая пара – KSK используется для подписи ключа ZSK и формирования DS-записей, которые передаются администратору родительской зоны (в текущем случае РД). Менять KSK рекомендуется раз в год, ZSK вплоть до раза в месяц.

Перекликается установка как 1.3, так и 1.4 версии OpenDNSSEC. При использовании SQLight2 и 3 баз данных проблем не было. С MySql55 настроить не получилось. После того, как всё заработало с SQLight3, поиск причин, почему же возникли проблемы с MySql, был отложен до следующего раза. Повторюсь, SQLight рекомендуется только для тестирования.

Привожу всё, как было, поэтому сначала желательно посмотреть, чем закончилось, а потом повторять. Да, при установке только OpenDNSSEC 1.4.1 статья получилась бы раза в два короче. Но считаю, что избыточность информации лучше поможет разобраться, если возникнут нюансы. Как говориться, подарок рерайтерам. Если у Вас автоматически было обновление OpenDNSSEC со старой до 1.4.1 версии, то желательно OpenDNSSEC перенести в резервную папку и заново установить. Файлы конфигураций будут отличаться. А старые новыми, по понятным причинам, не затираются.

При установке порта opendnssec не делаем make clean, понадобятся некоторые файлы для настройки.

# cd /usr/ports/dns/opendnssec
# make
===> opendnssec-1.3.13 is marked as broken: does not work with ruby 1.9.
*** Error code 1

Устанавливаем порт /usr/ports/lang/ruby18, т.к. с 1.9 у opendnssec порта проблемы совместимости, а именно ошибка возникает при включённом флаге AUDITOR.
В общем устанавливаем/переустанавливаем порт ruby18.
Далее смотрим файл /usr/ports/UPDATING, там сказано кой чего по поводу ruby1.8 и 1.9. В общем, для использования 1.8 версии нужно в /etc/make.conf файл добавить следующие строки:
#
# Keep ruby 1.8 as default version.
#
RUBY_DEFAULT_VER=1.8

Перезагружаемся и далее повторная попытка установки:
# cd /usr/ports/dns/opendnssec
# make config –убеждаемся, что все флаги отмечены
# make && make install && make clean
[x] AUDITOR Build with Auditor
[ ] MYSQL MySQL database support
[x] SOFTHSM Build/update SOFTHSM as well

В OpenDNSSEC 1.4.1 этой проблемы не возникает, там больше не используется AUDITOR, который использовал ruby. Ruby вообще не используется. Из 2х опций предлагаемых при установке выбрана одна MySql. Повторюсь, что с MySql не завелось, для OpenDNSSEC 1.4.1 выберем соответственно вторую галку из двух.

В файле /usr/local/etc/nsd/nsd.conf меняем:
zonesdir: “/usr/local/var/opendnssec/signed”
и все записи zonefile:
zonefile: "/usr/local/var/opendnssec/signed/zone1.ru"
zonefile: "/usr/local/var/opendnssec/signed/zone2.ru"

zonefile: "/usr/local/var/opendnssec/signed/zoneN.ru"

Создаём ссылки:
# cd /usr/local/etc/nsd
# ln -s /usr/local/var/opendnssec/unsigned.
# ln -s /usr/local/var/opendnssec/signed.
Копируем существующие, рабочие, неподписанный файлы зон NSD сервера из /usr/local/etc/nsd/zones/master в /usr/local/etc/nsd/~unsigned.
# chown -R opendnssec:opendnssec /usr/local/var/opendnssec/unsigned

Инициализация SoftHSM базы данных с меткой “OpenDNSSEC” используя SO PIN <пин код> и USER PIN <такой же пин код>
Если отсутствует по каким-либо причинам папка /usr/local/var/lib/softhsm то устанавливаем/переустанавливаем порт:
# cd /usr/ports/security/softhsm
# make && make install && make clean
Устанавливаем права на папку softhsm, по умолчанию они 700:
# chmod 0755 /usr/local/var/lib/softhsm

Придумываем/вводим/запоминаем 2 PIN кода. Пускай будут одинаковыми:
# softhsm --init-token --slot 0 --label «OpenDNSSEC»
The SO PIN must have a length between 4 and 255 characters.
Enter SO PIN:
The user PIN must have a length between 4 and 255 characters.
Enter user PIN:
The token has been initialized.
В файле /usr/local/etc/opendnssec/conf.xml удаляем строку

<PIN>1234</PIN>

Пин код будем вводить вручную. Или оставляем, пин код будет подставляться автоматически.
Должно получиться так:

image

Для 1.4.1 Устанавливаем MySql55 server и client. SQLite3 рекомендуется использовать только в тестовых целях.
После установки MySql55 необходимо, в зависимости от предполагаемой нагрузки на сервер, выбрать один из конфигурационных файлов, находящихся в /usr/local/share/mysql, и скопировать его в /var/db/mysql. И соответственно в /etc/rc.conf должно быть:
nsd_enable=«YES»
opendnssec_enable=«YES»
mysql_enable=«YES»

Для автоматического создания нужной структуры базы данных используем файл:
/usr/ports/dns/opendnssec/work/opendnssec-1.4.1/enforcer/utils/database_create.mysql

# mysql
> create database kasp;
> CREATE USER 'ksuser'@'localhost' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON kasp.* TO 'ksuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
> flush privileges;
> quit

Если после flush privileges; будет ошибка
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
Пробуем так, здесь с вводом пароля:
# mysqlcheck --check-upgrade --all-databases --auto-repair -p
Enter password:
И затем
# mysql_upgrade --force -p
Enter password:
В своё время это помогло.

Настраиваем созданную базу данных.
# mysql kasp < /usr/ports/dns/opendnssec/work/opendnssec-1.4.1/enforcer/utils/database_create.mysql

# mysql
> USE kasp;
> SHOW TABLES;
+-----------------------------+
| Tables_in_kasp |
+-----------------------------+
| INT_KEYALLOC_VIEW_FOR_MYSQL |
| KEYALLOC_VIEW |
| KEYDATA_VIEW |
| PARAMETER_LIST |
| PARAMETER_VIEW |
| categories |
| dbadmin |
| dnsseckeys |
| keypairs |
| parameters |
| parameters_policies |
| policies |
| securitymodules |
| serialmodes |
| zones |
+-----------------------------+
15 rows in set (0.01 sec)

>quit

В /usr/local/etc/opendnssec будут дефолтные конфигурационные файлы, созданные при установке.

В /usr/local/etc/opendnssec/conf.xml правим:


<Datastore>
	<MySQL>
<!--
		<Host port="1213">dnssec-db</Host>
-->
		<Database>database</Database>
		<Username>kaspuser</Username>
		<Password>mysqlpassword</Password>
	</MySQL>
</Datastore>

<Host -имя системы, где установлена база данных. Параметр опциональный, если не указан, то база данных ассоциируется с системой, где установлен OpenDNSSEC. Port понятно какой. Параметр опциональный, по умолчанию 3306.
<Database База данных.
<Username Пользователь базы данных.
<Password Соответственно пароль.

В /usr/local/etc/opendnssec/conf.xml должно быть:


<Repository name="SoftHSM">
              <Module>/usr/local/lib/softhsm/libsofthsm.so</Module>
              <TokenLabel>OpenDNSSEC</TokenLabel>
              <Capacity>1024</Capacity>
              <RequireBackup/>
              <SkipPublicKey/>
</Repository>

Проверяем, чтобы было так:


<Signer>
	<NotifyCommand>/usr/local/bin/opendnssec-nsd-reload</NotifyCommand>

Для секурности пин код тут не прописан. Будет вводиться вручную, хотя проще оставить его на месте.

Обращаем внимание на запись:


<Module>/usr/local/lib/softhsm/libsofthsm.so</Module>

Вносим данные конфигурационных файлов в базу данных
# ods-ksmutil setup
*WARNING* This will erase all data in the database; are you sure? [y/N] y
zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml.
kasp filename set to /usr/local/etc/opendnssec/kasp.xml.
Repository SoftHSM found
Capacity set to 1024.
RequireBackup set.
INFO: The XML in /usr/local/etc/opendnssec/conf.xml is valid
INFO: The XML in /usr/local/etc/opendnssec/zonelist.xml is valid
INFO: The XML in /usr/local/etc/opendnssec/kasp.xml is valid

Перед запуском OpenDNSSEС нужно ввести ранее заданный пин код(если он был удалён), тот который вводили при запросе команды softhsm --init-token.

Файлы зон пока ещё не добавляли.
Вносим пин код:
# ods-hsmutil login
Enter PIN for token SoftHSM:
The tokens are now logged in.

В /usr/local/etc/opendnssec/conf.xml строка с дефолтным пин кодом 1234 должна быть удалена. Если внесли какие-либо изменения в крнфигурационные файлы, то судя по всему нужно запускать # ods-ksmutil update all.

OpenDNSSEC состоит из двух демонов, ods-signerd и ods-enforcerd запускаем:
# ods-control start
Starting enforcer…
OpenDNSSEC ods-enforcerd started (version 1.4.1), pid 39528
Starting signer engine…
OpenDNSSEC signer engine version 1.4.1
Engine running.

Всё работает.
# ods-control stop

Добавляем зоны:
# ods-ksmutil zone add --zone zone1.com
# ods-ksmutil zone add --zone zone2.com

Судя по всему, всё, что делает эта команда –это добавление текстовой информации о путях размещения файлов зон в файл /usr/local/etc/opendnssec/zonelist.xml. Вводимое имя зоны должно совпадать с именем файла зоны, который будет скопирован в /usr/local/var/opendnssec/unsigned. В общем чтобы руками не редактировать zonelist.xml

# ods-ksmutil update all

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

Формируем ключи:


В файле /usr/local/etc/opendnssec/kasp.xml policy: default смотрим параметр <Policy name="default"> <Keys> <KSK> <Lifetime>P3M</Lifetime> Это означает 3 месяца. В общем в параметре –interval указываем время, на которое нужно на генерировать ключей. Предположу, что достаточно сформировать количество ключей на максимально заданное время, а дальше оно само. Если указываем интервал 1M и менее, то для <ZSK> <Lifetime>P1M</Lifetime> и <KSK> <Lifetime>P3M</Lifetime> и 2х зон будет сформировано 2 KSK и 2 ZSK. Если --interval 1Y при тех же параметрах 2 зоны, то будет сформированно 6 KSKs (2048 bits) and 20 ZSKs (1024 bits).

Собственно формируем ключи:

# ods-ksmutil key generate --policy default --interval 1Y
Key sharing is Off
Info: converting 1Y to seconds; M interpreted as 31 days, Y interpreted as 365 days
HSM opened successfully.
*WARNING* This will create 4 KSKs (2048 bits) and 16 ZSKs (1024 bits)
Are you sure? [y/N] y
Created KSK size: 2048, alg: 8 with id: … in repository: SoftHSM and database.
Created KSK size: 2048, alg: 8 with id: … in repository: SoftHSM and database.
Created KSK size: 2048, alg: 8 with id: … in repository: SoftHSM and database.
Created KSK size: 2048, alg: 8 with id: … in repository: SoftHSM and database.
Created ZSK size: 1024, alg: 8 with id: … in repository: SoftHSM and database.
Created ZSK size: 1024, alg: 8 with id: … in repository: SoftHSM and database.
Created ZSK size: 1024, alg: 8 with id: … in repository: SoftHSM and database.
Created ZSK size: 1024, alg: 8 with id: … in repository: SoftHSM and database.

Created ZSK size: 1024, alg: 8 with id: … in repository: SoftHSM and database.
NOTE: keys generated in repository SoftHSM will not become active until they have been backed up
all done! hsm_close result: 0

# ods-hsmutil info
Repository: SoftHSM
Module: /usr/local/lib/softhsm/libsofthsm.so
Slot: 0
Token Label: OpenDNSSEC
Manufacturer: SoftHSM
Model: SoftHSM
Serial: 1

# ods-hsmutil list SoftHSM
Listing keys in repository: SoftHSM
20 keys found.
Repository ID Type
— — — SoftHSM … RSA/1024
SoftHSM … RSA/1024

SoftHSM … RSA/1024
SoftHSM … RSA/2048
SoftHSM … RSA/2048
SoftHSM … RSA/2048
SoftHSM … RSA/2048

Back up ключей можно делать только при остановленном OpenDNSSEC. Иначе есть вероятность генерации нового ключа в течении выполнения операции back up. Ключи помечаются как bsck up. На всякий пока убрал опцию <RequireBackup из /usr/local/etc/opendnssec/conf.xml

Запускаем:
# ods-control start
Starting enforcer…
OpenDNSSEC ods-enforcerd started (version 1.4.1), pid 51678
Starting signer engine…
OpenDNSSEC signer engine version 1.4.1
Engine running.

# ods-ksmutil key list --verbose
MySQL database schema set to: somedatabase
MySQL database user set to: user
MySQL database password set
Keys:
Zone: Keytype: State: Date of next transition (to): Size: Algorithm: CKA_ID: Repository: Keytag:

И видим, ключей нет. Плохо.
# ods-signer sign --all
С MySql Ключей так и не увидел.

В общем не получилось настроить с MySql55. Переустанавливаем OpenDNSSEC:
[ ] MYSQL MySQL database support
[x] SOFTHSM SoftHSM cryptographic store for PKCS #11 interface

Переустанавливал, после резервного перемещения всего, что связано с OpenDNSSEC в другую папку.

Здесь в /usr/local/etc/opendnssec будут дефолтные конфигурационные файлы, созданные при установке. В общем в папке должны быть файлы: conf.xml, kasp.xml, zonefetch.xml, zonelist.xml. Если их нет, то нужно переименовать файлы с расширением sample в этой-же директории.

Теперь инициализация OpenDNSSEC базы данных:
Импорт conf.xml, kasp.xml и zonelist.xml в базу данных. Удаление текущих настроек, включая любые ранее установленные ключи.
# ods-ksmutil setup
*WARNING* This will erase all data in the database; are you sure? [y/N] y
Error: database in config file does not match libksm
Если видим такое, то нужно в /usr/local/etc/opendnssec/conf.xml файле. Подправить путь:


<Module>/usr/local/lib/softhsm/libsofthsm.so</Module>

При установке OpenDNSSEC с MySql путь уже исправлен.

# ods-ksmutil setup
*WARNING* This will erase all data in the database; are you sure? [y/N] y
fixing permissions on file /usr/local/var/opendnssec/kasp.db
zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml.
kasp filename set to /usr/local/etc/opendnssec/kasp.xml.
Repository SoftHSM found
No Maximum Capacity set.
RequireBackup NOT set; please make sure that you know the potential problems of using keys which are not recoverable
/usr/local/etc/opendnssec/conf.xml validates
/usr/local/etc/opendnssec/kasp.xml validates
Policy default found
Info: converting P1Y to seconds; M interpreted as 31 days, Y interpreted as 365 days

Появится файл /usr/local/var/opendnssec/kasp.db

Проверяем конфигурационные файлы:
# ods-kaspcheck
/usr/local/etc/opendnssec/conf.xml validates
/usr/local/etc/opendnssec/kasp.xml validates

В /etc/rc.conf добавляем opendnssec_enable=«YES»

На версию 1.3.13 не обращаем внимания, у Вас будет 1.4.1

# ods-control start
Starting enforcer…
OpenDNSSEC ods-enforcerd started (version 1.3.13), pid 55019
Starting signer engine…
OpenDNSSEC signer engine version 1.3.13
Engine running.
# ods-ksmutil zone add --zone zone1.com
zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml.
Imported zone: zone1.com
# ods-ksmutil zone add --zone zone2.ru
zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml.
Imported zone: zone2.ru

И т.д. добавляем все Ваши файлы зон.

# ods-ksmutil update zonelist
zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml.
kasp filename set to /usr/local/etc/opendnssec/kasp.xml.
Zone zone2.ru found
Policy set to default.
Zone zone1.com found
Policy set to default.
Notifying enforcer of new database…

На всякий:
# ods-ksmutil update all

Проверяем, что всё в порядке, должен быть выведен список ключей:
# ods-ksmutil key list --verbose
SQLite database set to: /usr/local/var/opendnssec/kasp.db
Keys:
Zone: Keytype: State: Date of next transition: CKA_ID: Repository: Keytag:
zone2.ru KSK publish 2013-06-02 13:29:18 4962a716093d3973bc2cbcd0312a2e90 SoftHSM 41863
zone2.ru ZSK active 2013-07-01 23:29:18 0696ec624c7baba98062d4fc32064b46 SoftHSM 5817
zone1.com KSK publish 2013-06-02 13:29:18 f73f605125a7e59e3f3108680255d84e SoftHSM 6918
zone1.com ZSK active 2013-07-01 23:29:18 31e08389f3a59397dce1f22fa67df8a8 SoftHSM 2180

Если видим такой вывод, значит всё настроено правильно.
SQLite база данных: /usr/local/var/opendnssec/kasp.db

Попробуем проверить запрос DNSSEC:
# dig +norec dig xx.yy.zz.ss -t ANY zone2.ru

; <<>> DiG 9.6.-ESV-R3 <<>> +norec dig xx.yy.zz.ss -t ANY zone2.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NOERROR, id: 53654
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 13

;; QUESTION SECTION:
;dig. IN A

;; AUTHORITY SECTION:
. 2574 IN NS d.root-servers.net.
. 2574 IN NS a.root-servers.net.
. 2574 IN NS g.root-servers.net.
. 2574 IN NS h.root-servers.net.
. 2574 IN NS c.root-servers.net.
. 2574 IN NS i.root-servers.net.
. 2574 IN NS b.root-servers.net.
. 2574 IN NS f.root-servers.net.
. 2574 IN NS j.root-servers.net.
. 2574 IN NS k.root-servers.net.
. 2574 IN NS l.root-servers.net.
. 2574 IN NS e.root-servers.net.
. 2574 IN NS m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net. 2574 IN A 198.41.0.4
a.root-servers.net. 1398 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 60 IN A 192.228.79.201
c.root-servers.net. 3425 IN A 192.33.4.12
d.root-servers.net. 2482 IN A 199.7.91.13
d.root-servers.net. 92 IN AAAA 2001:500:2d::d
e.root-servers.net. 2482 IN A 192.203.230.10
f.root-servers.net. 2482 IN A 192.5.5.241
f.root-servers.net. 2574 IN AAAA 2001:500:2f::f
g.root-servers.net. 2482 IN A 192.112.36.4
h.root-servers.net. 2482 IN A 128.63.2.53
h.root-servers.net. 2574 IN AAAA 2001:500:1::803f:235
i.root-servers.net. 2482 IN A 192.36.148.17

;; Query time: 1 msec
;; SERVER: 192.168.45.64#53(192.168.45.64)
;; WHEN: Sun Jun 2 00:50:27 2013
;; MSG SIZE rcvd: 488

;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NXDOMAIN, id: 23363
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;xx.yy.zz.ss. IN ANY

;; AUTHORITY SECTION:
. 3274 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2013060101 1800 900 604800 86400

;; Query time: 1 msec
;; SERVER: 192.168.45.64#53(192.168.45.64)
;; WHEN: Sun Jun 2 00:50:27 2013
;; MSG SIZE rcvd: 107

;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NOERROR, id: 5213
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;zone2.ru. IN A

;; ANSWER SECTION:
zone2.ru. 3135 IN A xx.yy.zz.ss

;; AUTHORITY SECTION:
zone2.ru. 579 IN NS ns8-l2.xxx.ru.
zone2.ru. 579 IN NS ns4-l2.xxx.ru.
zone2.ru. 579 IN NS ns1.zone2.ru.

;; ADDITIONAL SECTION:
ns1.zone2.ru. 579 IN A xx.yy.zz.ss
ns4-l2.xxx.ru. 2596 IN A a.b.c.d1
ns8-l2.xxx.ru. 2596 IN A a.b.c.d2

;; Query time: 1 msec
;; SERVER: 192.168.45.64#53(192.168.45.64)
;; WHEN: Sun Jun 2 00:50:27 2013
;; MSG SIZE rcvd: 154

Всё в порядке. DNS по прежнему, и спустя некоторое время работает. Но DNSSEC пока не функционирует, в выводе нет строк с ключами.

Нужно произвести экспорт открытых KSK ключей для каждой из зон. Экспортировать можно только KSK в состоянии ready.
Ниже приведённые команды для экспорта ключей пока не выполняем:
ods-ksmutil key export --zone example.com [--keystate READY]
ods-ksmutil key export --zone example.com --ds [--keystate READY]

Первая пара – ZSK для подписи зонного файла.
Вторая пара – KSK для подписи ключа ZSK и формирования DS-записей, которые передаются администратору родительской зоны.
Выясняем DNSKEY и DS записи из KSK:
# ods-ksmutil key list --verbose
SQLite database set to: /usr/local/var/opendnssec/kasp.db
Keys:
Zone: Keytype: State: Date of next transition: CKA_ID: Repository: Keytag:
zone2.ru KSK publish 2013-06-02 13:29:18 4962a716093d3973bc2cbcd0312a2e90 SoftHSM 41863
zone2.ru ZSK active 2013-07-01 23:29:18 0696ec624c7baba98062d4fc32064b46 SoftHSM 5817
zone1.com KSK publish 2013-06-02 13:29:18 f73f605125a7e59e3f3108680255d84e SoftHSM 6918
zone1.com ZSK active 2013-07-01 23:29:18 31e08389f3a59397dce1f22fa67df8a8 SoftHSM 2180

# ods-ksmutil key ds-seen -z zone1.com -x 6918
Found key with CKA_ID f73f605125a7e59e3f3108680255d84e
Key f73f605125a7e59e3f3108680255d84e made active
Notifying enforcer of new database…
# ods-ksmutil key ds-seen -z zone2.ru -x 41863
Found key with CKA_ID 4962a716093d3973bc2cbcd0312a2e90
Key 4962a716093d3973bc2cbcd0312a2e90 made active
Notifying enforcer of new database…

статус KSK поменялся с publish на active:
# ods-ksmutil key list --verbose
SQLite database set to: /usr/local/var/opendnssec/kasp.db
Keys:
Zone: Keytype: State: Date of next transition: CKA_ID: Repository: Keytag:
zone2.ru KSK active 2013-06-02 13:29:18 4962a716093d3973bc2cbcd0312a2e90 SoftHSM 41863
zone2.ru ZSK active 2013-07-01 23:29:18 0696ec624c7baba98062d4fc32064b46 SoftHSM 5817
zone1.com KSK active 2013-06-02 13:29:18 f73f605125a7e59e3f3108680255d84e SoftHSM 6918
zone1.com ZSK active 2013-07-01 23:29:18 31e08389f3a59397dce1f22fa67df8a8 SoftHSM 2180

Теперь нужно сообщить провайдеру о вашем открытом ключе и DS записях для каждой из зон. У провайдера на сайте в личном кабинете есть/должна быть форма заполнения с примером. У моего была.
При экспорте после ключа –e нужно установить текущее состояние (state) ключа KSK publish, active…

# ods-ksmutil key export -z zone2.ru -e active -x 41863
;publish KSK DNSKEY record:
zone2.ru. 3600 IN DNSKEY 257 3 8 Aw…dk2= ;{id = xxxx (ksk), size = 2048b}

для размещения DNSKEY у РД, прямо всё, полученное через ods-ksmutil key export что есть копируем в текстовое поле ввода на сайте в личном кабинете, через некоторое время введённые данные автоматически будут подправлены до вида как в примере. Имеется в виду пример заполнения на веб странице личного кабинета РД. Т.е. всё, что после ;publish KSK DNSKEY record: прописываем в поле DNS Key: в личном кабинете РД.

Теперь выясняем DS записи для домена:
# ods-ksmutil key export -z zone2.ru -e active -x 41863 --ds
;publish KSK DS record (SHA1):
zone2.ru. 3600 IN DS 57062 8 1 2a…34df
;publish KSK DS record (SHA256):
zone2.ru. 3600 IN DS 57062 8 2 e3fa…d492

Соответственно копируем полученные DS записи в соответствующее поле ввода в личном кабинете xxx. Проделываем соответствующую операцию для всех доменов.

И последний штрих –автоматический перезапуск NSD сервера, при перегенерации ключей:
В файле /usr/local/etc/opendnssec/conf.xml нужно рас комментировать или добавить строку в секции


<Signer>…</Signer>:


<NotifyCommand>/usr/local/bin/opendnssec-nsd-reload</NotifyCommand>

В /usr/local/bin/ создаём файл opendnssec-nsd-reload со следующим содержимым:
{
#!/bin/sh — # @(#)(CAcert) $Id: reload-nsd,v 1.1 2013/06/02 23:49:50 root Exp $
# reload-nsd — script invoked by opendnssec to trigger nsd to reload zonefiles
# logging
# echo $0 $*
# ignore %zone and %zonefile arguments since nsd cannot use them…
/usr/local/sbin/nsdc rebuild
/usr/local/sbin/nsdc reload
}

# chmod 0555 /usr/local/bin/opendnssec-nsd-reload

Или копируем соответствующий файл из папки установки OpenDNSSEC.

Для остановки opendnssec можно использовать комманду
# ods-control stop
Если были сделаны изменения в kasp.xml, то нужно выполнить команду:
# ods-ksmutil update kasp
Если производятся изменения в неподписанных зонах –зоны оригиналы скопированные из /usr/local/etc/nsd/zones/master в /usr/local/var/opendnssec/unsigned директорию, то нужно выполнить команду:
# ods-signer sign example.com для каждой зоны, в которой были произведены изменения.

Перезапускаем NSD, для чтения подписанных файлов зон:
# nsdc rebuild
# nsdc reload
# nsdc notify

Проверка: в конечном итоге должны получить следующее:
Выведет стандартный ответ DNS сервера без dnssec
# dig site.com

; <<>> DiG 9.6.-ESV-R3 <<>> site.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NOERROR, id: 43618
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

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

;; ANSWER SECTION:
site.com. 1111 IN A xxx.yyy.zzz.aaa

;; AUTHORITY SECTION:
site.com. 1111 IN NS ns4-l2.xxx.ru.
site.com. 1111 IN NS ns8-l2.xxx.ru.

;; ADDITIONAL SECTION:
ns4-l2.xxx.ru. 1276 IN A a.b.c.d1
ns8-l2.xxx.ru. 1276 IN A a.b.c.d2

;; Query time: 1 msec
;; SERVER: xx1.yy1.zz1.aa1#53(xx1.yy1.zz1.aa1)
;; WHEN: Mon Jun 3 18:00:40 2013
;; MSG SIZE rcvd: 123

Выводим dnssec ответ от DNS сервера:
# dig xxx.yyy.zzz.aaa site.com +retry=1 +dnssec +multiline

; <<>> DiG 9.6.-ESV-R3 <<>> xxx.yyy.zzz.aaa site.com +retry=1 +dnssec +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NXDOMAIN, id: 12671
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;xxx.yyy.zzz.aaa. IN A

;; AUTHORITY SECTION:
. 2235 IN SOA a.root-servers.net. nstld.verisign-grs.com. (
2013060300; serial
1800; refresh (30 minutes)
900; retry (15 minutes)
604800; expire (1 week)
86400; minimum (1 day)
)

;; Query time: 1 msec
;; SERVER: xx1.yy1.zz1.aa1#53(xx1.yy1.zz1.aa1)
;; WHEN: Mon Jun 3 18:52:31 2013
;; MSG SIZE rcvd: 107

;; Got answer:
;; ->>HEADER<< — opcode: QUERY, status: NOERROR, id: 53116
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;site.com. IN A

;; ANSWER SECTION:
site.com. 1835 IN A xxx.yyy.zzz.aaa
site.com. 1835 IN RRSIG A 8 2 3600 20130609232905 (
20130602143424 39964 site.com.
IM+aCUZHZekNnQhjxngyIXUrBUkgCjAxc8o4UuoqvMUu
F1W3L7ge4HVHdWkfmEf/Gk+o8hu7B2MGgP1P9L89/l3c
gCyVYvIrpR3viVFP7uNtbaoiVdo3bRgtHyFH6QmlTCCW
NrmBHY5sKh/NItAqp1bagQCMYqy71o07oNsNeOU= )

;; AUTHORITY SECTION:
site.com. 1835 IN NS ns4-l2.xxx.ru.
site.com. 1835 IN NS ns8-l2.xxx.ru.
site.com. 1835 IN RRSIG NS 8 2 3600 20130610191139 (
20130603121736 39964 site.com.
ceIOophlVR8zLydk0hVWdtIx/OSLO+kdqQg0opthF5pF
O4NRYgKfkl2tSLGHozzQq0CqzZ0s9rGiE2hnq7M2jJby
Mg9wm1BmHVnmogSat463kpG29Di2U1Yj+AAY8WJ0Gtvv
iYG/atnToDAsLoXgaLfbaYvRCRirCym7LoXjn3Q= )

;; ADDITIONAL SECTION:
ns4-l2.xxx.ru. 1866 IN A a.b.c.d1
ns8-l2.xxx.ru. 1866 IN A a.b.c.d2

;; Query time: 1 msec
;; SERVER: xx1.yy1.zz1.aa1#53(xx1.yy1.zz1.aa1)
;; WHEN: Mon Jun 3 18:52:31 2013
;; MSG SIZE rcvd: 472

В приведённом выводе видим наличие ключей.

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

image

Всё в порядке, осталось убедиться, что по истечению установленного срока действия ключей, зоны будут пере подписаны автоматически. Видим запись, в личном кабинете РД “Выстроена цепочка доверия”.

Если кто укажет на возможные нюансы настройки c MySql, опробую и подкорректирую статью.
Много информации есть на официальном сайте.
Статью планируется корректировать, для правки настроек, связанных с MySql.

Автор: AlexeyNovikov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js