artem
15.03.2019
25533

Полный разбор связи транком по протоколу IAX2 одной и более АТС.

В данной статье будут рассмотрены различные способы соединения одной или более АТС по протоколу IAX2 для того, чтобы иметь возможность иметь внутреннюю связь между дружественными АТС. Почему IAX2, а не SIP? Для связи 2-х АТС, находящихся за NAT преимущественно должен использоваться протокол IAX2. Если транковая связь за NAT основана на SIP, зачастую это ведёт к […]

Связь с транком по протоколу IAX2

В данной статье будут рассмотрены различные способы соединения одной или более АТС по протоколу IAX2 для того, чтобы иметь возможность иметь внутреннюю связь между дружественными АТС.

Почему IAX2, а не SIP?

Для связи 2-х АТС, находящихся за NAT преимущественно должен использоваться протокол IAX2. Если транковая связь за NAT основана на SIP, зачастую это ведёт к потере голоса в одну или обе стороны, потому что в заголовках SIP-пакетов приходят немаршрутизируемые в интернете IP-адреса. В отличие от SIP, IAX2 очень хорошо проходит NAT без осложнений. IAX2 передаёт сигнализацию в битовых полях, а не текстовых, что позволяет существенно экономить сетевой трафик.  Для работы используется один лишь порт 4569, по которому перемещаются как сигнализация, так и медиапоток. Так же протокол позволяет совмещать множество голосовых потоков и передавать их внутри транка, уменьшая расходы, связанные с передачей заголовков IP-пакетов.

Описание лабораторного стенда.

В первых двух примерах используются 2 виртуальных сервера с дистрибутивом VoIP-Voxlink. Для упрощённого представления машине с адресом 192.168.32.67 был присвоен hostname = localhost, а машине с адресом 192.168.32.95 hostname = amotest.

Связь 2-х АТС с регистрацией.

Для того, чтобы связать 2 АТС IAX2 транками с аутентфикацией, необходимо дать некоторую полезную информацию об устройстве данной схемы. Есть 2 сервера Asterisk, 1 из которых является сервером регистрации (сервер регистрирующий на своей стороне, в нашем случае это машина под именем localhost), а другой сервером регистрирующимся (в нашем случае это машина с именем amotest). На сервере регистрирующем необходимо создавать входящий контекст для того, чтобы другой сервер мог на нём зарегистрироваться, а так же исходящий контекст. На сервере регистрирующемся мы указываем только исходящий контекст и строку регистрации.

Для создания транка сервера регистрации, на машине с условным именем хоста – localhost, перейдём Connectivity -> Trunks:

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

Далее добавляем новый iax2 транк. Чтобы добавить новый транк, нажимаем +Add Trunk -> Add IAX2 Trunk:

Перед нами откроется следующее окно:

Всё, что нас интересует во вкладке General – это: Trunk Name и Disable Trunk.

Trunk name – имя транка для отображения в веб-интерфейсе FPBX.

Trunk Name можно задать любое, т.к. данное имя не является конкретной зависимостью, которая может повлиять на настройку транка.

Disable Trunk – включить или отключить транк. Соответственно, Yes – выключить, No – включить.

На деле это будет выглядеть следующим образом:

Следующим шагом создадим исходящий контекст, для этого перейдём во вкладку iax2 settings:

После перехода на вкладку iax2 settings, интерфейс представит нам подраздел исходящего контекста outgoing примерно следующим образом:

В данном случае Trunk Name – это уникальное имя, которое будет использоваться в рамках транкового контекста, а PEER Details – это описание директив для исходящего контекста.

Конфигурация для сервера регистрации будет выглядеть следующим образом:

[to_amotest]
type=friend
qualify=yes
nat=no
insecure=invite,port
host=192.168.32.95
disallow=all
context=from-internal
allow=alaw&ulaw
Если Вам не понятны директивы, рекомендую ознакомиться со статьёй на нашем сайте по описанию параметров по <a href="https://voxlink.ru/knowledge-base/curriculum/fajjl-sipconf/">ссылке.</a>

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

