Установка ДНС сервера BIND в CentOS 6 и CentOS 7 особо ничем не отличается, за исключением доступной в "родном" репозитории версии. В нашем случае мы будем устанавливать BIND в CentOS 6 из репозитория CentALT, потому как только в нём доступна самая свежая на данный момент (bind x86_64 44:9.10.2-1.el6) версия, которая поддерживает самые новые "фичи" среди которых и автоподписание зон, что избавляет от необходимости выполнять "dnssec-signzone -S -N INCREMENT zone-filename.zone" после каждого изменения файла зоны.
Необходимость в своём ДНС серванте с поддержкой DNSSEC возникает главным образом из-за того, что многие регистраторы доменных имён, а точнее будет сказать большинство из них, не предоставляют возможности юзеру подписывать свой домен на их ДНС серверах, а то и вовсе не дают использовать DNSSEC (т.е. полностью и всецело не поддерживат DNSSEC).
- Список корневых доменных зон где можно юзать DNSSEC (на сайте ICANN)
- Список регистраторов полностью или частично поддерживающих DNSSEC (на сайте ICANN)
Если наш регистратор не предоставляет ДНС серверов с поддержкой DNSSEC для нашего домена, но в тоже время хотябы поддерживает отправку DS/KSK записи в корневые домены (.com/.org/.ru etc), то в таком случае для реализации DNSSEC для совего домена нам и потребуется свой собственный ДНС сервер BIND с DNSSEC поддержкой.
Установка ДНС сервера BIND с DNSSEC в CentOS
Посмотрим на информацию о пакетах bind и bind-utils:
$ yum info bind ... Available Packages Name : bind Arch : x86_64 Epoch : 32 Version : 9.8.2 Release : 0.37.rc1.el6_7.7 Size : 4.0 M Repo : updates Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) : server URL : http://www.isc.org/products/BIND/ License : ISC Description : BIND (Berkeley Internet Name Domain) is an implementation of the : DNS (Domain Name System) protocols. BIND includes a DNS server : (named), which resolves host names to IP addresses; a resolver : library (routines for applications to use when interfacing with : DNS); and tools for verifying that the DNS server is operating : properly. $ yum info bind-utils ... Installed Packages Name : bind-utils Arch : x86_64 Epoch : 36 Version : 9.9.1 Release : 4.P3.el6 Size : 439 k Repo : installed From repo : CentALT Summary : Utilities for querying DNS name servers URL : http://www.isc.org/products/BIND/ License : ISC Description : Bind-utils contains a collection of utilities for querying DNS : (Domain Name System) name servers to find out information about : Internet hosts. These tools will provide you with the IP addresses : for given host names, as well as other information about : registered domains and network addresses. : : You should install bind-utils if you need to get information from : DNS name servers.
Видим, что версия bind-utils уже установлена из CentALT репозитория и она выше (9.9.1), чем предлагаемая версия bind из репозитория updates (9.8.2) - это может вызвать проблемы при установке, например:
... Error: Package: 32:bind-9.8.2-0.37.rc1.el6_7.7.x86_64 (updates) Requires: libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6.x86_64 (base) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.1.x86_64 (updates) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.2.x86_64 (updates) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64 (updates) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.5.x86_64 (updates) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.6.x86_64 (updates) libdns.so.81()(64bit) Available: 32:bind-libs-9.8.2-0.37.rc1.el6_7.7.x86_64 (updates) libdns.so.81()(64bit) Installed: 36:bind-libs-9.9.1-4.P3.el6.x86_64 (@CentALT) Not found You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
Если это наш случай, то мы можем либо сначала удалить, а потом установить/переустанавить пакет bind из репозитория "updates":
$ yum remove bind-utils bind-libs $ yum install bind bind-utils ... Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind x86_64 32:9.8.2-0.37.rc1.el6_7.7 updates 4.0 M bind-utils x86_64 32:9.8.2-0.37.rc1.el6_7.7 updates 186 k Installing for dependencies: bind-libs x86_64 32:9.8.2-0.37.rc1.el6_7.7 updates 887 k Transaction Summary ================================================================================ Install 3 Package(s) Total download size: 5.0 M Installed size: 9.9 M Is this ok [y/N]: ------------------------------------------------------------------------ Либо установить пакет bind из репозитория "CentALT" также на всяк случай предварительно удалив bind-utils и bind-libs: -------------------------------------------------------------------------------- $ yum remove bind-utils bind-libs $ yum --disablerepo="*" --enablerepo="CentALT" install bind bind-utils Failed to set locale, defaulting to C Loaded plugins: fastestmirror, priorities, versionlock Setting up Install Process Loading mirror speeds from cached hostfile http://centos.alt.ru/repository/centos/6/x86_64/repodata/repomd.xml: [Errno 14] Peer cert cannot be verified or peer cert invalid Trying other mirror. Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 36:9.9.3-4.P2.el6 will be installed --> Processing Dependency: libisccc.so.90()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 --> Processing Dependency: liblwres.so.90()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 --> Processing Dependency: libbind9.so.90()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 --> Processing Dependency: libdns.so.99()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 --> Processing Dependency: libisccfg.so.90()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 --> Processing Dependency: libisc.so.95()(64bit) for package: 36:bind-9.9.3-4.P2.el6.x86_64 ---> Package bind-utils.x86_64 36:9.9.3-4.P2.el6 will be installed --> Running transaction check ---> Package bind-libs.x86_64 36:9.9.3-4.P2.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind x86_64 36:9.9.3-4.P2.el6 CentALT 2.5 M bind-utils x86_64 36:9.9.3-4.P2.el6 CentALT 179 k Installing for dependencies: bind-libs x86_64 36:9.9.3-4.P2.el6 CentALT 953 k Transaction Summary ================================================================================ Install 3 Package(s) Total download size: 3.7 M Installed size: 9.1 M Is this ok [y/N]: y Downloading Packages: http://centos.alt.ru/repository/centos/6/x86_64/bind-9.9.3-4.P2.el6.x86_64.rpm: [Errno 14] Peer cert cannot be verified or peer cert invalid Trying other mirror. http://centos.alt.ru/repository/centos/6/x86_64/bind-libs-9.9.3-4.P2.el6.x86_64.rpm: [Errno 14] Peer cert cannot be verified or peer cert invalid Trying other mirror. http://centos.alt.ru/repository/centos/6/x86_64/bind-utils-9.9.3-4.P2.el6.x86_64.rpm: [Errno 14] Peer cert cannot be verified or peer cert invalid Trying other mirror. Error Downloading Packages: 36:bind-utils-9.9.3-4.P2.el6.x86_64: failure: bind-utils-9.9.3-4.P2.el6.x86_64.rpm from CentALT: [Errno 256] No more mirrors to try. 36:bind-9.9.3-4.P2.el6.x86_64: failure: bind-9.9.3-4.P2.el6.x86_64.rpm from CentALT: [Errno 256] No more mirrors to try. 36:bind-libs-9.9.3-4.P2.el6.x86_64: failure: bind-libs-9.9.3-4.P2.el6.x86_64.rpm from CentALT: [Errno 256] No more mirrors to try.
Установка закончилась ошибкой "Peer cert cannot be verified or peer cert invalid Trying other mirror." По ссылке: Why does yum fail with "[Errno 14] Peer cert cannot be verified or peer cert invalid"? - Red Hat Customer Portal - рекомендуется в файле настроек репозитория, в нашем случае это "vi /etc/yum.repos.d/centalt.repo", изменить mirrorlist= (либо baseurl=) с http:// на https:// - однако в нашем случае это не сработало. Содержимое нашего файла /etc/yum.repos.d/centalt.repo выглядело следующим образом:
[CentALT] name=CentALT Packages for Enterprise Linux 6 - $basearch baseurl=https://centos.alt.ru/repository/centos/6/$basearch/ enabled=0 gpgcheck=0 #priority=9
Открыв главную страницу centos.alt.ru на тот момент я обнаружил там совсем не репозиторий, а веб-страницу с заголовком "Welcome to VMware ESXi", что навело на мысль о том, что нужно искать зеркало CentALT репозитория, найдя которое я "допилил" /etc/yum.repos.d/centalt.repo до такой кондиции:
[CentALT] name=CentALT Packages for Enterprise Linux 6 - $basearch #baseurl=https://centos.alt.ru/repository/centos/6/$basearch/ baseurl=http://mirror.astpage.ru/centalt/repository/centos/6/$basearch/ enabled=0 gpgcheck=0 #priority=9
И всё отлично заработало и установилось, при этом версия "36:9.9.3-4.P2.el6" сменилась на "44:9.10.2-1.el6", а именно это нам и нужно:
$ yum --disablerepo="*" --enablerepo="CentALT" install bind bind-utils Failed to set locale, defaulting to C Loaded plugins: fastestmirror, priorities, versionlock Setting up Install Process Loading mirror speeds from cached hostfile CentALT | 951 B 00:00 CentALT/primary | 104 kB 00:00 CentALT 319/319 Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 44:9.10.2-1.el6 will be installed --> Processing Dependency: bind-libs = 44:9.10.2-1.el6 for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libbind9.so.140()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libisccc.so.140()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: liblwres.so.141()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libisccfg.so.140()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libisc.so.148()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libdns.so.160()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 --> Processing Dependency: libirs.so.141()(64bit) for package: 44:bind-9.10.2-1.el6.x86_64 ---> Package bind-utils.x86_64 44:9.10.2-1.el6 will be installed --> Running transaction check ---> Package bind-libs.x86_64 44:9.10.2-1.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: bind x86_64 44:9.10.2-1.el6 CentALT 2.6 M bind-utils x86_64 44:9.10.2-1.el6 CentALT 123 k Installing for dependencies: bind-libs x86_64 44:9.10.2-1.el6 CentALT 987 k Transaction Summary ================================================================================ Install 3 Package(s) Total download size: 3.7 M Installed size: 9.2 M Is this ok [y/N]: y Downloading Packages: (1/3): bind-9.10.2-1.el6.x86_64.rpm | 2.6 MB 00:03 (2/3): bind-libs-9.10.2-1.el6.x86_64.rpm | 987 kB 00:01 (3/3): bind-utils-9.10.2-1.el6.x86_64.rpm | 123 kB 00:00 -------------------------------------------------------------------------------- Total 643 kB/s | 3.7 MB 00:05 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 44:bind-libs-9.10.2-1.el6.x86_64 1/3 Installing : 44:bind-utils-9.10.2-1.el6.x86_64 2/3 Installing : 44:bind-9.10.2-1.el6.x86_64 3/3 Verifying : 44:bind-utils-9.10.2-1.el6.x86_64 1/3 Verifying : 44:bind-libs-9.10.2-1.el6.x86_64 2/3 Verifying : 44:bind-9.10.2-1.el6.x86_64 3/3 Installed: bind.x86_64 44:9.10.2-1.el6 bind-utils.x86_64 44:9.10.2-1.el6 Dependency Installed: bind-libs.x86_64 44:9.10.2-1.el6 Complete!
Проверить версию и "флаги" (опции) с которыми был собран BIND можно с помощью комманд:
$ named -v BIND 9.10.2 $ named -V BIND 9.10.2 <id:53e49fb5> built by make with '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-libtool' '--localstatedir=/var' '--enable-threads' '--enable-ipv6' '--with-pic' '--disable-static' '--disable-openssl-version-check' '--with-gssapi=yes' '--disable-isc-spnego' '--with-docbook-xsl=/usr/share/sgml/docbook/xsl-stylesheets' '--enable-fixed-rrset' '--enable-filter-aaaa' '--enable-rrl' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'target_alias=x86_64-redhat-linux-gnu' 'CFLAGS= -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' 'CPPFLAGS= -DDIG_SIGCHASE' compiled by GCC 4.4.7 20120313 (Red Hat 4.4.7-11) compiled with OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013 linked to OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 compiled with libxml2 version: 2.7.6 linked to libxml2 version: 20706
Наш только-что установленный ДНС сервер ещё не запущен и не добавлен в автозагрузку - проверим состояние и добавим его в автозагрузку:
$ service named status rndc: neither /etc/rndc.conf nor /etc/rndc.key was found named is stopped $ chkconfig --list|grep -i named named 0:off 1:off 2:off 3:off 4:off 5:off 6:off $ chkconfig named on named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Базовая настройка ДНС сервера BIND
В данном примере мы будем настраивать на ДНС сервере BIND зону remoteshaman.com, потому в Вашем случае поменяете remoteshaman.com на своё доменное имя. Подправим /etc/named.conf до нужной кондиции предварительно сохранив его копию:
$ cp /etc/named.conf /etc/named.conf.bak $ vi /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { localhost; 93.170.128.114; }; #listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; allow-transfer { none; }; recursion no; version "Go away!"; additional-from-auth no; additional-from-cache no; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "remoteshaman.com" IN { type master; file "zone/remoteshaman.com.zone"; allow-update { none; }; };
В конце основного файла конфигурации /etc/named.conf мы добавили секцию "zone "remoteshaman.com" IN {...}", в которой указали имя файла содержащего ресурсные ДНС записи о нашей зоне remoteshaman.com.
Обычно файлы зон сваливают прямо в каталог /var/named, что на мой взгляд как не эстетично, так и не практично - для зон мы создадим отдельный каталог /var/named/zone. Файл зоны "remoteshaman.com.zone" BIND будет искать в директории /var/named/zone, в которой мы его сейчас и создадим:
$ mkdir /var/named/zone $ chown named:named /var/named/zone $ chmod 0750 /var/named/zone $ vi /var/named/zone/remoteshaman.com.zone $ORIGIN remoteshaman.com. $TTL 3d @ IN SOA ns1.remoteshaman.com. www.remoteshaman.com.yandex.ru. ( 1458462568 ; serial 1d ; refresh after 1 day 2h ; retry after 2 hour 4w ; expire after 4 week 1d ; minimum TTL of 1 day ) @ 86400 IN NS ns1.remoteshaman.com. @ 259200 IN MX 10 mx.yandex.net. @ 3600 IN SPF "v=spf1 redirect=_spf.yandex.net" @ 259200 IN TXT google-site-verification=jr5WMEnS1hBd6ZgyT0HRwNpVbWMgDy9KgDdsbsse-Eo remoteshaman.com. 259200 IN A 93.170.128.114 ns1.remoteshaman.com. 259200 IN A 93.170.128.114 www.remoteshaman.com. 259200 IN CNAME remoteshaman.com.
Проверяем файл нашей зоны и если всё "OK", то мы должны получить примерно такой вот результат:
$ named-checkzone remoteshaman.com /var/named/zone/remoteshaman.com.zone zone remoteshaman.com/IN: loaded serial 1458462568 OK $ service named start $ service named status version: 9.10.2 (Go away!) <id:53e49fb5> boot time: Fri, 25 Mar 2016 05:28:17 GMT last configured: Fri, 25 Mar 2016 06:30:11 GMT CPUs found: 1 worker threads: 1 UDP listeners per interface: 1 number of zones: 9 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running named (pid 13289) is running...
Проверяем работу нашего ДНС сервера:
$ nslookup remoteshaman.com 93.170.128.114
Server: 93.170.128.114
Address: 93.170.128.114#53
Name: remoteshaman.com
Address: 93.170.128.114Если при "ресолве" мы получаем ошибку:
$ nslookup www.remoteshaman.com 93.170.128.114 Server: 93.170.128.114 Address: 93.170.128.114#53 ** server can't find www.remoteshaman.com: NXDOMAIN
значит в конце CNAME записи забыли поставить точку.
Включаем DNSSEC
Для ключей у нас будет отдельный каталог /var/named/keys, в котором будут размещатся подкаталоги с именами зон:
$ mkdir -p /var/named/keys/remoteshaman.com $ chown -R named:named /var/named/keys $ chmod 0750 /var/named/keys /var/named/keys/remoteshaman.com
Так DNSSEC ключи для нашего домена remoteshaman.com будут расположены в директории /var/named/keys/remoteshaman.com - входим в него и создаём там DNSSEC ключи:
$ cd /var/named/keys/remoteshaman.com $ dnssec-keygen -a RSASHA256 -b 1024 remoteshaman.com Generating key pair...++++++...++++++ Kremoteshaman.com.+008+00756 $ ls Kremoteshaman.com.+008+00756.key Kremoteshaman.com.+008+00756.private $ dnssec-keygen -a RSASHA256 -b 2048 -f KSK remoteshaman.com Generating key pair...+++...+++ Kremoteshaman.com.+008+46435 $ ls Kremoteshaman.com.+008+00756.key Kremoteshaman.com.+008+46435.key Kremoteshaman.com.+008+00756.private Kremoteshaman.com.+008+46435.private $ chmod 0640 /var/named/keys/remoteshaman.com/* $ chown -R named:named /var/named/keys
Если создание ключей зависло более чем на 1 мин, значит нехватает так званой энтропии (случайных чисел) и нам ппонадобится установить пакет "rng-tools" и повторить попытку если она была прервана:
$ yum -y install rng-tools $ service rngd start Unable to open file: /dev/tpm0 can't open any entropy source Maybe RNG device modules are not loaded $ rngd -v Unable to open file: /dev/tpm0 can't open any entropy source Maybe RNG device modules are not loaded $ vi /etc/sysconfig/rngd # Add extra options here EXTRAOPTIONS="-r /dev/urandom" $ service rngd start $ chkconfig rngd on
Всё что нам теперь осталось, так это слегка подшаманить секцию "zone" в /etc/named.conf и перезагрузить сервер с новой конфигурацией и зона будет подписана автоматически:
$ vi /etc/named.conf options { ... } ... zone "example.com" IN { type master; file "zone/remoteshaman.com.zone"; allow-update { none; }; key-directory "keys/remoteshaman.com"; inline-signing yes; auto-dnssec maintain; }; $ rndc reload
После этого в каталоге /var/named/zone/ должны будут образоваться три дополнительных бинарных файла с раширениями .jbk, .signed и .jnl:
$ ls /var/named/zone/ remoteshaman.com.zone remoteshaman.com.zone.jbk remoteshaman.com.zone.signed remoteshaman.com.zone.signed.jnl
Проверить успешность подписания зоны можно коммандой:
$ dig @93.170.128.114 remoteshaman.com +dnssec ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @93.170.128.114 remoteshaman.com +dnssec ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2937 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;remoteshaman.com. IN A ;; ANSWER SECTION: remoteshaman.com. 259200 IN A 93.170.128.114 remoteshaman.com. 259200 IN RRSIG A 8 2 259200 20160424061932 20160325051944 756 remoteshaman.com. CP8Enmo9+hCC4SwLj2T8Ejq7eJGdXQuO+CfXWWlxtwAWH9wmqUfGdgrH xBIz+varu2sKXgUn1iDQ2/3DY/LuLcrivqPMflTnkRNUuzBbwm4TGJ22 86WhWODVDqO8T6CEgyCGEhpKiu98heT+I4hWNvxOdY0lGUQQRCbKwsAS S58=
Либо коммандой:
$ dig @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; (1 server found) ;; global options: +cmd remoteshaman.com. 259200 IN DNSKEY 256 3 8 ( AwEAAdnGo5DvjZzhPBxTwYxq6kd+IeWONdZSCzahxR49 bzT2y9BUVbdr1nV0mYyqG6oJ+HUR8tdlW9ayb+3qNYeR 4T2CkpKdEZjxmJ2flhTc7LwBFVeAqa91FQSE+YRi0uEn +C//VWXMeZ9orCpotm3mb+KYWWt+CxgaND/Qk5xFE+y5 ) ; ZSK; alg = RSASHA256; key id = 756 remoteshaman.com. 259200 IN DNSKEY 257 3 8 ( AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jaha sPshQoyhAtt8mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+ 1EXjm/2bao6wW06LclvypdPUYA9DTBbnnY9nv5LFSMjP B2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8WmBnHBFR 4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fm cpIFHcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IY G+L/5ugHCuNZ+mm5pBMVQzHFdAfnJfDB9hu69d5lJ6uQ DGqSbyLz31c39QFUfePg8Omec/nYbc6ktIvl8Pc= ) ; KSK; alg = RSASHA256; key id = 46435
Если в секции "options {...}" конфига /etc/named.conf не указано "allow-transfer { none; };", то приведённая ниже комманда выдыаст нам список всех ДНС записей или же вернёт "; Transfer failed.":
$ dig @93.170.128.114 remoteshaman.com. AXFR +multiline +onesoa ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @93.170.128.114 remoteshaman.com. AXFR +multiline +onesoa ; (1 server found) ;; global options: +cmd ; Transfer failed.
Отправка регистратору DS/KSK записи
DNSSEC подписание своей доменной зоны на своём или любом стороннем ДНС сервере не означает, что DNSSEC уже включен и полноценно работает. Последним шагом на пути к окончательной активации DNSSEC будет отправка DS/KSK (Delegation of Signing, Key Signing key) записи на ДНС сервера корневых зон, которая выполняется непосредственно через регистратора доменного имени ибо только регистратор домена имеет право доступа к ДНС серверам корневых доменных зон.
В большинстве случаев нам нужна именно KSK запись, которую мы пожем получить либо непосредственно из ключа соданного ранее коммандой "dnssec-keygen" с флагом "-f KSK":
$ less /var/named/keys/remoteshaman.com/Kremoteshaman.com.+008+46435.key ; This is a key-signing key, keyid 46435, for remoteshaman.com. ; Created: 20160324135802 (Thu Mar 24 16:58:02 2016) ; Publish: 20160324135802 (Thu Mar 24 16:58:02 2016) ; Activate: 20160324135802 (Thu Mar 24 16:58:02 2016) remoteshaman.com. IN DNSKEY 257 3 8 AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jahasPshQoyhAtt8 mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+1EXjm/2bao6wW06LclvypdPU YA9DTBbnnY9nv5LFSMjPB2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8 WmBnHBFR4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fmcpIF Hcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IYG+L/5ugHCuNZ+mm5 pBMVQzHFdAfnJfDB9hu69d5lJ6uQDGqSbyLz31c39QFUfePg8Omec/nY bc6ktIvl8Pc=
Либо выполнив ДНС запрос коммандой:
$ dig @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; (1 server found) ;; global options: +cmd remoteshaman.com. 259200 IN DNSKEY 256 3 8 ( AwEAAdnGo5DvjZzhPBxTwYxq6kd+IeWONdZSCzahxR49 bzT2y9BUVbdr1nV0mYyqG6oJ+HUR8tdlW9ayb+3qNYeR 4T2CkpKdEZjxmJ2flhTc7LwBFVeAqa91FQSE+YRi0uEn +C//VWXMeZ9orCpotm3mb+KYWWt+CxgaND/Qk5xFE+y5 ) ; ZSK; alg = RSASHA256; key id = 756 remoteshaman.com. 259200 IN DNSKEY 257 3 8 ( AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jaha sPshQoyhAtt8mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+ 1EXjm/2bao6wW06LclvypdPUYA9DTBbnnY9nv5LFSMjP B2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8WmBnHBFR 4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fm cpIFHcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IY G+L/5ugHCuNZ+mm5pBMVQzHFdAfnJfDB9hu69d5lJ6uQ DGqSbyLz31c39QFUfePg8Omec/nYbc6ktIvl8Pc= ) ; KSK; alg = RSASHA256; key id = 46435
Однако для полноты счастья, если регистратору вместо KSK потребуется именно запись формата DS, мы сгенерируем записи DS от созданного ранее KSK (Kremoteshaman.com.+008+46435.key) с использованием трёх различных алгоритмов хэширования (SHA-1 (type 1), SHA-256 (type 2) и SHA-384 (type 4) соответственно):
$ cd /var/named/keys/remoteshaman.com $ dnssec-dsfromkey -a SHA-1 Kremoteshaman.com.+008+46435.key remoteshaman.com. IN DS 46435 8 1 61225075311C0FE44FE421F64D5BA153525CFEBA $ dnssec-dsfromkey -a SHA-256 Kremoteshaman.com.+008+46435.key remoteshaman.com. IN DS 46435 8 2 82CDE38A69D69F0B9452ADD235629D6FD7E24DB13A252DD3B903576536CFB488 $ dnssec-dsfromkey -a SHA-384 Kremoteshaman.com.+008+46435.key remoteshaman.com. IN DS 46435 8 4 A7D507EF058F0C8A03EE03FC4B64094EE271F4C3F2AF9EA7984C0F710002E79EE3F47E7F5297779BFED280D1A94FE171
В итоге, для завершения активации DNSSEC на нашем домене remoteshaman.com, мы должны отправить нешему регистратору доменных имён такую вот инфу:
Key id (ака Key tag) 46435 Algorithm RSASHA256 (type 8) Digest type 1 (SHA-1) 61225075311C0FE44FE421F64D5BA153525CFEBA Digest type 2 (SHA-256) 82CDE38A69D69F0B9452ADD235629D6FD7E24DB13A252DD3B903576536CFB488 Digest type 4 (SHA-384) A7D507EF058F0C8A03EE03FC4B64094EE271F4C3F2AF9EA7984C0F710002E79EE3F47E7F5297779BFED280D1A94FE171 DNSKEY (flags 257, KSK) AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jahasPshQoyhAtt8mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+1EXjm/2bao6wW06LclvypdPUYA9DTBbnnY9nv5LFSMjPB2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8WmBnHBFR4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fmcpIFHcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IYG+L/5ugHCuNZ+mm5pBMVQzHFdAfnJfDB9hu69d5lJ6uQDGqSbyLz31c39QFUfePg8Omec/nYbc6ktIvl8Pc=
Для справки
Таблица номеров алгоритмов используемых при подписании зоны:
- RSA/MD5 (RSAMD5)
- Diffie-Hellman (DH)
- DSA/SHA1 (DSA)
- - Reserved
- RSA/SHA-1 (RSASHA1)
- DSA-NSEC3-SHA1
- RSASHA1-NSEC3-SHA1
- RSA/SHA-256 (RSASHA256)
- - Reserved
- RSA/SHA-512 (RSASHA512)
- - Reserved
- ГОСТ Р 34.10-2001 (ECC-GOST)
- ECDSA Curve P-256 with SHA-256 (ECDSAP256SHA256)
- ECDSA Curve P-384 with SHA-384 (ECDSAP384SHA384)
- SHA-1
- SHA-256
- ---
- SHA-384
После того как DS (формируется из KSK) была успешно добавлена регистратором на корневые ДНС сервера, в нашем случае корневой зоны .com, можем дополнительно проверить работоспособность DNSSEC на домене remoteshaman.com с помощью плагина DNSSEC/TLSA Validator для браузера Mizilla Firefox (Pale Moon or Iceweasel in Unix-like).
ПРОБЛЕМЫ?
dns_dnssec_findmatchingkeys: error reading key file .private: permission denied
Проблемы доступа к файлам ключей:
$ rndc reload $ tail -f /var/log/messages ... Mar 25 09:01:46 remotehelp named[13289]: received control channel command 'reloa d' Mar 25 09:01:46 remotehelp named[13289]: loading configuration from '/etc/named.conf' Mar 25 09:01:46 remotehelp named[13289]: reading built-in trusted keys from file '/etc/named.iscdlv.key' Mar 25 09:01:46 remotehelp named[13289]: using default UDP/IPv4 port range: [1024, 65535] Mar 25 09:01:46 remotehelp named[13289]: using default UDP/IPv6 port range: [1024, 65535] Mar 25 09:01:46 remotehelp named[13289]: sizing zone task pool based on 8 zones Mar 25 09:01:46 remotehelp named[13289]: using built-in DLV key for view _default Mar 25 09:01:46 remotehelp named[13289]: configuring command channel from '/etc/rndc.key' Mar 25 09:01:46 remotehelp named[13289]: configuring command channel from '/etc/rndc.key' Mar 25 09:01:46 remotehelp named[13289]: couldn't add command channel ::1#953: address not available Mar 25 09:01:46 remotehelp named[13289]: the working directory is not writable Mar 25 09:01:46 remotehelp named[13289]: reloading configuration succeeded Mar 25 09:01:46 remotehelp named[13289]: reloading zones succeeded Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'dlv.isc. org/DNSKEY/IN': 2001:500:60::29#53 Mar 25 09:01:46 remotehelp named[13289]: all zones loaded Mar 25 09:01:46 remotehelp named[13289]: running Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns.isc.afilias-nst.info/A/IN': 2a01:8840:9::1#53 Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns.isc.afilias-nst.info/AAAA/IN': 2a01:8840:9::1#53 Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns2.isc.ultradns.net/A/IN': 2610:a1:1017::e8#53 Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns2.isc.ultradns.net/AAAA/IN': 2610:a1:1017::e8#53 Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns1.isc.ultradns.net/A/IN': 2610:a1:1017::e8#53 Mar 25 09:01:46 remotehelp named[13289]: network unreachable resolving 'ns1.isc.ultradns.net/AAAA/IN': 2610:a1:1017::e8#53 Mar 25 09:01:46 remotehelp named[13289]: zone remoteshaman.com/IN (signed): reconfiguring zone keys Mar 25 09:01:46 remotehelp named[13289]: dns_dnssec_findmatchingkeys: error reading key file Kremoteshaman.com.+008+00756.private: permission denied Mar 25 09:01:46 remotehelp named[13289]: dns_dnssec_findmatchingkeys: error reading key file Kremoteshaman.com.+008+46435.private: permission denied Mar 25 09:01:46 remotehelp named[13289]: zone remoteshaman.com/IN (signed): next key event: 25-Mar-2016 10:01:46.894
Пользователь "named" должен иметь права на доступ к файлам ключей:
$ chown -R named:named /var/named/keys $ chmod 0750 /var/named/keys /var/named/keys/remoteshaman.com $ chmod 0640 /var/named/keys/remoteshaman.com/* $ rndc reload $ tail -f /var/log/messages ... Mar 25 09:13:04 remotehelp named[13289]: zone remoteshaman.com/IN (signed): reconfiguring zone keys Mar 25 09:13:04 remotehelp named[13289]: remoteshaman.com.zone.signed.jnl: create: permission denied Mar 25 09:13:04 remotehelp named[13289]: zone remoteshaman.com/IN (signed): zone_rekey:dns_journal_open -> unexpected error .signed.jnl: create: permission denied
Автоматическая DNSSEC подпись нашей зоны не сработала из-за запрета создания файлов или каталогов пользователем "named" в каталоге "/var/named":
$ ls -la /var ... drwxr-x--- 7 root named 4096 Mar 25 09:18 named
Создаём отдельный каталог "/var/named/zone" и даём пользователю "named" право на запись в него, а также перемещаем в него файл нашей зоны, ну, и не забываем изменить путь к файлу в /etc/named.conf:
$ cd /var/named $ mkdir ./zone $ chown -R named:named ./zone $ chmod 0750 ./zone $ mv remoteshaman.com.zone ./zone $ vi /etc/named.conf $ rndc reload $ tail -f /var/log/messages ... Mar 25 09:19:44 remotehelp named[13289]: zone remoteshaman.com/IN (signed): receive_secure_serial: unchanged Mar 25 09:19:44 remotehelp named[13289]: zone remoteshaman.com/IN (signed): reconfiguring zone keys Mar 25 09:19:44 remotehelp named[13289]: zone remoteshaman.com/IN (signed): next key event: 25-Mar-2016 10:19:44.035 $ ls -la /var/named/zone total 36 drwxr-xr-x 2 named named 4096 Mar 25 09:19 . drwxr-x--- 7 root named 4096 Mar 25 09:18 .. -rw-r--r-- 1 root named 1178 Mar 20 13:30 remoteshaman.com.zone -rw-r--r-- 1 named named 512 Mar 25 09:19 remoteshaman.com.zone.jbk -rw-r--r-- 1 named named 2577 Mar 25 09:19 remoteshaman.com.zone.signed -rw-r--r-- 1 named named 12583 Mar 25 09:19 remoteshaman.com.zone.signed.jnl $ dig @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @93.170.128.114 remoteshaman.com. DNSKEY +multiline +noall +answer ; (1 server found) ;; global options: +cmd remoteshaman.com. 259200 IN DNSKEY 256 3 8 ( AwEAAdnGo5DvjZzhPBxTwYxq6kd+IeWONdZSCzahxR49 bzT2y9BUVbdr1nV0mYyqG6oJ+HUR8tdlW9ayb+3qNYeR 4T2CkpKdEZjxmJ2flhTc7LwBFVeAqa91FQSE+YRi0uEn +C//VWXMeZ9orCpotm3mb+KYWWt+CxgaND/Qk5xFE+y5 ) ; ZSK; alg = RSASHA256; key id = 756 remoteshaman.com. 259200 IN DNSKEY 257 3 8 ( AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jaha sPshQoyhAtt8mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+ 1EXjm/2bao6wW06LclvypdPUYA9DTBbnnY9nv5LFSMjP B2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8WmBnHBFR 4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fm cpIFHcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IY G+L/5ugHCuNZ+mm5pBMVQzHFdAfnJfDB9hu69d5lJ6uQ DGqSbyLz31c39QFUfePg8Omec/nYbc6ktIvl8Pc= ) ; KSK; alg = RSASHA256; key id = 46435
Подпись прошла успешно.

