Вчера повторно столкнулся с уже практически забытой проблемой, связанной с Asterisk и падением указанных в системе DNS серверов. Для новичка поведение системы при недоступности DNS будет просто шокирующим:
- Внутренние телефоны теряют регистрацию, вне зависимости используют они DNS или нет
- Нет регистрации на внешних серверах
- Перезагрузка chan_sip происходит долго и «рвано»
Я как решение предлагаю настроить кэширование DNS запросов на сервере с астериском и отслеживать работоспособность указанных в системе DNS серверов.
Я думал, что возникновение подобных ситуаций исправлено в 1.6, но это казалось не так. Если такая ситуация встретилась, то рекомендую настроить локальный кэширующий DNS-сервер. При отказе внешних серверов Астериск продолжит получать кэшированные результаты с локального DNS.
В named.conf прописать или раскомментировать строки:
forwarders { 208.67.222.222; 208.67.220.220; };
listen-on port 53 { 127.0.0.1; };
После этого рестартовать BIND и посмотреть на результат. Естественно не забыть в настройках системы заменить уже прописанные DNS на 127.0.0.1.
В примере указаны серверы проекта OpenDNS. Можно конечно не настраивать локально DNS сервер, а прописать большее количество серверов в системе, на практике практически невозможна ситуация когда они откажут одновременно. Однако на на той же практике, канал в интернет бывает достаточно нестабилен и при каждом его отказе внешние DNS сервера будут недоступны, со всеми вытекающими.
PS. Включение enable=yes в dnsmgr.conf так же исправляет проблему. Спасибо litnimax'у за подсказку.