Т.к. в данном случае localhost – это сервер регистрации, то с его стороны исходящий контекст должен выглядеть именно так.

После описания исходящего контекста, создадим входящий контекст для сервера, который будет у нас регистрироваться, в нашем случае – это amotest.

Информер: входящий контекст можно сравнить с учётной записью extension (sip/iax2/virtual/pjsip), т.к. фактически – это учётная запись, которую нужно создать на регистрирующейся стороне.

Входящий контекст можно сравнить с учётной записью extension (sip/iax2/virtual/pjsip), т.к. фактически – это учётная запись, которую нужно создать на регистрирующейся стороне.

Переходим в подраздел Incoming:

Увидим, примерно, следующее:

USER Context – фактически является именем пользователя для регистрации.

USER Details – описание директив учётной записи пользователя.

Register String – строка регистрации.

В случае с сервером регистрации Register String не нужна, т.к. не мы будем куда-то регистрироваться, а на нас.

Итак, приступим к заполнению параметров:

Конфигурация будет выглядеть следующим образом:

[from_amotest]
type=friend
secret=test
qualify=yes
nat=no
insecure=invite,port
host=dynamic
fromuser=from_amotest
disallow=all
defaultuser=from_amotest
context=from-internal
allow=alaw&ulaw
Крайне важным является момент в выборе параметра для директивы host. Если dynamic, значит, мы разрешаем многопользовательскую регистрацию для данной учётной записи. Если указан конкретный хост, значит, по данной учётной записи можно регистрироваться только одному хосту.

На стороне сервера регистрации настройка завершена. Сохраним конфигурацию Submit -> Apply Config:

Подключимся по SSH к серверу и проверим состояние пира.

Для проверки состояния пира введите в CLI Asterisk:

CLI> iax2 show peers

Положительный вывод должен выглядеть примерно следующим образом:

Траблшутинг:

Если статус будет не OK, а Unmonitored, включите параметр qualify=yes в транке. Если статус останется UNKOWN, проверяйте доступность пира, правильность введённых директив. Если пир вовсе не отображается в списке пиров из CLI, проверяйте наличие директивы type=friend/user/peer в транке.

Переходим к серверу-клиенту, который будет регистрироваться на сервере регистрации, в нашем случае – это amotest.

Переходим в Connectivity -> Trunks. Настройка во вкладке General будет аналогична серверу регистрации:

Переходим в iax Settings, во вкладку Outgoing, затем прописываем те директивы, что указывали во вкладке Incoming сервера регистрации:

[to_localhost]
type=friend
secret=test
qualify=yes
nat=no
insecure=invite,port
host=192.168.32.67
fromuser=from_amotest
disallow=all
defaultuser=from_amotest
context=from-internal
allow=alaw&ulaw
После вставки скопированных директив необходимо изменить директиву host, а конкретно – указать сервер, к которому будут производиться обращения, в данном случае – это localhost 192.168.32.67

После указания исходящего контекста, переходим во вкладку Incoming, прописываем строку регистрации неполного формата для сокращения записи:

Register String: user:password@host
Register String: from_amotest:[email protected]

Иными словами: user = имя пользователя, указанное в директивах defaultuser/fromuser. Password = пароль пользователя, указанный в директиве secret. Host=DNS-имя или IP адрес сервера регистрации.

Сохраняем изменения – Submit -> Apply Config.

Проверим статус транка. Для этого переместимся в консоль Asterisk.

Введём следующую последовательность команд:

CLI>iax2 show peers

Если статус OK или Вы намеренно отключили/не описали директиву qualify – Unmonitored, то вводим следующую команду:

CLI>iax2 show registry

Если State = Registered, значит, транк зарегистрирован успешно и можно приступать к тестированию вызовов в обе стороны.

Если State = No Authentication/ Rejected – проверяйте аутентификационные данные и настройки фаервола станции/сетевого оборудования (роутера).

Следующим шагом будет создание исходящего маршрута на обеих АТС, чтобы можно было звонить в одну и другую сторону. Начнём с сервера регистрации – localhost. Для этого переходим в Connectivity – Outbound Routes:

После перехода увидим, примерно, следующее:

