Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

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

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

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

База знаний Настройка Asterisk

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

bind named asterisk sip chan_sip.so dns