# Настройка сервера разрешения имён 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`</br>
Cent OS - `/etc`

Основным файлом настройки является - `named.conf`</br>
Для проверки корректности конфигурации служит утилита - `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 можно использовать комментарии различных стилей:</br>
стиль C: `/* */`</br>
стиль C++: `// до конца строки`</br>
стиль Unix: `# до конца строки`</br>

## 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 в локальной сети</br>
Если всё настроено верно, в ответ получим

```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

```

где,</br>
`$TTL             604800` - время жизни записи в кэше</br>
`dav.lan.` - название зоны, `root.dav.lan.` - эл.адрес администратора, но вместо @ указана точка. Точки в конце названия зоны и адреса администраторы ОБЯЗАТЕЛЬНЫ</br>
`Serial` - указан номер версии конфигурации, может быть задан произвольно, обычно в нём указывают дату изменения и порядковый номер изменения</br>
`@                IN      NS      ns` - указание на DNS сервер</br>
`@                IN      A       192.168.13.2` - сопоставление имени и IPv4 адреса DNS сервера</br>
`@                IN      AAAA    ::1` - сопоставление имени и IPv6 локального адреса DNS сервера</br>

Далее можно добавлять записи сопоставления адресов других хостов в сети.

После внесения всех изменений в конфигурацию, стоит проверить корректность описания файла зоны утилитой `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.</br>

**Формат PTR записи**</br>
`3       IN      PTR     zidoo.dav.lan.`</br>
`3` - последний октет IPv4 адреса</br>
`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.

```