Создадим исходящий маршрут на amotest, нажав +Add Outbound Route:

Откроется меню создания исходящего маршрута, которое будет выглядеть, примерно, следующим образом:

Заполним следующие параметры:

Route Name – имя маршрута. Можно задать любое.

Trunk Sequence for Matched Routes – транк, который будет использоваться при совпадении маршрута.

Перейдём в Dial Patterns для составление плана маршрутизации:

Увидим:

Создадим маску для звонка на 100-е номера на АТС amotest:

1ХХ означает – вызывать любой трёхзначный номер, начинающийся на цифру 1. На amotest заведены абоненты с 100-й нумерацией.

Сохраняем, применяем.

Аналогичная настройка производится на сервере amotest:

И маску для совершения исходящих:

Сохраняем, применяем, теперь можно тестировать.

Проверка:

Зайдём в CLI Asterisk на сервере регистрации localhost, совершим вызов в сторону клиентской АТС и позвоним с 201-го на 100-й:

Вызов прошёл успешно.

Позвоним с amotest на localhost:

Аналогичным образом вызов прошёл успешно. Связка работает. Перейдём к разбору связи АТС без регистрации.

Связь 2-х АТС без регистрации.

Связывать АТС без регистрации очень просто. Нужно на обоих пирах указать только исходящий контекст без аутентификационных данных, т.е. минимальные параметры пиров.

На машине localhost заводим транк со следующими параметрами:

  1. Вкладка General:
  • Вкладка iax Settings, подраздел Outgoing:

Минимально необходимый конфиг для первого пира localhost:

[to_amotest]
type=friend
qualify=yes
host=192.168.32.95
disallow=all
context=from-internal
allow=alaw&ulaw

Сохраняем, применяем изменения – Submit -> Apply Config.

Затем переходим в CLI Asterisk для проверки статуса пира:

Первый пир – ОК. Переходим к машине amotest.

Создаём транк, затем во вкладке General описываем параметры:

Переходим на вкладку iax Settings и прописываем исходящий контекст аналогичным образом с localhost с тем лишь отличием, что необходимо указать другой хост:

Сохраняем, затем проверяем в консоли статус пира:

Исходящая проверяется аналогичным образом.

Разберём последний параграф данной статьи.

Связь 3-х АТС, где 2-е из 3-х за одним маршрутизируемым IP.

Может возникнуть неприятная, но в то же время не очень ситуация, когда имеется 3 АТС, 2 из которых в разных локальных подсетях, которые смотрят в интернет через коммутатор с 1-го маршрутизируемого в интернете IP, а 3-я АТС спрятана за своим коммутатором со своим IP. Схема подключения будет реализована следующим образом:

  1. АТС №1 и АТС №2 связаны IAX2 транком
  2. АТС №2 и АТС №3 связаны IAX2 транком

Схема обзвона будет реализована следующим образом:

Если 301 абонент захочет вызвать, например, 101, то вызов пойдёт через транк между 3 и 2 АТС, а АТС №2 будет искать номер 1ХХ, следуя в транк между 2 и 1 АТС. Все остальные направления аналогичны.

Т.к. АТС №2 имеет абонентов, с которыми может производиться общение, а так же она является транзитной АТС между 3 и 1, то она же будет и точкой отказа, во время падения которой, фактически, перестанет функционировать внутренняя связь между 3-мя АТС. Данное положение можно поправить, если на АТС №1 завести транк в одну сторону до АТС №3, но практически это не имеет большого КПД.
Транки следует заводить без регистрации peer-to-peer. Создание транков производится по аналогии с параграфом 4 данной статьи с той лишь поправкой, что в данном случае между АТС за роутерами 89.192.32.45 и 94.56.44.45 имеется NAT, ставим директиву nat=yes в транке, так же следует добавить директиву canreinvite=no. В директиве, описывающий хост будут фигурировать 89.192.32.45 и 94.56.44.45, соответственно, а АТС №1 и №2 будут коннектиться друг к другу в среде локалнета.

Таким образом, статья подошла к своему логическому завершению.

 

Подписаться
Уведомить о
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.