Asterisk. Пример 2 — SIP и DONGLE

Asterisk. Пример 2 — SIP и DONGLE #

В данной статье будет рассмотрена простейшая связка SIP и DONGLE, которая интересует большинство. Более подробная настройка системы описана в предыдущем примере. Здесь же приведу только фрагменты конфигов с небольшим описанием того, что там настроено.

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

В первую очередь настроим вызовы между двумя SIP линиями, которые будем использовать для проверки, тестирования и изучения.

Disclamer #

Автор предупреждает читателей, о тонкой грани между допустимым использованием телефонных систем подобного рода и уголовной ответственностью, которая может наступить при неправильной маршрутизации телефонного трафика (рефайлинга). Пожалуйста, ознакомьтесь с законодательством Вашей страны, чтобы избежать проблем. Автор снимает с себя ответственность за любые действия читателя, в которых ему может помочь материал данной статьи и возлагает ее целиком и полностью на читателя данной статьи. Информация, приведенная в данной статье, является справочной и не носит практического характера.

SIP #

Файл sip.conf должен выглядеть так:

[general]
language = ru
bindport = 5060
callcounter = yes
limitonpeers = yes
dtmfmode = rfc2833
compensate = yes
defaultexpiry = 3600
disallow = all
allow = alaw

[LocalSip](!)
dtmfmode = rfc2833
canreinvite = no
host = dynamic
type = friend
port = 5060
qualify = yes
deny = 0.0.0.0/0.0.0.0
permit = 0.0.0.0/0.0.0.0
callcounter = yes
disallow = all
allow = alaw

[6000](LocalSip)
username=6000
secret=606060
callerid=Vladimir Mayakovskiy <6000>
context=from-sip-phone

[6001](LocalSip)
username=6001
secret=616161
callerid=Taras Shevchenko <6001>
context=from-sip-phone

Здесь были вынесены общие параметры в группу параметров LocalSip, а далее были настроены две SIP-линии, к которым были применены параметры группы. Контекст, правила которого будут обрабатывать вызовы — from-sip-phone.

В консоле Asterisk выполните команду reload, чтобы перечитать конфиги и подключите два SIP-softphone с приведенными в конфиге учетными данными к серверу. Убедитесь, что авторизация прошла успешно.

sip show peers

Позвонить Вы еще никуда не сможете, так как мы еще не настроили маршрутизацию.

Dongle #

Теперь давайте настроим GSM модемы (Dongle). У нас подключены 2 модема. Первый с SIM-картой оператора Киевстар, второй с SIM-картой оператора Life. Как уже указывалось в основной статье по установке системы Asterisk, линии Dongle можно сконфигурировать различными способами:

  • указать только IMEI — в этом случае привязка линии будет осуществляться по IMEI модема (мобильного терминала). Вы можете менять SIM-карты или разъемы USB. Линия будет закреплена за модемом.
  • указать только IMSI — в этом случае привязка линии будет осуществляться по IMSI номеру SIM-карты. Вы можете заменить модем на другой, можете поменять разъем USB. Линия будет закреплена именно за SIM-картой.
  • жестко указать интерфейсы audio и data — в этом случае линия будет привязана к контроллеру USB (по факту к гнезду USB). Это очень неудобный способ и оставлен в новых версиях Dongle только для совместимости со старыми версиями и с некоторыми операционными системами, где обнаружение по IMEI и IMSI не работает.

Самым удобным является способ привязки SIM карты (по номеру IMSI). В этом случае замена порта или модема, в случае их выхода из строя, не приведет к необходимости перенастраивать систему. Можно сочетать любые из способов, но это только затруднит эксплуатацию в будущем. Не усложняйте.

Файл dongle.conf должен иметь следующее содержание (обратите внимание на секцию defaults — в данном примере указаны только важные параметры, а не точное содержимое. Не удаляйте все содержимое этого файла):

[general]
interval=15

[defaults]
; в этой секции закомментируйте exten= и оставляйте все остальные параметры как есть, кроме следующих параметров:
; это усиление принимаемого аудиосигнала (динамика)
rxgain=0
; это усиление передаваемого аудиосигнала (микрофона)
txgain=0
; желательно указывать для корректного речевого информирования
language=ru
; желательно выключать, когда есть вероятность повреждения формы тональных сигналов
dtmf=relax

[KYIVSTAR]
imsi=255031111111111
context=from-gsm

[LIFE]
imsi=255061111111111
context=from-gsm

В итоге получим две линии, идентифицируемые как KYIVSTAR и LIFE, вызовы с которых должны будут обрабатываться правилами маршрутизации в контекте from-gsm.

Параметры rxgain и txgain задают усиление. Указывается количество dB в виде целого положительного или отрицательного числа. 0 — усиление выключено. Включайте усиление только при явной необходимости, иначе будет страдать качество звука.

В итоге имеем две SIP-линии и два Dongle (GSM линии). Самое время начинать звонить между ними.

Extensions #

Сделаем следующую схему: SIP-линии должны звонить друг другу. SIP-линии должны звонить через линию KIEVSTAR только на номера этого оператора, а все остальные вызовы должны уходить через линию LIFE. Все входящие вызовы, поступающие на модемы, должны тут же маршрутироваться на обе SIP-линии. Очереди использовать не будем, может быть напишу об этом отдельно.

За маршрутизацию отвечает подсистема extensions. Настройки очень простые и понятные, частично они были описаны в первом примере. Но на всякий случай прокомментирую. Файл extensions.conf очень маленький:

[globals]
[general]
autofallthrough=yes

; Этот контекст принимает и обрабатывает вызовы с SIP-линий
[from-sip-phone]
; SIP-линии звонят друг другу
exten => _6XXX,1,Dial(SIP/${EXTEN})

; исходящие вызовы на номера оператора KYIVSTAR
exten => _06[7,8]XXXXXXX,1,Dial(Dongle/KYIVSTAR/${EXTEN})
exten => _09[6-8]XXXXXXX,1,Dial(Dongle/KYIVSTAR/${EXTEN})
exten => _039XXXXXXX,1,Dial(Dongle/KYIVSTAR/${EXTEN})

; все остальные исходящие вызовы без разбора отправляем через GSM линию LIFE
exten => _X.,1,Dial(Dongle/LIFE/${EXTEN})

; этот контекст принимает и обрабатывает вызовы с GSM-линий
[from-gsm]
; простая реализация без очередей - будут звонить обе SIP-линии
exten => s,1,Dial(SIP/6000&SIP/6001)

Вот и все. Пробуйте позвонить.

Успехов!

comments powered by Disqus