Bind — открытая и наиболее распространённая реализация DNS-сервера, обеспечивающая выполнение преобразования DNS-имени в IP-адрес и наоборот. Исполняемый файл-демон сервера BIND называется named. BIND поддерживается организацией Internet Systems Consortium. 10 из 13 корневых серверов DNS работают на BIND, оставшиеся 3 работают на NSD (Wikipedia). Для чего может понадобится свой DNS сервер, ну причин может быть множество, от банального (изучить принцип работы dns) или для делегирования приобретенных доменов. В данном примере мы будем настраивать два сервера для делегирования домена angald.ru.
1. Установка и подготовка Bind
Устанавливаем наш сервер dns и набор утилит для самопроверки
1 |
sudo apt install bind9 dnsutils -y |
Теперь создадим директории для нашей зоны и файлов ключей
1 2 |
sudo mkdir /etc/bind/keys sudo mkdir /var/lib/bind/zones |
Настраиваем bind
1 |
sudo nano /etc/bind/named.conf.options |
И приводим файл к такому виду
1 2 3 4 5 6 7 8 9 10 |
options { directory "/var/cache/bind"; allow-query { any; }; version "DNS angald.ru"; allow-recursion { none; }; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; listen-on-v6 { any; }; }; |
- allow-query { any; }; — отвечать всем на запросы dns
- version «DNS angald.ru»; — название сервера
- allow-recursion { none; }; — отключаем использование рекурсивных запросов
- dnssec-enable yes; — включение dnssec на уровне сервера
- dnssec-validation yes; — проверка корректность ответов
- dnssec-lookaside auto; — разрешение использовать сторонние корни DNSSEC
2. Настройка зоны и DNSSEC
Открываем файл для добавление зоны
1 |
sudo nano /etc/bind/named.conf.local |
1 2 3 4 5 6 7 |
zone "angald.ru" IN { type master; file "/var/lib/bind/zones/angald.ru"; allow-transfer {212.220.110.32;}; allow-update {212.220.110.32;}; notify yes; }; |
- zone «angald.ru» IN — название зоны которую будем обслуживать
- type master — тип записи на сервере, в данном случае мастер
- file «/var/lib/bind/zones/angald.ru» — путь до файла с настройками зоны
- allow-transfer {212.220.110.32;} — разрешаем передачу зоны на ниши dns сервера
- allow-update {212.220.110.32;} — разрешаем обновление
- notify yes; — автоматическое обновление подчинённых dns серверов
Создаем файл для настройки зоны
1 |
sudo nano /var/lib/bind/zones/angald.ru |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$TTL 3600 angald.ru. IN SOA ns0.angald.ru. ns1.angald.ru. ( 1 600 3600 1w 300 ) IN NS ns0.angald.ru. IN NS ns1.angald.ru. IN A 178.47.37.117 ns0 IN A 178.47.37.117 ns1 IN A 212.220.110.32 www IN A 178.47.37.117 |
Где:
- $TTL 3600 — время жизни
- angald.ru. IN SOA ns0.angald.ru. root.angald.ru. — зона, которая обслуживается данным сервером
- 1 ; — серийный номер DNS записи
- 600 ; — указывает подчиненным DNS серверам как часто им обращаться, для поиска изменений к master серверу
- 3600 ; — говорит о том, сколько Slave сервер должен подождать, прежде чем повторить попытку
- 1w ; — максимальный срок жизни записей, после которой они потеряют актуальность (1 неделя)
- 300 ; — Минимальный срок жизни записи 5 мин
- IN NS ns0.angald.ru. ; — NS сервера который обслуживает эту зону
- IN A 178.47.37.117; — А запись angald.ru
- IN A 178.47.37.117 ; — записи для поиска наших NS серверов
Меняем права на файл
1 |
sudo chown -R bind:bind /var/lib/bind/ |
Сохраняем файл и перезапускаем bind
1 |
sudo systemctl restart bind9.service |
Если что-то пошло не так и сервер не запускается, то можно проверить конфиги следующей командой
1 |
sudo named-checkconf -z /etc/bind/named.conf |
Переходим к настройке DNSSEC
Переходим в каталог где будут находится наши ключи
1 |
cd /etc/bind/keys/ |
Генерируем мастер ключ
1 |
sudo dnssec-keygen -f KSK -a RSASHA1 -b 2048 -n ZONE -r /dev/urandom angald.ru |
- -f KSK — флаг, который говорит, что формируется мастер ключ.
- -a RSASHA1 — используемый алгоритм шифрования.
- -b 2048 — размер ключа в битах.
- -n ZONE — для DNS-зоны.
- -r /dev/urandom — путь к файлу со случайными данными. В различных версиях системы путь может отличаться. Если упустить этот ключ в CentOS, процесс генерации сертификата может зависнуть.
- angald.ru — домен, для которого предназначен ключ.
Затем генерируем ключ зоны
1 |
sudo dnssec-keygen -a RSASHA1 -b 2048 -n ZONE -r /dev/urandom angald.ru |
Меняем владельца для файлов ключей
1 |
sudo chown -R bind:bind /etc/bind/keys |
Теперь нужно внести правку для автоматического подписания нашего файла зоны
1 |
sudo nano /etc/bind/named.conf.local |
1 2 3 4 5 6 7 8 9 10 11 |
zone "angald.ru" IN { type master; file "/var/lib/bind/zones/angald.ru"; key-directory "/etc/bind/keys"; auto-dnssec maintain; inline-signing yes; allow-transfer {212.220.110.32;}; allow-update {212.220.110.32;}; notify yes; }; |
Что добавилось:
- key-directory «/etc/bind/keys»; — директория с нашими ключами
- auto-dnssec maintain; — активация и включение dnssec ключей
- inline-signing yes; — включает режим прозрачного формирования подписей, не требуя внесения изменений непосредственно в файл зоны
Перезагружаем конфигурацию bind
1 |
sudo rndc reload |
3. Проверка цифровой подписи
После этого можно проверить нашу зону на цифровую подпись
1 |
dig DNSKEY angald.ru. @localhost +multiline |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> DNSKEY angald.ru. @localhost +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43986 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;angald.ru. IN DNSKEY ;; ANSWER SECTION: angald.ru. 86400 IN DNSKEY 256 3 7 ( AwEAActPMYurNEyhUgHjPctbLCI1VuSj3xcjI8QFTpdM 8k3cYrfwB/WlNKjnnjt98nPmHv6frnuvs2LKIvvGzz++ kVwVc8uMLVyLOxVeKhygDurFQpLNNdPumuc2MMRvV9me fPrdKWtEEtOxq6Pce3DW2qRLjyE1n1oEq44gixn6hjgo sG2FzV4fTQdxdYCzlYjsaZwy0Kww4HpIaozGNjoDQVI/ f3JtLpE1MYEb9DiUVMjkwVR5yH2UhJwZH6VVvDOZg6u6 YPOSUDVvyofCGcICLqUOG+qITYVucyIWgZtHZUb49dpG aJTAdVKlOTbYV9sbmHNuMuGt+1/rc+StsjTPTHU= ) ; key id = 40400 angald.ru. 86400 IN DNSKEY 257 3 7 ( AwEAAa2BE0dAvMs0pe2f+D6HaCyiFSHw47BA82YGs7Sj qSqH3MprNra9/4S0aV6SSqHM3iYZt5NRQNTNTRzkE18e 3j9AGV8JA+xbEow74n0eu33phoxq7rOpd/N1GpCrxUsG kK4PDkm+R0hhfufe1ZOSoiZUV7y8OVGFB+cmaVb7sYqB RxeWPi1Z6Fj1/5oKwB6Zqbs7s7pmxl/GcjTvdQkMFtOQ AFGqaaSxVrisjq7H3nUj4hJIJ+SStZ59qfW3rO7+Eqgo 1aDYaz+jFHZ+nTc/os4Z51eMWsZPYRnPRJG2EjJmkBrJ huZ9x0qnjEjUPAcUgMVqTo3hkRv0D24I10LAVQLETuw/ QOuWMG1VjybzLbXi5YScwcBDAgtEpsQA9o7u6VC00DGh +2+4RmgrQ7mQ5A9MwhglVPaNXKuI6sEGlWripgTwm425 JFv2tGHROS55Hxx06A416MtxBpSEaPMYUs6jSIyf9cjB BMV24OjkCxdz29zi+OyUyHwirW51BFSaOQuzaRiOsovM NSEgKWLwzwsQ5cVJBEMw89c2V0sHa4yuI5rr79msRgZT KCD7wa1Hyp7s/r+ylHhjpqrZwViOPU7tAGZ3IkkJ2SMI e/h+FGiwXXhr769EHbVE/PqvdbpcsgsDqFu0K2oqY70u SxnsLB8uVKYlzjG+UIoQzefBluQl ) ; key id = 62910 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Nov 27 18:18:30 2013 ;; MSG SIZE rcvd: 839 |
Хэши конечно будут разные
Еще проверка
1 |
dig A example.net. @localhost +noadditional +dnssec +multiline |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> A angald.ru. @localhost +noadditional +dnssec +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32902 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 5 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;angald.ru. IN A ;; ANSWER SECTION: angald.ru. 86400 IN A 93.184.216.119 angald.ru. 86400 IN RRSIG A 7 2 86400 20131227171405 ( 20131127171405 40400 angald.ru. JCoL8L7As1a8CXnx1W62O94eQl6zvVQ3prtNK7BWIW9O lir/4V+a6c+0tbt4z4lhgmb0sb+qdvqRnlI7CydaSZDb hlrJA93fHqFqNXw084YD1gWC+M8m3ewbobiZgBUh5W66 1hsVjWZGvvQL+HmobuSvsF8WBMAFgJgYLg0YzBAvwHIk 886be6vbNeAltvPl9I+tjllXkMK5dReMH40ulgKo+Cwb xNQ+RfHhCQIwKgyvL1JGuHB125rdEQEVnMy26bDcC9R+ qJNYj751CEUZxEEGI9cZkD44oHwDvPgF16hpNZGUdo8P GtuH4JwP3hDIpNtGTsQrFWYWL5pUuuQRwA== ) ;; AUTHORITY SECTION: angald.ru. 86400 IN NS master.angald.ru. angald.ru. 86400 IN NS slave.angald.ru. angald.ru. 86400 IN RRSIG NS 7 2 86400 20131227171405 ( 20131127171405 40400 example.net. hEGzNvKnc3sXkiQKo9/+ylU5WSFWudbUc3PAZvFMjyRA j7dzcVwM5oArK5eXJ8/77CxL3rfwGvi4LJzPQjw2xvDI oVKei2GJNYekU38XUwzSMrA9hnkremX/KoT4Wd0K1NPy giaBgyyGR+PT3jIP95Ud6J0YS3+zg60Zmr9iQPBifH3p QrvvY3OjXWYL1FKBK9+rJcwzlsSslbmj8ndL1OBKPEX3 psSwneMAE4PqSgbcWtGlzySdmJLKqbI1oB+d3I3bVWRJ 4F6CpIRRCb53pqLvxWQw/NXyVefNTX8CwOb/uanCCMH8 wTYkCS3APl/hu20Y4R5f6xyt8JZx3zkZEQ== ) ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 28 00:01:06 2013 ;; MSG SIZE rcvd: 1335 |
Записи RRSIG означают, что записи имеют цифровую подпись. Все работает. Осталось получить DS записи для реестра доменов и прописать их в панели регистратора. Сделать это тоже не сложно:
1 |
dig @127.0.0.1 dnskey angald.ru | sudo dnssec-dsfromkey -f - angald.ru |
1 2 |
angald.ru. IN DS 50707 8 1 42727823EB40A1D93F0A1CF22E4AE8768BC40FBA angald.ru. IN DS 50707 8 2 BC34B1EA3196C01EEFCC4C571B61753423D264A712E0A4F35847BBDC A5954A5F |
Из пояснений тут надо указать, что тэг — это число 50707. Дальше цифры: 8 — это алгоритм, 1 или 2 — это тип подписи (1 — SHA1, 2 — SHA-256).
После того, как мы добавили DS записи в реестр, спустя какое-то время можно проверять все ли в порядке. Это можно сделать на сайте https://dnssec-analyzer.verisignlabs.com.
4. Настройка второго сервера
Мастер сервер мы настроили но это пол беды т.к. регистратор требует минимум два dns сервера да какая никакая отказоустойчивость нужна. Ставим на второй сервер также bind и утилиты
1 |
sudo apt install bind9 dnsutils -y |
Создаем директорию для фалов зон
1 |
sudo mkdir /var/lib/bind/zones |
Назначаем права
1 |
sudo chown -R bind:bind /var/lib/bind/ |
Настраиваем bind
1 |
sudo nano /etc/bind/named.conf.options |
И приводим файл к такому виду
1 2 3 4 5 6 7 8 |
options { directory "/var/cache/bind"; allow-query { any; }; version "DNS angald.ru"; allow-recursion { none; }; dnssec-validation auto; listen-on-v6 { any; }; }; |
Далее добавляем нашу зону
1 |
sudo nano /etc/bind/named.conf.local |
1 2 3 4 5 6 |
zone "angald.ru" IN { type slave; file "/var/lib/bind/zones/angald.ru"; masters { 178.47.37.117; }; allow-transfer {"none";}; }; |
Где:
- zone «angald.ru» IN — название зоны которую будем обслуживать
- type slave — тип записи на сервере, в данном случае подчинённая
- file «/var/lib/bind/zones/angald.ru» — путь до файла с настройками зоны
- master {212.220.110.32;} — IP адрес Мастер сервера
После этого перезапускаем сервер dns
1 |
sudo systemctl restart bind9.service |
Теперь проверим наш сервер что зона передалась корректно, проводим тесты что мы делали выше
1 |
dig DNSKEY angald.ru. @localhost +multiline |
1 |
dig A example.net. @localhost +noadditional +dnssec +multiline |
В ответ вы должны получить тоже самое. На этом все, настройка dns закончена.
Использовались материалы: