Недавно появилась задача, реализацию которой я опишу ниже. Возможно куму-то пригодится. Я в телефонии далеко не гуру, поэтому прошу строго не судить если что не совсем корректно излагаю.
Требуется реализовать следующую схему работы:
Ростелеком<-----(ОКС7)------>АТС1<--------(ОКС7)------->АТС2<----------->SIPабонент.
Ростелеком- это провайдер к которому подключаемся по ОКС-7. Он нам дает номерную емкость.
АТС1 и АТС2 это наши атски, собранные на базе Asterisk 1.6.2
Для работы с ОКС-7 используется модуль chan_ss7-2.0.0 Этот модуль пропатченный, так как в исходном виде он не умеет работать с NOA (Nature of Address Indicator). Как пропатчить и суть проблемы, можно почитать тут
В итоге нам необходимо чтобы SIP абонент мог пользоваться номером выданным Ростелеком, при этом получается что АТС1 работает в транзитном режиме.
На АТС1 стоит двухпортовая плата Quasar-M Драйвер адаптера используется Quasar-mini, так как с обычным драйвером (Версия драйвера 3.1.1) возникли проблемы.
На АТС2 стоит однопортовая плата Digium TE121.
Используются следующие коды пунктов сигнализации ОКС7:
Ростелеком- 164
АТС1-845
АТС2-16
Итак приступим.
1) Проверяем что сервера нашли платы потока Е1
- Код: выделить все
АТС1, на ней установлена плата Quasar-M
[root@ip0-2-58 1]# lspci
03:00.0 Network controller: Altera Corporation Device 2230 (rev 10)
- Код: выделить все
АТС2, на ней установлена плата Digium TE121
[root@sip2 asterisk]# lspci
10:08.0 Ethernet controller: Digium, Inc. Wildcard TE121 single-span T1/E1/J1 card (PCI-Express) (rev 11)
2) Конфигурим на каждом из серверов DAHDI и подгружаем модули (драйвера) плат.
- Код: выделить все
АТС1
[root@ip0-2-58 dahdi]# cat /etc/dahdi/modules
quasar
cat /etc/dahdi/system.conf
# Define SPAN configuration
span = 1,1,0,ccs,hdb3 #это линк на Ростелеком, порт 1 настроен как slave
span = 2,0,0,ccs,hdb3 #это линк на АТС2 , и порт 2 настроен как master
#SPAN1, CCS signaling (PRI/SS7)
bchan=1-31
#SPAN2, CCS signaling (PRI/SS7)
bchan=32-62
loadzone = ru
defaultzone = ru
- Код: выделить все
АТС2
[root@sip2 dahdi]# cat /etc/dahdi/modules
wcte12xp
[root@ip0-2-58 dahdi]# cat /etc/dahdi/system.conf
# Span 1: WCT1/0 "Wildcard TE121 Card 0" (MASTER)
span=1,1,0,ccs,hdb3 #это линк на АТС1 , и порт соответственно настроен как slave
bchan=1-31
loadzone = ru
defaultzone = ru
То что модули плат успешно подгрузились в систему можем посмотреть следующим образом:
- Код: выделить все
root@ip0-2-58 dahdi]# lsmod
Module Size Used by
quasar 24864 0
[root@sip2 dahdi]# lsmod
Module Size Used by
wcte12xp 31155 31
3) Приступаем к настройке linkset ОКС-7
- Код: выделить все
АТС1
cat /etc/asterisk/ss7.conf
[linkset-rtk]
enabled => yes
enable_st => no
use_connect => yes
hunting_policy => even_mru
context => fromSS7
language => ru
t35 => 15000,timeout
subservice => auto
[linkset-peer2]
enabled => yes
enable_st => no
use_connect => yes
hunting_policy => even_mru
context => fromSS7
language => ru
t35 => 15000,timeout
subservice => auto
[link-l1]
linkset => rtk
channels => 1-15,17-31
schannel => 16
firstcic => 1
enabled => yes
[link-l2]
linkset => peer2
channels => 1-15,17-31
schannel => 16
firstcic => 1
enabled => yes
[host-ip0-2-58.home.net.ru]
enabled => yes
default_linkset => rtk
opc => 845
dpc => rtk:164,peer2:16
links => l1:1,l2:2 #The links on the host is 'l1', connected to span/connector #1
- Код: выделить все
АТС2
[root@sip2 asterisk]# cat /etc/asterisk/ss7.conf
[linkset-rtk1]
enabled => yes
enable_st => no
use_connect => yes
hunting_policy => even_mru
context => fromSS7
language => ru
t35 => 15000,timeout
subservice => auto
[link-l1]
linkset => rtk1
channels => 1-15,17-31
schannel => 16
firstcic => 1
enabled => yes
[host-sip2.net.ru]
enabled => yes
default_linkset => rtk1
opc => 16
dpc => rtk1:845
links => l1:1
Для диагностики и настройки chan_ss7 удобно производить загрузку и выгрузку модуля ручным способом- анализировать информацию на экране и читать логи
- Код: выделить все
[root@ip0-2-58 asterisk]# asterisk -r
Asterisk 1.6.2.19, Copyright (C) 1999 - 2010 Digium, Inc. and others.
ip0-2-58*CLI> module unload chan_ss7.so
ip0-2-58*CLI> module load chan_ss7.so
Проверку линков производим следующим способом:
- Код: выделить все
[root@ip0-2-58 asterisk]# asterisk -r
ip0-2-58*CLI> ss7 linestat
Linkset: rtk
CIC 1 Idle
CIC 2 Idle
..
CIC 31 Idle
Linkset: peer2
CIC 1 Idle
CIC 2 Idle
..
CIC 31 Idle
Либо так:
ip0-2-58*CLI> ss7 link status
linkset rtk, link l1/16 INSERVICE, sls 0, total: 3317788976, 3317784304
linkset peer2, link l2/16 INSERVICE, sls 0, total: 3317788960, 3317784352
Можно так же оценить текущее состояние каждого из линков
ip0-2-58*CLI> ss7 status
linkset idle busy initiating resetting total incoming total outgoing
rtk 30 0 0 0 0 0
linkset idle busy initiating resetting total incoming total outgoing
peer2 30 0 0 0 5 0
4) Ну и наконец создаем диалплан.
- Код: выделить все
АТС1
cat /etc/asterisk/extensions.conf
[fromSS7]
exten => 4957058909,1,Dial(SS7/peer2/${EXTEN},300,T)
exten => 4957058909,n,Hangup()
exten => _XXXXXXX,1,Dial(SS7/rtk/${EXTEN},300,T)
exten => _XXXXXXX,n,Hangup()
АТС2
cat /etc/asterisk/extensions.conf
[fromSS7]
exten => 4957058909,1,Set(CALLERID(num)=8${CALLERID(num)})
exten => 4957058909,n,Dial(SIP/209,60,t)
exten => 4957058909,n,Hangup()
[SS7]
exten => _XXXXXXX,1,Set(CALLERID(num)=${IF($[ ${CALLERID(num)} = 209]?4957058909:${CALLERID(num)})})
exten => _XXXXXXX,n,Dial(SS7/rtk1/L${EXTEN},300,T)
exten => _XXXXXXX,n,Hangup()