Ansible-Roles/named.readme.md
2026-05-08 22:12:36 +03:00

145 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# **Эта роль используетя для установки и управления 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
```