Страница 1 из 1

Cisco в качестве SIP клиента, или регистрируемся у провайдера...

Добавлено: 22 сен 2015, 10:03
RomA
Задача:
Принять от провайдера 5ть телефонов по SIP

Условие:
Условия были ограничены только фантазией моего провайдера, а она была безгранична...
1) На каждый телефон свой логин-пароль
2) Логин содержит буквы
3) Другую информацию провайдер предоставлять отказался, сказав что она не нужна для соединения, так что вычислять её будем сами.

Дано:
Провайдер:
1.2.3.4 - IP адрес VoIP сервера провайдера
lvz1 - логин для регистрации телефона
11111 - пароль для регистрации телефона
222222 - Наш номер телефона

мы:
Cisco 2821

Реализация:

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

Итак, для начала пробуем регистрироваться у провайдера

Код: Выделить всё

sip-ua 
 credentials username lvz1 password 11111 realm asterisk
 credentials username lvz2 password 22222 realm asterisk
 credentials username lvz3 password 33333 realm asterisk
 credentials username lvz4 password 44444 realm asterisk
 credentials username lvz5 password 55555 realm asterisk
 authentication username lvz1 password 11111 realm asterisk
 registrar ipv4:1.2.3.4 expires 3600
 sip-server ipv4:1.2.3.4
 connection-reuse
 host-registrar

credentials - это для входящих вызовов, что бы нам могли позвонить по тем номерам, что провайдер выдал - этих записей может быть много
authentication - это для исходящих звонков - то есть с этим номером от нас будет уходить вызов - такая запись может быть одна



Итак, мы тут регистрируем 5ть телефонов lvz1-5, логины и пароли нам провайдер сообщил, а вот realm пришлось узнавать самому. В начале в качестве realm я написал ИП адрес провайдера - регистрация не прошла, но в дебагe (командой debug ccsip messages ) я увидел вот такое

Код: Выделить всё

WWW-Authenticate: Digest realm="asterisk",nonce="d18aa652a6639effeaeca666b8dca5b6",domain="sip:sip.name.ru",stale=false,algorithm=MD5

и изменил realm с ИП адреса на asterisk
Проверяем что телефоны зарегистрировались у провайдера

Код: Выделить всё

gw-1#sh sip-ua register status 
Line                              peer        expires(sec)  registered
================================  ==========  ============  ==========
lvz1                          -1          2601          yes         
lvz2                          -1          2631          yes         
lvz3                          -1          2834          yes         
lvz4                          -1          2854          yes         
lvz5                          -1          2873          yes     
Все пять телефонов зарегистрированы - можно попробовать совершить звонок с мобилы на один из наших номеров. В анкете провайдера таких данных не оказалось, но они прописаны в договоре. Итак, звоним с мобилы на наш номер +7(4725) 222222 и смотрим дебаг того, что происходит (по команде deb voip ccapi all выделяя следующее)

Код: Выделить всё

cisco-username=233700
   ----- ccCallInfo IE subfields -----
   cisco-ani=333333
   cisco-anitype=0
   cisco-aniplan=0
   cisco-anipi=0
   cisco-anisi=0
   dest=lvz1
   cisco-desttype=0
   cisco-destplan=0
   cisco-rdie=FFFFFFFF
   cisco-rdn=
   cisco-lastrdn=
   cisco-rdntype=0
   cisco-rdnplan=0
   cisco-rdnpi=-1
   cisco-rdnsi=-1
   cisco-redirectreason=-1   fwd_final_type =0
   final_redirectNumber =
   hunt_group_timeout =0
тут мы видим:
1) Звонок прошел - это хорошо :-)
2) Звонок пришёл с номера cisco-ani=333333 (допустим это мой сотовый)
3) А вот пришел он на номер dest=lvz1
Последнее стало для меня великим сюрпризом, ибо до этого момента я и помыслить не мог, что номер телефона может содержать буквы. Но провайдер решил иначе. Проблема заключается в том, что вход в пир у меня обычно осуществляется по destination-pattern, но не в данном случае такое не работает, ибо туда нельзя вписать буквы. Потому выход выглядит в виде такого кода:

Код: Выделить всё

voice translation-rule 100
 rule 1 /.*1/ /1001/
 rule 2 /.*2/ /1002/
 rule 3 /.*3/ /1003/
 rule 4 /.*4/ /1004/
 rule 5 /.*5/ /1005/
!
!
voice translation-profile IN_REINFAKOM
 translate called 100
 
 dial-peer voice 3 voip
 translation-profile incoming IN_REINFAKOM
 voice-class codec 1
 voice-class sip dtmf-relay force rtp-nte
 session protocol sipv2
 session target sip-server
 incoming called-number .%
 dtmf-relay rtp-nte
 no vad

Итак, звонок у меня входит в 3 пир, где при входе преобразуется по правилу IN_REINFAKOM, которое ссылается на 100 лист преобразования. В нём я отлавливаю последнюю цифровую часть логина (спасибо провайдеру хоть за то, что сохранил хоть какие то циферки) и преобразую в локальные номера АТС. Таким образом звонок от провайдера попадает на мою станцию.

Литература:
http://www.cisco.com/cisco/web/support/ ... onfig.html