Решение проблем

Этот раздел посвящен способам определения причины проблем, возникающих с DNS и BIND9.

Тестирование

resolv.conf

Первый шаг в тестировании BIND9 это добавление IP адреса сервера имен в список определителей сетевых имен. Первичный сервер имен должен настраиваться, как и любой другой узел сети, с двойной проверкой. Просто отредактируйте /etc/resolv.conf, добавив следующее:

nameserver	192.168.1.10
nameserver	192.168.1.11
Вам надо добавить также IP адрес вторичного сервера имен на случай недоступности первичного.

dig

Если вы установили пакет dnsutils, вы можете проверить свою установку используя обзорную утилиту DNS dig:

1. После установки BIND9 примените dig к интерфейсу обратной петли (loopback), чтобы убедиться, что порт 53 прослушивается. Из терминала наберите:

dig -x 127.0.0.1

Вы должны увидеть строки вывода, похожие на следующее:

;; Query time: 1 msec
;; SERVER: 192.168.1.10#53(192.168.1.10)

2. Если BIND9 настроен у вас как кэширующий сервер, используйте dig для замера времени при разрешении имени внешнего домена:

dig ubuntu.com

Обратите внимание на время в конце вывода результата команды:

;; Query time: 49 msec

После повторного вызова dig должно произойти улучшение:

;; Query time: 1 msec

ping

Теперь для демонстрации как приложения могут использовать DNS для разрешения сетевых имен используйте утилиту ping для отправки ICMP эхо-запроса. Из терминала наберите следующее:

ping example.com

Это проверит может ли сервер имен разрешить имя ns.example.com в IP адрес. Вывод команды будет напоминать следующее:

PING ns.example.com (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.800 ms
64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=0.813 ms

named-checkzone

Хороший способ проверить ваши файлы зон - это использовать утилиту named-checkzone, установленную вместе с пакетом bind9. Эта утилита позволяет вам убедиться в корректности настроек до перезапуска BIND9 и применения изменений.

1. Для тестирования нашего файла прямой зоны из примера введите следующее в командной строке:

named-checkzone example.com /etc/bind/db.example.com

Если все настроенно верно, вы сможете увидеть вывод, похожий на:

zone example.com/IN: loaded serial 6
OK

2. Аналогично, для тестирования файла обратной зоны введите следующее:

named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192

Вывод должен напоминать следующее:

zone 1.168.192.in-addr.arpa/IN: loaded serial 3
OK
Serial Number вашего файла зоны может отличаться.

Журналирование

BIND9 имеет широкий набор доступных опций настроек журналов. Существуют две основные опции. С помощью опции channel указывается где вести журналы, а опция category определяет какую информацию писать в журнал.

Если опции журналов отсутствуют, по умолчанию применяется следующее:

logging {
     category default { default_syslog; default_debug; };
     category unmatched { null; };
};

Этот раздел раскрывает как настроить BIND9 посылать отладочные сообщения, связанные с DNS запросами в отдельный файл.

1. Сначала нам надо настроить канал (channel) для определения в какой файл посылать сообщения. Редактируем /etc/bind/named.conf.local и добавляем следующее:

logging {
    channel query.log {      
        file "/var/log/query.log";
        severity debug 3; 
    }; 
};

2. Затем настраиваем категорию (category) для отправки всех DNS запросов в файл:

logging {
    channel query.log {      
        file "/var/log/query.log"; 
        severity debug 3; 
    }; 
    category queries { query.log; }; 
};
Обратите внимание на опцию debug, которая может принимать значения от 1 до 3. Если уровень отладки не указан, о умолчанию используется 1.

3. Поскольку сервис named запускается от имени bind, надо создать файл и сменить ему пользователя:

    sudo touch /var/log/query.log
    sudo chown bind /var/log/query.log

4. Перед тем как сервис named сможет писать в новый файл журнала нужно изменить профиль AppArmor. Сначала редактируем файл /etc/apparmor.d/usr.sbin.named, добавив:

/var/log/query.log w,

или так:

/var/log/** rw,

Затем перегружаем профиль:

cat /etc/apparmor.d/usr.sbin.named | sudo apparmor_parser -r

На версии 12.4 работает следующая команда:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.named

Дополнительную информацию по AppArmor смотрите в разделе AppArmor.

5. Теперь перегружаем BIND9 для применения изменений:

sudo service bind9 restart

Теперь вы можете увидеть файл /var/log/query.log, заполненный информацией о запросах. Это простейший пример использования опций журналирования BIND9. По использованию расширенных опций смотрите раздел Дополнительная информация.