Введение
Я приведу простой пример, подразумевая, что вы выполнили настройку asterisk по моей статье или схожим образом. Классическая конфигурация для среднестатистического офиса. Представим, что у вас 2 таких офиса в разных городах. Пусть этими городами будут Москва (условное имя сервера moscow) и Санкт-Петербург (условное имя сервера piter) Вы хотите звонить на внутренние номера этих офисов напрямую, как-будто они обслуживаются вашим сервером. Допустим, на сервере moscow у вас номера начинаются на 100 и 200, а в piter на 300 и 400. Я считаю, что между серверами у вас настроен vpn канал и они видят друг друга без проблем.
Если у вас номера пересекаются, например, и там и там начинаются на 100, то задача немного усложняется, но не сильно. Просто придется добавить какую-нибудь еще цифру к набору, а в диалплане ее отсекать. Но я не буду рассматривать этот вариант. Если вы одна организация, то логично сделать такую нумерацию, чтобы она не пересекалась. Если это не так, то лучше ее переделать, чем городить костыли.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Наша задача будет разбита на 2 этапа:
- Готовим пиры и регистрации для связи двух серверов между собой.
- Настраиваем dialplan, чтобы распределять звонки по серверам.
Может возникнуть вопрос: «А зачем вообще соединять 2 сервера, если можно сделать один сервер asterisk и подключить к нему абонентов обоих офисов?». Причины могут быть разными. Мне видятся несколько, например:
- В каком-то филиале нестабильный интернет. Офис не хочет терять возможность внутренних звонков при проблемах с интернетом. А если сервер с астериском будет находиться не у них, то даже между собой не смогут созвониться.
- Разные люди администрируют сервера. В рамках одного сервера сложнее настроить разделение доступа. Более того, я даже не знаю, как это реализовать. А в случае с разными серверами никаких проблем. Главное не трогать часть диалплана, которая отвечает за звонки друг к другу, а дальше можно конфигурировать как душе угодно.
- Нужна раздельная статистика и запись звонков. Конечно, можно все это реализовать в рамках одного сервера, но нужно будет либо покупать какое-то коммерческое решение, либо переделывать бесплатное. Я не знаю простого, бесплатного и удобного средства, которое позволит это реализовать в рамках одного сервера. А так ставишь любой cdr viewer и ограничиваешь доступ к web панели любым удобным способом.
Введение
Я приведу простой пример, подразумевая, что вы выполнили настройку asterisk по моей статье или схожим образом. Классическая конфигурация для среднестатистического офиса. Представим, что у вас 2 таких офиса в разных городах. Пусть этими городами будут Москва (условное имя сервера moscow) и Санкт-Петербург (условное имя сервера piter) Вы хотите звонить на внутренние номера этих офисов напрямую, как-будто они обслуживаются вашим сервером. Допустим, на сервере moscow у вас номера начинаются на 100 и 200, а в piter на 300 и 400. Я считаю, что между серверами у вас настроен vpn канал и они видят друг друга без проблем.
Если у вас номера пересекаются, например, и там и там начинаются на 100, то задача немного усложняется, но не сильно. Просто придется добавить какую-нибудь еще цифру к набору, а в диалплане ее отсекать. Но я не буду рассматривать этот вариант. Если вы одна организация, то логично сделать такую нумерацию, чтобы она не пересекалась. Если это не так, то лучше ее переделать, чем городить костыли.
Наша задача будет разбита на 2 этапа:
- Готовим пиры и регистрации для связи двух серверов между собой.
- Настраиваем dialplan, чтобы распределять звонки по серверам.
Может возникнуть вопрос: «А зачем вообще соединять 2 сервера, если можно сделать один сервер asterisk и подключить к нему абонентов обоих офисов?». Причины могут быть разными. Мне видятся несколько, например:
- В каком-то филиале нестабильный интернет. Офис не хочет терять возможность внутренних звонков при проблемах с интернетом. А если сервер с астериском будет находиться не у них, то даже между собой не смогут созвониться.
- Разные люди администрируют сервера. В рамках одного сервера сложнее настроить разделение доступа. Более того, я даже не знаю, как это реализовать. А в случае с разными серверами никаких проблем. Главное не трогать часть диалплана, которая отвечает за звонки друг к другу, а дальше можно конфигурировать как душе угодно.
- Нужна раздельная статистика и запись звонков. Конечно, можно все это реализовать в рамках одного сервера, но нужно будет либо покупать какое-то коммерческое решение, либо переделывать бесплатное. Я не знаю простого, бесплатного и удобного средства, которое позволит это реализовать в рамках одного сервера. А так ставишь любой cdr viewer и ограничиваешь доступ к web панели любым удобным способом.
Модуль SIP канала Asterisk
SIP
- SIP клиент: Это подразумевает, что Asterisk регистрируется как клиент на другом SIP сервере и совершает вызовы и принимает их через этот сервер. Входящие вызовы маршрутизируются на номер екстеншена, который прописан в Asterisk.
- SIP сервер: Asterisk может быть сконфигурирован так, чтобы SIP клиенты (телефоны, программные клиенты) регистрировались на нем и устанавливали SIP сессии через этот сервер, т.е. совершали и отвечали на вызовы. Стоит отметить, что Asterisk — это не сервер, который может поддерживать всю функциональность SIP протокола, которую может предоставить, например, SIP express router. Если количество SIP телефонов у Вас исчисляется тысячами, Вам, наверно, стоит использовать SER а вызовы на голосовую почту и во внешний мир перенаправлять серверу Asterisk.
- SIP шлюз: Сервер Asterisk может выступать в роли шлюза медиаданных между SIP, IAX, MGCP, H.323 и PSTN соединениями. Как пример, сервер Asterisk может быть соединен с общей телефонной сетью через ISDN, и предоставлять возможность Вашим SIP клиентам это соединение для выхода в публичную телефонную сеть.
- Почему Asterisk не является SIP прокси сервером?
Замечания
- Сервер Asterisk поддерживает ENUM — смотри: Asterisk config enum.conf.
- Сервер Asterisk поддерживает DNS записи DNS SRV, где определяются SIP прокси сервера при вызовах с использованием Интернет доменов. Смотри: Asterisk SIP srvlookup
- Когда и зачем Asterisk выступает в роли шлюза для медиаданных при использовании вызовов через SIP канал? — смотри: Asterisk SIP media path
- Сервер Asterisk поддерживает вызовы с использованием SIP URL.
- Сервер Asterisk поддерживает SIP коммуникацию по протоколу UDP, но не поддерживает TCP протокол в роли транспортного протокола.
- Вы можете хранить конфигурацию Ваших SIP устройств в базе данных для использования динамической конфигурации , смотри: Asterisk Realtime Sip
Использование команды Dial для SIP каналов
DialtypeidentifiertimeoutoptionsURLtypeSIPtimeoutoptionsURLDialidentifierextenpeerportno
- peer: имя вызываемого клиента. Это может быть одним из следующих значений:
- клиент типа «peer» или «friend», который описан в файле sip.conf.
- IP адрес (типа 192.168.1.8)
- имя домена (например: asterisk.org). Для имен доменов, сервер Asterisk сначала ищет запись DNS SRV для данного имени домена (Если параметр srvlookup установлен). Если запись найдена, то она сообщает серверу Asterisk, к какому компьютеру нужно соединиться. Если для данного домена нет SRV записи, тогда Asterisk будет пытаться напрямую соединиться с указанной машиной.
- portno: используемый UDP порт. Если не указан, Asterisk будет использовать стандартный SIP порт — 5060.
- exten: если задан этот параметр, тогда Asterisk будет запрашивать удаленный сервер соединение с екстеншеном exten.
sip.confплане набора
Различные стили сигналов вызова (звонка)
- Замечания по настройке различных телефонов для Asterisk
- В описании на Ваш телефон.
- На сайте производителя Вашего телефона.
Обзор
- Разумно проектируйте план набора для каждого сервера, чтобы было сразу понятно, какому из серверов принадлежит тот или иной экстеншен, при наборе номера на любом из серверов. Например, используйте номера 3xxx для сервера A, 4xxx — для сервера B и 5xxx — для номеров экстеншенов, подключенных к серверу C.
- Используйте директиву «switch», для того, чтобы сервер A искал на сервере B те екстеншены, которые не известны на сервера A (оба сервера должны всегда быть в рабочем состоянии и доступны, иначе у Вас будут присутствовать большие задержки между моментом набором номера и какой-либо реакции на это действие!)
- Можно использовать DUNDILOOKUP: Distributed Universal Number Directory (DUNDi)
- Можно использовать ENUMLOOKUP (e.164)
Метод с использованием SIP протокола.
- Сервер A — имеет статический IP адрес, сервер B — динамический IP адрес: Тогда для сервера B нужно прописать строку регистрации на сервере A в sip.conf.
- Оба сервера имеют статические IP адреса: Тут нам вообще не нужна регистрация.
- Оба сервера имеют динамические IP адреса: Тут есть одна хитрость, которую можно использовать, можно воспользоваться динамическим DNS сервисом, например, dyndns.org, для регистрации каждого сервера на другом. В любом случае, это не самое удачное решение, использовать динамические адреса для обоих серверов, т.к. при смене IP адреса, соединение может быть потеряно, до тех пор пока информация не обновиться на динамическом DNS сервере.
- Оба сервера имеют доступ друг к другу через NAT: Не используйте SIP протокол, вместо этого попробуйте использовать IAX2.
Метод с использованием SIP протокола.
Когда мы рассматриваем файл sip.conf, то возможно стоит начать с указания типа клиента, как type=friend, на обоих серверах, и, если при этом все начнет нормально работать, Вам, возможно, захочется разделить эту запись по типам: peer — для исходящих вызовов и user — для входящих вызовов
Также, стоит обратить внимание в файле sip.conf на параметры «insecure=very» («insecure=port,invite» в версии 1.4) и, возможно, на параметр: «autocreatepeer=yes».
- Сервер A — имеет статический IP адрес, сервер B — динамический IP адрес: Тогда для сервера B нужно прописать строку регистрации на сервере A в sip.conf.
- Оба сервера имеют статические IP адреса: Тут нам вообще не нужна регистрация.
- Оба сервера имеют динамические IP адреса: Тут есть одна хитрость, которую можно использовать, можно воспользоваться динамическим DNS сервисом, например, dyndns.org, для регистрации каждого сервера на другом. В любом случае, это не самое удачное решение, использовать динамические адреса для обоих серверов, т.к. при смене IP адреса, соединение может быть потеряно, до тех пор пока информация не обновиться на динамическом DNS сервере.
- Оба сервера имеют доступ друг к другу через NAT: Не используйте SIP протокол, вместо этого попробуйте использовать IAX2.
Параметры asterisk и SIP клиента
Прописываем STUN сервер у SIP клиента
Это необходимо для того, чтобы как asterisk, так и сам клиент могли определить внешний IP адрес клиента. Для этого в SIP клиенте достатоно прописать STUN сервер. По умолчанию для протокола STUN используется UDP порт 3478 (если необходимо задавать порт для STUN сервера, используйте этот порт). Во многих SIP клиентах настройка STUN сервера может задаваться не в самих параметрах SIP аккаунта, а в глобальных настройках программы
Примеры STUN серверов (можно прописать любой из них):
stun.ekiga.net
stun.3cx.com
stun.ideasip.com
stun.iptel.org
stun.rixtelecom.se
stunserver.org
stun.softjoys.com
stun.voipbuster.com
stun.voipstunt.com
stun.voxgratia.org
Проверить STUN сервер на работоспособность, и получить информацию о NAT можно с помощью утилиты client: http://prdownloads.sourceforge.net/stun/client.exe?download. Описание ее можно найти здесь: http://www.interface.ru/home.asp?artId=22409
Осуществляем проброс портов к asterisk с внешнего IP адреса
Эту задачу решает маршрутизатор (у кого-то — прокси-сервер ISA/TMG/Kerio, у кого-то — Cisco, у кого-то — точка доступа Zyxel/D-Link/TP-Link/…). Вам необходимо обеспечить проброс портов как для протокола SIP (звонки), так и для протокола RTP (сам разговор):
- Выход в интернет для сервера asterisk через NAT. Открыты для выхода должны быть порты UDP 5060 (по умолчанию, SIP), и 10000-20000 (UDP по умолчанию, RTP).
- подключение извне (проброс портов) с UDP порта 5060 (по умолчанию) на сервер asterisk, и UDP 10000-20000 (по умолчанию). Несколько моментов:
- даже если asterisk в Вашей сети работает на порту 5060, вовсе не обязательно из интернета давать доступ к порту 5060. Можно указать (например) такой маппинг портов: с внешнего IP, UDP порт 50600, на локальный IP сервера asterisk, порт 5060;
- не обязательно открывать все 10000 RTP портов. Для каждого подключения asterisk требует 2 открытых RTP порта. И если в настройках asterisk (в файле rtp.conf) предварительно ограничить количество RTP портов (например 1000 портов обеспечит до 500 одновременных разговоров), то на сервере также можно ограничить количество внешних портов для подключения
Указываем в конфигурации asterisk внешний IP и порт
На удивление, тут все достаточно просто (во всяком случае, что касается asterisk версии 11.4): в sip.conf прописать несколько параметров в секции general:
Указываем внешний реальный ip адрес сервера asterisk. Если порт, открытый в интернет, не совпадает с внутренним портом астериска, не забываем указать его:
или
Разумеется, после создания/изменения подобных параметров в sip.conf может оказаться недостаточным сделать команду sip reload или даже reload. Может потребоваться перезагрузка самого сервиса asterisk:
Указываем в конфигурации asterisk диапазоны локальной сети
Для этого в sip.conf в секции general прописываем диапазоны локальных IP адресов
Обратите внимание: если у Вас подключены SIP провайдеры не через интернет, а по отдельным линиям связи, то подсети этих провайдеров тоже нужно указать как локальные сети:. Разумеется, после создания/изменения подобных параметров в sip.conf может оказаться недостаточным сделать команду sip reload или даже reload
Может потребоваться перезагрузка самого сервиса asterisk:
Разумеется, после создания/изменения подобных параметров в sip.conf может оказаться недостаточным сделать команду sip reload или даже reload. Может потребоваться перезагрузка самого сервиса asterisk:
Запрещаем прямые соединения клиентов, разрешаем только через asterisk
Прописываем в sip.conf, в секции general опцию:
В старых версиях asterisk (до версии 1.6.2) для этого необходимо было использовать опцию canreinvite, для запрещения повторной отправки пакетов INVITE. В более новых версиях эта опция была переименована.
Поддерживаем соединение со стороны asterisk
Необходима поддержка двух видов соединений: для SIP и для RTP. Параметры для обоих протоколов можно указать как для всех клиентов (в этом случае параметр прописывается в sip.conf в секции general), так и для конкретного клиента (в этом случае параметр прописывается в sip.conf в настройках конкретного клиента).
Для протокола SIP:
Вместо XXX можно указать число , в этом случае asterisk будет посылать SIP пакет клиенту каждые XXX миллисекунд, а можно указать просто yes, в этом случае XXX=300 .
Для протокола RTP:
Вместо YYY нужно указать число, в этом случае asterisk будет посылать RTP пакет клиенту каждые YYY секунд, по умолчанию этот параметр равен 0 (то есть выключен).
Настройка IAX канала.
IAX
- Настройте Asterisk сервера с обеих сторон в файле конфигурации in iax.conf, один, как peer, а другой — как user.
- Настройте план набора в файле extensions.conf для сервера с пользователем типом user так, чтобы можно было принимать вызовы с другова сервера от пользователя с типом peer.
- Не обязательно, зарегистрируйте пользователя с типом peer, на сервере с пользователем типом user (для случаев, когда, например, сервер с пользователем типа peer имеет динамический ip адрес, который неизвестен второй стороне.)
- Повторите вышеуказанные шаги, поменяв местами сервер A и B (добавив пользователей, поменяв местами тип peer и user), если вы хотите совершать вызовы в обоих направлениях.
Определение пользователя IAX2 типа peer.
peer type=peer host=hostname.domain.tld (или «dynamic, при этом требуется указать команду «register» для пользователя типа user.) auth=md5 secret=secretword ; избыточно, если включено в состав команды Dial
username=username-at-the-peer ; избыточно, если включено в состав команды Dial.
Обратите внимание:
- тип type=user — авторизирует входящий вызов.
- тип type=peer — это кто-то, кто совершает исходящие вызовы.
- type=friend — это, конечно, и то и другое.
Использование типа «type=friend» делает жизнь проще, но не долго. Если вы добавите одновременно: «type=friend» и «[email protected]», то этим вы ограничите одним хостом, число тех серверов, с которых эта учетная запись может принять вызов на обработку, что, возможно, совсем не то, что Вам нужно.
Asterisk IAX RSA авторизация
Команда register.
Когда ip адрес клиента типа user неизвестен, пользователь типа peer не знает, куда совершать вызов (например, при вызове из офиса сотрудника, который работает на дому, когда у него имеется только динамически назначаемый ip адрес или он находиться за NAT.) Для решения этой задачи, домашний работник активно регистрируется на сервере в офисе, предоставляя свои данные и местоположение в сети.
register => user:[email protected]
При этом непрерывно, через некоторые интервалы, будет обновляться информация о пользователе, и сервер всегда будет знать, как вызвать пользователя, даже если его IP адрес будет меняться.
~~socialite~~
Настройка dialplan для работы с 2-мя серверами
Теперь нам нужно в диалплане на каждом из серверов указать, куда звонить по разным номерам. На сервере moscow укажем, что звонить по маскам 300 и 400 нужно в питер. Добавляем в extentions.conf правило перед основным правилом звонка на внутренние номера с маской _XXX.
exten => _XX,1,Dial(SIP/piter/${EXTEN},15,Tt)
И добавим контекст для приема входящих звонков с сервера piter
exten => _XXX,1,Dial(SIP/${EXTEN},15,Tt)
Делаем то же самое на сервере piter.
exten => _XX,1,Dial(SIP/moscow/${EXTEN},15,Tt)
Не забываем поменять маску. И добавляем контекст приема звонков с moscow.
exten => _XXX,1,Dial(SIP/${EXTEN},15,Tt)
Вот и все. Мы связали между собой 2 астериск сервера. Можно звонить друг другу, используя внутренние номера. Не забудьте перезагрузить план набора.
> dialplan reload
Можно проверять звонки. Не обязательно делать в точности, как я показал. У вас может быть по-другому организован диалплан. Можно в контекст для входящих заинклюдить ваш существующий контекст для внутренних звонков, например так.
include => office
Если у вас настроена запись звонков так же, как я рассказал в своей статье про настройку астериска, которую привел в начале, то не забудьте добавить запись по обоим направлениям. Примерно так для сервера moscow на исходящие.
exten => _XX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XX,n,Dial(SIP/piter/${EXTEN},15,Tt)
И вот так на входящие:
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)
На этом все. Пример написал по горячим следам. Сегодня настраивал такую тему, конфиги взял с реальных серверов.
Если есть необходимость, то можно расширить эту конфигурацию и настроить звонки в Питер из Москвы через сервер piter, если там более выгодный тариф для локальных звонков. Для этого нужно добавить маски питерских номеров в dialplan на сервере moscow, а на сервере piter в контекст входящих звонков с moscow настроить набор через свой питерский транк.
Другие материалы по asterisk:
Онлайн курс «DevOps практики и инструменты»
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Проверьте себя на вступительном тесте и смотрите программу детальнее по .
- Установка и настройка астериск с нуля
- Мониторинг asterisk в zabbix
- Соединение двух серверов астериск
- Анализ SIP трафика
- Замена +7 на 8 и наоборот
- Ограничение на звонки для группы номеров
Пример sip.conf
…
externip=1.2.3.4:50666
localnet=192.168.0.0/24 ; локальная подсеть
localnet=192.168.5.0/24 ; локальная подсеть SIP провайдера 1
localnet=192.168.100.0/24 ; локальная подсеть SIP провайдера 2
directmedia=no ; запрещаем прямые соединения клиентов (только через asterisk)
;———————————
; локальный клиент (в одной сети с asterisk):
type=friend
secret=12345
host=dynamic
…
nat=no
;———————————
…
;———————————
; клиент подключен через NAT:
type=friend
secret=12345
host=dynamic
…
qualify=yes ; поддерживаем SIP каждые 300 мс
rtpkeepalive=10 ; поддерживаем RTP каждые 10 сек
nat=force_rport,comedia ; указываем, что клиент подключен через nat
;———————————
Кроме изменений в asterisk (в файле sip.conf) необходимо также в настройках самого SIP клиента прописать STUN сервер.
Удачи!
Настройка dialplan для работы с 2-мя серверами
Теперь нам нужно в диалплане на каждом из серверов указать, куда звонить по разным номерам. На сервере moscow укажем, что звонить по маскам 300 и 400 нужно в питер. Добавляем в extentions.conf правило перед основным правилом звонка на внутренние номера с маской _XXX.
exten => _XX,1,Dial(SIP/piter/${EXTEN},15,Tt)
И добавим контекст для приема входящих звонков с сервера piter
exten => _XXX,1,Dial(SIP/${EXTEN},15,Tt)
Делаем то же самое на сервере piter.
exten => _XX,1,Dial(SIP/moscow/${EXTEN},15,Tt)
Не забываем поменять маску. И добавляем контекст приема звонков с moscow.
exten => _XXX,1,Dial(SIP/${EXTEN},15,Tt)
Вот и все. Мы связали между собой 2 астериск сервера. Можно звонить друг другу, используя внутренние номера. Не забудьте перезагрузить план набора.
> dialplan reload
Можно проверять звонки. Не обязательно делать в точности, как я показал. У вас может быть по-другому организован диалплан. Можно в контекст для входящих заинклюдить ваш существующий контекст для внутренних звонков, например так.
include => office
Если у вас настроена запись звонков так же, как я рассказал в своей статье про настройку астериска, которую привел в начале, то не забудьте добавить запись по обоим направлениям. Примерно так для сервера moscow на исходящие.
exten => _XX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XX,n,Dial(SIP/piter/${EXTEN},15,Tt)
И вот так на входящие:
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)
На этом все. Пример написал по горячим следам. Сегодня настраивал такую тему, конфиги взял с реальных серверов.
Если есть необходимость, то можно расширить эту конфигурацию и настроить звонки в Питер из Москвы через сервер piter, если там более выгодный тариф для локальных звонков. Для этого нужно добавить маски питерских номеров в dialplan на сервере moscow, а на сервере piter в контекст входящих звонков с moscow настроить набор через свой питерский транк.
Соединение планов набора.
Пример 1
extensions.conf:
exten => _7XXX,1,Dial(IAX2/myserver:passwordA@IAXserverA/${EXTEN:1},30,r) exten => _7XXX,2,Dial(SIP/myserver:passwordA@SIPserverA/${EXTEN:1},30,r) exten => _7XXX,3,Congestion exten => _8XXX,1,Dial(IAX2/myserver:passwordB@IAXserverB/${EXTEN:1},30,r) exten => _8XXX,2,Dial(SIP/myserver:passwordB@SIPserverB/${EXTEN:1},30,r) exten => _8XXX,3,Congestion
Конечно, нам нужно вместо записей типа и т.д., указать те, что мы прописали в файлах iax.conf и sip.conf, чтобы все работало как нужно
В этом примере, SIP используется как резервный канал, в случае проблем соединения по IAX протоколу.
Обратите внимание, что в этом примере имя пользователя и пароль попадает в CDR записи (Вам возможно захочется использовать второй пример или использовать ключевые выражения вместо комбинаций имя пользователя/пароль)!. Пример 2
Пример 2
В этом примере в CDR записях не показывается поле username и secret.
(сервер A) iax.conf register => <username>:<password>@<имя или IP адрес сервера B> type=friend user=<username> secret=<password> host=<имя или IP адрес сервера B> extensions.conf exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r) exten => _7XXX,2,Congestion (сервер B) iax.conf type=friend user=<username> secret=<password> host=<dynamic> | <имя или IP адрес сервера A> extensions.conf exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r) exten => _8XXX,2,Congestion
В некоторых случаях, параметры serverA и serverB, должны содержать имя пользователя сервера.
Пример 3
С помощью объекта Switch в файле extensions.conf Вы можете соединить два сервера Asterisk и план набора другова сервера. В данном случае, наш «server C» или соединяется с «server A» или с «server B»:
exten => _801XXX,1,Goto,srvA|${EXTEN}|1 exten => _802XXX,1,Goto,srvB|${EXTEN}|1 exten => _801XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverA exten => _802XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverB
Замечания: Вы не можете установить замкнутую цепочку, используя switch с serverA на serverB и с serverB на serverA! Также, обратите внимание на (новую) установку в файле iax.conf «autokill=», которая предотвращает длительное зависание, если удаленный сервер не работает или отсоединился.
Пример 4
В файле extensions.conf (на master):
switch => IAX2/master:[email protected]/outbound
В файле iax.conf (на master):
type=user auth=plaintext context=outbound context=outbound2 ; (по вашему желанию, их может быть несколько) secret=secret host=dynamic callerid="slave" trunk=yes notransfer=yes type=peer auth=plaintext context=outbound-nuphone secret=secret host=dynamic trunk=yes notransfer=yes
В файле extensions.conf (на slave):
; Выберете механизм вызова, первый вызывает указанный екстеншен, ; второй вызывает специальный екстеншен - s. ;exten => 7046446999,1,Dial,IAX2/master@slave/${EXTEN} ;exten => 7046446999,1,Dial,IAX2/master@slave В файле iax.conf (на slave): register => slave:[email protected] type=peer host=iax-gw1.company.net secret=secret context=outbound trunk=yes canreinvite=no type=user secret=secret context=acontext trunk=yes canreinvite=no