artem
30.10.2013
16720

Настройка кэширующего DNS-сервера для решения проблемы зависания chan_sip.so.

SIP-модуль Asterisk синхронно разрешает DNS-имена, если DNS-сервер, по каким-либо причинам, перестанет отвечать на запросы, код SIP-модуля прекращает выполнение до наступления таймаута DNS-запроса. Результатом этого является неработаспособность всех клиентов и провайдеров, подключенных по SIP, клиенты не могут регистрироваться и совершать вызовы.
Способы решения проблемы:
1. Не указывать DNS-имена в параметре SIP-пиров ‘host’ и в строках SIP-регистраций, указывать только IP-адреса (позволяет полностью исключить возможность возникновения проблемы, но невозможно с некоторыми провайдерами).
2. Настроить кэширующий DNS-сервер на хосте Asterisk.

В данной статье будет описан способ решения проблемы с помощью DNS-сервера BIND (инструкция верна для CentOS 5-6)

Настройка DNS-сервера BIND

1. Устанавливаем BIND, копируем шаблоны настроек и файлы стандартных зон

yum install bind bind-chroot
cp /etc/localtime /var/named/chroot/etc

cp /usr/share/doc/bind-*/sample/etc/named.root.hints /var/named/chroot/etc
cp /usr/share/doc/bind-*/sample/etc/named.rfc1912.zones /var/named/chroot/etc
cp /usr/share/doc/bind-*/sample/etc/named.conf /var/named/chroot/etc

cp /usr/share/bind-*/sample/var/named/localdomain.zone /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/localhost.zone /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/named.broadcast /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/named.ip6.local /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/named.local /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/named.root /var/named/chroot/var/named
cp /usr/share/bind-*/sample/var/named/named.zero /var/named/chroot/var/named

2. Правим конфиг BIND /var/named/chroot/etc/named.conf

В конфиг нужно внести следующие правки:

> Добавить в раздел options строчку:

forwarders { 8.8.8.8; 8.8.4.4; };

Можно указать свои DNS-серверы. Если не указывать эту строчку, то BIND будет опрашивать корневые DNS-серверы, что медленнее

> Разрешить рекурсивные запросы для view-зоны ‘localhost_resolver’ (заменить ‘recursion no’ на ‘recursion yes’, если этого не сделать, то сам хост не сможет делать рекурсивные запросы через DNS-сервер). Рекурсивные запросы и запросы кэша для остальных зон можно отключить

> Закомментировать или удалить разделы, отвечающие за настройку внутренних зон и DDNS, т.к. их просто не будет

Листинг полученного конфига:

//
// Sample named.conf BIND DNS server ‘named’ configuration file
// for the Red Hat BIND distribution.
//
// See the BIND Administrator’s Reference Manual (ARM) for details, in:
// file:///usr/share/doc/bind-*/arm/Bv9ARM.html
// Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
// its manual.
//
options
{
  // Those options should be used carefully because they disable port
  // randomization
  // query-source port 53;  
  // query-source-v6 port 53;
  
  // Put files that named is allowed to write in the data/ directory:
  directory «/var/named»; // the default
  dump-file     «data/cache_dump.db»;
  statistics-file   «data/named_stats.txt»;
  memstatistics-file   «data/named_mem_stats.txt»;
  max-cache-size    2097152;

  forwarders { 8.8.8.8; 8.8.4.4; };
};
//logging
//{
/* If you want to enable debugging, eg. using the ‘rndc trace’ command,
 * named will try to write the ‘named.run’ file in the $directory (/var/named).
 * By default, SELinux policy does not allow named to modify the /var/named directory,
 * so put the default debug log file in data/ :
 */
// channel default_debug {
// file «data/named.run»;
// severity dynamic;
// };  
//};
//
// All BIND 9 zones are in a «view», which allow different zones to be served
// to different types of client addresses, and for options to be set for groups
// of zones.
//
// By default, if named.conf contains no «view» clauses, all zones are in the
// «default» view, which matches all clients.
//
// If named.conf contains any «view» clause, then all zones MUST be in a view;
// so it is recommended to start off using views to avoid having to restructure
// your configuration files in the future.
//
view «localhost_resolver»
{
/* This view sets up named to be a localhost resolver ( caching only nameserver ).
 * If all you want is a caching-only nameserver, then you need only define this view:
 */
  match-clients     { localhost; };
  match-destinations  { localhost; };
  recursion yes;
  // all views must contain the root hints zone:
  include «/etc/named.root.hints»;

  /* these are zones that contain definitions for all the localhost
   * names and addresses, as recommended in RFC1912 — these names should
   * ONLY be served to localhost clients:
   */
  include «/etc/named.rfc1912.zones»;
};
view «internal»
{
/* This view will contain zones you want to serve only to «internal» clients
that connect via your directly attached LAN interfaces — «localnets» .
*/
  match-clients    { localnets; };
  match-destinations  { localnets; };
  recursion no;
  
  allow-query-cache { none; };
  // Disable lookups for any cached data and root hints
  
  // all views must contain the root hints zone:
  include «/etc/named.root.hints»;

  // include «named.rfc1912.zones»;
  // you should not serve your rfc1912 names to non-localhost clients.

  // These are your «authoritative» internal zones, and would probably
  // also be included in the «localhost_resolver» view above :

  //zone «my.internal.zone» {
  //  type master;
  //  file «my.internal.zone.db»;
  //};
  //zone «my.slave.internal.zone» {
  //  type slave;
  //  file «slaves/my.slave.internal.zone.db»;
  //  masters { /* put master nameserver IPs here */ 127.0.0.1; } ;
  //  // put slave zones in the slaves/ directory so named can update them
  //};  
  //zone «my.ddns.internal.zone» {
  //  type master;
  //  allow-update { key ddns_key; };
  //  file «slaves/my.ddns.internal.zone.db»;
  //  // put dynamically updateable zones in the slaves/ directory so named can update them
  //};
};
//key ddns_key
//{
//  algorithm hmac-md5;
//  secret «use /usr/sbin/dns-keygen to generate TSIG keys»;
//};
view «external»
{
/* This view will contain zones you want to serve only to «external» clients
 * that have addresses that are not on your directly attached LAN interface subnets:
 */
  match-clients    { any; };
  match-destinations  { any; };

  recursion no;
  // you’d probably want to deny recursion to external clients, so you don’t
  // end up providing free DNS service to all takers

  allow-query-cache { none; };
  // Disable lookups for any cached data and root hints

  // all views must contain the root hints zone:
  include «/etc/named.root.hints»;

  // These are your «authoritative» external zones, and would probably
  // contain entries for just your web and mail servers:

  //zone «my.external.zone» {
  //  type master;
  //  file «my.external.zone.db»;
  //};
};

3. Запускаем BIND, включаем запуск при старте системы

service named start

Если в синтаксисе конфига допущены ошибки или каких-либо файлов не хватает, сообщение об ошибке будет выведено в консоль и записано в лог /var/log/messages

chkconfig named on

4. Работоспособность DNS-сервера можно проверить командой ‘dig’

dig yandex.ru @127.0.0.1

Если DNS-сервер работает нормально, то в файле /etc/resolv.conf нужно оставить только строчку

nameserver 127.0.0.1

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.