Соединить 2 asterisk сервера между собой

Автор: | 28.02.2019

Хочу на простом примере рассказать, как можно связать друг с другом 2 сервера asterisk по протоколу SIP. Это может быть полезным для оптимизации расходов на междугородную и международную связь, для звонков между филиалами по внутренним номерам.

Представим, что у вас 2 таких офиса в разных городах. Пусть этими городами будут Москва (условное имя сервера moscow) и Санкт-Петербург (условное имя сервера piter) Вы хотите звонить на внутренние номера этих офисов напрямую, как-будто они обслуживаются вашим сервером. Допустим, на сервере moscow у вас номера начинаются на 100 и 200, а в piter на 300 и 400. Я считаю, что между серверами у вас настроен vpn канал и они видят друг друга без проблем.

Если у вас номера пересекаются, например, и там и там начинаются на 100, то задача немного усложняется, но не сильно. Просто придется добавить какую-нибудь еще цифру к набору, а в диалплане ее отсекать. Но я не буду рассматривать этот вариант. Если вы одна организация, то логично сделать такую нумерацию, чтобы она не пересекалась. Если это не так, то лучше ее переделать, чем городить костыли.

Наша задача будет разбита на 2 этапа:
1. Готовим пиры и регистрации для связи двух серверов между собой.
2. Настраиваем dialplan, чтобы распределять звонки по серверам.

Может возникнуть вопрос: «А зачем вообще соединять 2 сервера, если можно сделать один сервер asterisk и подключить к нему абонентов обоих офисов?». Причины могут быть разными. Мне видятся несколько, например:
В каком-то филиале нестабильный интернет. Офис не хочет терять возможность внутренних звонков при проблемах с интернетом. А если сервер с астериском будет находиться не у них, то даже между собой не смогут созвониться.
Разные люди администрируют сервера. В рамках одного сервера сложнее настроить разделение доступа. Более того, я даже не знаю, как это реализовать. А в случае с разными серверами никаких проблем. Главное не трогать часть диалплана, которая отвечает за звонки друг к другу, а дальше можно конфигурировать как душе угодно.
Нужна раздельная статистика и запись звонков. Конечно, можно все это реализовать в рамках одного сервера, но нужно будет либо покупать какое-то коммерческое решение, либо переделывать бесплатное. Я не знаю простого, бесплатного и удобного средства, которое позволит это реализовать в рамках одного сервера. А так ставишь любой cdr viewer и ограничиваешь доступ к web панели любым удобным способом.

Редактируем sip.conf для соединения двух серверов
Идем на сервер moscow и добавляем в sip.conf новый пир, который будет использовать сервер piter для подключения.

Добавляем аналогичный пир на сервер piter.

Добавляем на сервер moscow в sip.conf регистрацию на сервере piter в соответствии с настройками пира.

В данном случае 192.168.10.100 — ip адрес сервера в Питере. То же самое делаем на сервере piter.

192.168.20.100 — ip адрес астера в Москве. Делаем на обоих серверах sip reload и проверяем состояние пиров и регистраций.

Вы должны на каждом сервере увидеть новый подключившийся пир и выполненную регистрацию. Если этого нет, разбирайтесь, в чем может быть дело. Скорее всего проблемы с firewall. Настройте его и проверяйте снова. Серверы должны как минимум без проблем пинговать друг друга по ip. Если все порядке, то идем дальше.

Теперь нам нужно в диалплане на каждом из серверов указать, куда звонить по разным номерам. На сервере moscow укажем, что звонить по маскам 300 и 400 нужно в питер. Добавляем в extentions.conf правило перед основным правилом звонка на внутренние номера с маской _XXX.

И добавим контекст для приема входящих звонков с сервера piter
[piter-in]

Делаем то же самое на сервере piter.

Не забываем поменять маску. И добавляем контекст приема звонков с moscow.

Вот и все. Мы связали между собой 2 астериск сервера. Можно звонить друг другу, используя внутренние номера. Не забудьте перезагрузить план набора.

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

Если у вас настроена запись звонков так же, как я рассказал в своей статье про настройку астериска, которую привел в начале, то не забудьте добавить запись по обоим направлениям. Примерно так для сервера moscow на исходящие.

И вот так на входящие: