# **Эта роль используетя для установки и управления DNS ISC-BIND9 (named)**

Основные задачи, которые выполняет сервис `named`:

- **Преобразование имен в IP-адреса**: Когда вы вводите в браузере адрес сайта (например, `google.com`), `named` находит соответствующий ему числовой IP-адрес, понятный компьютерам.
- **Обратное преобразование**: Он может выполнять и обратную операцию — узнавать доменное имя по известному IP-адресу.
- **Хранение данных о зоне**: Сервер хранит ресурсные записи для доменов, которыми он управляет (например, записи об IP-адресе сайта, почтовом сервере и т.д.).
- **Кэширование**: Чтобы не запрашивать информацию о популярных сайтах каждый раз заново, `named` сохраняет результаты предыдущих запросов в памяти, что ускоряет работу интернета для пользователей.
- **Пересылка запросов**: Если сервер сам не знает ответ на запрос, он перенаправляет его другим DNS-серверам в иерархии интернета.

Перед созданием/редактированием зон проверяется наличие пакета named/bind и необходимых компонентов.

Если они отсутвуют - будет произведена их установка.

Добавление и изменения зон производятся по средствам указания соответвующих параметров в переменных роли

Использование:

```bash
ansible-playbook -i ./inventory/prod/hosts.yml ./playbooks/ns1.yml
```

### Основные настройки (Vars)

В плейбуке заданы ключевые параметры:

```plaintext
    named_listen_ipv4:                         # Указываем какой интерфейс/ip слушать
      - "any"
    named_listen_ipv4_port:                    # На каком порту
      - 53
    named_listen_ipv6:                         # то же самое для IPv6
      - "::"
    named_listen_ipv6_port:
      - 53
    named_recursion: true                      # Разрешить рекурсивные запросы
    named_allow_recursion:                     # Каким ACL позволяется рекурсия
      - "Local"
    named_allow_query:                         # На запросы с каких адресов отвечать, можно добавить ACL 
      - "any"
    named_allow_transfer:                      # Каким адресам доверять передачу зоны (secondary)
      - "Transfer"
    named_dns_keys:                            # TSIG ключи (для certbot)
      - name: CertbotKey
        algorithm: hmac-sha256
        secret: "YCUScDPbF9bscPFB0mLzRr2/V54FB7tcrifAdrrnlBI="
    named_extra_include_files:                 # Вынести ключи в отдельный файл дефолтно в /etc/named
      - "{{ named_auth_file }}"
    named_acls:                                # Access Lists - Описание имя списка и адреса 
      - name: Transfer
        match_list:
          - 91.218.87.251
          - 10.203.0.84
          - 10.203.0.85
      - name: Local
        match_list:
          - 127.0.0.1
          - 127.0.0.0/8
          - 10.0.0.0/8
          - 172.16.0.0/12
          - 192.168.0.0/16
          - 100.64.0.0/10
          - 91.218.84.0/22
          - 91.236.140.0/22
          - 91.197.57.0/24
          - 213.109.201.0/24
          - 46.255.25.0/24
          - 2a13:af80::/29
```

### Управление зонами

Плейбук настраивает основные зоны типа primary (мастер-сервер), вторичные зоны типа secondary  
Тип зоны устанавливается параметром type

```plaintext
named_zones:
  - name: 'gigacoms.ru'                         # Обозначает название зоны, домен который она обслуживает
    type: (primary/secondary)                   # Устанавливает тип зоны (primary/secondary)
    allow_update:                               # Добавляет TSIG ключи для управления зоной (Certbot)
      - 'key "CerbotKey"'
    primaries:                                  # Указывается IP адрес первичного сервера
      - 91.218.87.254
    name_servers:                               # Указываются сервера, ответственные за зону
      - ns1
      - ns2

    hosts:                                      # Идет описание хостов зоны
      - name: test1                             # Имя хоста (при необходимости можно использовать полное наименование, типа: tesl.local.host.local.)
        ip: 91.218.87.254                       # IP адрес хоста
        ipv6: 2001:db8::1                       # IPv6 адрес хоста (не обязательно)
        aliases:                                # Можно указать Alias для хоста, преобразуется в запись CNAME
          - test2

    mail_servers:                               # Устанавливаются почтовые сервера зоны
      - name: mx.yandex.net.                    # Адрес сервера
        preference: 10                          # Приоритет по отправке

    services:                                   # также возможно добавления особых параметров для служб
     - name: _ldap._tcp
       weight: 100
       port: 88
       target: srv010
    text:                                       # произвольные записи типа TEXT
     - name: _kerberos
       text: KERBEROS.ACME-INC.COM
     - name: '@'
       text:
         - 'some text'
         - 'more text'
```

- Управление обратными зонами 

аналогично управлению прямыми, только с отличительным признаком reverse_zone: true

```
  - name: '141.236.91.in-addr.arpa'             # Указывается имя зоны, в соответствии с RFC
    type: primary                               # Устанавливает тип зоны (primary/secondary)
    primaries:                                  # Указывается IP адрес первичного сервера
      - 91.218.87.254
    name_servers:                               # Указываются сервера, ответственные за зону
      - ns1.gigacoms.ru.
      - ns2.gigacoms.ru.
    reverse_zone: true                          # Указываем, что эта зона является reverse зоной.
    ptr_records:                     
      - name: '89'                              # Простая обратная запись, указывается адрес из последнего октета
        ptr: 'mail.geocaching.su'               # Указывается имя хоста, для которого делается запись

      - name: '0/28.10.10.10.in-addr.arpa.'     # Запись типа NS - указывается диапазон адресов (в этом случае с маской /28)
        dns: 'ns1.cittransm.ru.'                # Указывается на какой NS сервер необходимо обратиться

      - name: '96'                              # IP-адрес 
        cname: '96.96/28.10.0.10.in-addr.arpa.' # DNS-сервер, отвечающий за сеть (`Я не знаю имя для этого IP напрямую, иди по ссылке 96.96/28...`)
```

- Управление вторичными (secondary) зонами

```plaintext
    named_zones:
      - name: 'gigacoms.info'                   # Указывается имя зоны
        type: secondary                         # То, что она вторичная
        primaries:                              # Обязательно указываем первичный сервер
          - 91.218.87.254
```