notes/bind9/readme.md

327 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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