# Настройка сервера разрешения имён BIND ## 1. Установка Debian, Ubuntu ```bash sudo apt install bind9 bind9-doc dnsutils python-ply-doc ``` *при этом, можно ограничится установкой основного пакета `bind`, однако установщик предлагает и дополнительные пакеты* Cent OS Stream ```bash sudo dnf install bind bind-utils ``` В результате установки в системе появится служба `named.sevice` ## 2. Запуск службы После установки необходимо перечитать список демонов системы ```bash sudo systemctl daemon-reload ``` и выполнить запуск службы `named` ```bash sudo systemctl enable --now named.service ``` ## 3. Основной конфигурационный файл BIND Конфигурационный файлы расположены: Debian, Ubuntu - `/etc/bind`
Cent OS - `/etc` Основным файлом настройки является - `named.conf`
Для проверки корректности конфигурации служит утилита - `named-checkconf` Кроме, непосредственно, самой настройки сервера, файл `named.conf` может включать ссылки на другие конфигурационные файлы, которые указываются в директиве `include`, например ```bash include "/etc/bind/named.conf.options"; ``` Таким образом, файл `named.conf` может содержать исключительно ссылки на другие конфигурационные файлы ```bash da2001@ns:/etc/bind $ cat /etc/bind/named.conf include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; ``` В конфигурационных файлах bind можно использовать комментарии различных стилей:
стиль C: `/* */`
стиль C++: `// до конца строки`
стиль Unix: `# до конца строки`
## 4. Кэширующий режим работы По умолчанию конфигурация настраивается на работу в режиме кэширующего сервера. В этом режиме `bind` только сохраняет в своём кэше ответы от вышестоящих DNS серверов и транслирует их клиентам. За счёт этого, при повторном запросе, ответ клиенту выдаётся из записи в кэше, соответственно и ответ клиент получает быстрее, т.к. нет обращения к внешним серврерам имён. Всё, что для этого требуется - это добавить IP адреса DNS вышестоящих серверов в секции `forwarders` Пример настройки - `/etc/bind/named.conf.options` ```bash options { directory "/var/cache/bind"; // интерфейсы, на которых принимаются DNS запросы listen-on port 53 { 127.0.0.1; 192.168.13.2; // IP адрес интерфейса сервера }; listen-on-v6 port 53 { any; }; // кто может обращаться за DNS запросами к этому серверу. { any; } значит любой allow-query { any; }; // вышестоящие DNS-сервера, на которые будет переадресован запрос при отсутствии ответа forwarders { // NS сервера Яндекса 77.88.8.8; 77.88.8.1; }; dnssec-validation auto; }; ``` После внесения изменений в конфигурацию, необходимо выполнить проверку синтаксиса с помощью утилиты `named-checkconf`. Если будут обнаружены ошибки, утилита укажет на строки с ошибками и предложит варианты исправления. ## 5. Firewall Если на сервере активирован межсетевой экран, необходимо разрешить работу DNS: Cent OS (firewalld) ```bash sudo firewall-cmd --add-service=dns --permanent sudo firewall-cmd --reload ``` Проверить разрешения ```bash sudo firewall-cmd --list-services ``` или ```bash sudo firewall-cmd --list-all ``` Ubuntu (ufw) ```bash sudo ufw allow dns ``` Проверить разрешения ```bash sudo ufw status verbose ``` Перезапуск службы для применения внесенных изменений в конфигурацию ```bash sudo systemctl restart named.service ``` ## 6. Проверка работы BIND Для проверки работы сервера в режиме кэширования можно запросить разрешение имени с помощью утилиты `nslookup`. Эта утилита входит в состав пакета `dnsutils`. С клиента в одной локальной сети с сервером BIND выполним запрос разрешения имени `ubuntu.com` ```bash nslookup ubuntu.com ns ``` `ns` - имя сервера BIND в локальной сети
Если всё настроено верно, в ответ получим ```bash [da2001@fedora ~]$ nslookup ubuntu.com ns Server: ns Address: 192.168.13.2#53 Non-authoritative answer: Name: ubuntu.com Address: 185.125.190.20 Name: ubuntu.com Address: 185.125.190.21 Name: ubuntu.com Address: 185.125.190.29 Name: ubuntu.com Address: 2620:2d:4000:1::27 Name: ubuntu.com Address: 2620:2d:4000:1::26 Name: ubuntu.com Address: 2620:2d:4000:1::28 ``` ## 7. Разрешение имён в локальной сети. Для разреешения имён в локальной сети, необходимо определить зоны прямого и обратного просмотра: - зона прямого просмотра выпоняет разрешение доменных имён в IP адреса - зона обратного просмотра выполняет разрешения IP адресов в имена ### Зона прямого просмотра Необходимо создать файл описания зоны и указать его в основном конфигурационном файле `named.conf` в Ubuntu это можно сделать следующими командами: ```bash sudo touch /etc/bind/named.conf.dav.lan sudo bash -c "echo 'include \"/etc/bind/named.conf.dav.lan\";' >> /etc/bind/named.conf" ``` в Cent OS в команде необходимо изменить пути размещения файлов на `/etc/named.conf` **Содержимое файла описания зоны прямого просмотра** ```bash da2001@ns:~ $ cat /etc/bind/named.conf.dav.lan zone "dav.lan" { type master; file "/etc/bind/zone.dav.lan"; }; ``` теперь необходимо выполнить непосредственное описание зоны ```bash da2001@ns:~ $ cat /etc/bind/zone.dav.lan $TTL 604800 @ IN SOA dav.lan. root.dav.lan. ( 2022070101 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns @ IN AAAA ::1 ns IN A 192.168.13.2 zidoo IN A 192.168.13.3 voip IN A 192.168.13.4 ``` где,
`$TTL 604800` - время жизни записи в кэше
`dav.lan.` - название зоны, `root.dav.lan.` - эл.адрес администратора, но вместо @ указана точка. Точки в конце названия зоны и адреса администраторы ОБЯЗАТЕЛЬНЫ
`Serial` - указан номер версии конфигурации, может быть задан произвольно, обычно в нём указывают дату изменения и порядковый номер изменения
`@ IN NS ns` - указание на DNS сервер
`@ IN A 192.168.13.2` - сопоставление имени и IPv4 адреса DNS сервера
`@ IN AAAA ::1` - сопоставление имени и IPv6 локального адреса DNS сервера
Далее можно добавлять записи сопоставления адресов других хостов в сети. После внесения всех изменений в конфигурацию, стоит проверить корректность описания файла зоны утилитой `named-checkzone`, утилите необходимо передать в качестве аргументов имя зоны и файл описывающий зону ```bash da2001@ns:~ $ named-checkzone dav.lan /etc/bind/zone.dav.lan zone dav.lan/IN: loaded serial 2022070101 OK ``` ### Зона обратного просмотра Для указания файла описания заны обратного просмотра, добавим его в ранее созданный файл `named.conf.dav.lan` ```bash da2001@ns:~ $ cat /etc/bind/named.conf.dav.lan zone "dav.lan" { type master; file "/etc/bind/zone.dav.lan"; }; zone "13.168.192.in-addr.arpa" { type master; file "/etc/bind/zone.192.168.13"; }; ``` и опишем зону обратного просмотра ```bash $TTL 604800 @ IN SOA dav.lan. root.dav.lan. ( 2022070101 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns. 2 IN PTR ns.dav.lan. 3 IN PTR zidoo.dav.lan. 4 IN PTR voip.dav.lan. ``` от описания прямой зоны, обратная зона отличается типом записей, в ней указываем записи PTR.
**Формат PTR записи**
`3 IN PTR zidoo.dav.lan.`
`3` - последний октет IPv4 адреса
`zidoo.dav.lan.` - FQDN, точка в конце обязательна После описания обратной зоны, проверим корректность внесения данных ```bash da2001@ns:/etc/bind $ sudo named-checkzone 13.168.192.in-addr.arpa dav.lan.rzone zone 13.168.192.in-addr.arpa/IN: loaded serial 2022070101 OK ``` ## 8. Проверка разрешения имён в локальной сети. ### Проверка зоны прямого просмотра С клиента в локальной сети запросим разрешение имени в IPv4 адрес существующего хоста в локальной сети, при этом укажем, что разрешать имя в адрес необходимо нашим DNS сервером ```bash [da2001@fedora ~]$ nslookup voip ns Server: ns Address: 192.168.13.2#53 Name: voip.dav.lan Address: 192.168.13.4 ``` ### Проверка зоны обратного просмотра С клиента в локальной сети запросим разрешение IPv4 адреса существующего хоста в локальной сети в его FQDN, также, с указанием коркретного DNS сервера ```bash [da2001@fedora ~]$ nslookup 192.168.13.5 ns 5.13.168.192.in-addr.arpa name = qnap.dav.lan. ```