Содержание статьи:
Рассмотрим как выполнить базовую настройку SIP АТС — Asterisk. В примере будет использоваться Asterisk 13 (как установить его можно ознакомится тут). Так же в примере будут рассмотрены основные моменты в настройке, для понимания принципа как все устроено.
(Статья в процессе написания и будет дополнятся)
Техническое задание
- Настройка внутренних номеров, настройка sip-транков выданных провайдером.
- Настройка маршрутизации звонков, с возможностью совершать внутренние звонки и внешние звонки, а так же принимать входящие извне звонки.
Настройка внутренних номеров (sip.conf)
Прежде чем начать, выполним резервное копирование файла конфигурации /etc/asterisk/sip.conf:
cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.backup
Выполним настройку файла конфигурации /etc/asterisk/sip.conf. Укажем основные параметры для безопастности АТС, зададим шаблон для внутренних номеров и зададим необходимые внутренние номера:
[general] externaddr=11.111.111.11:5060 ;Внешний IP-адрес language=ru ;Локализация звуков context=default allowguest=no ;Разрешить/Запретить гостевые подключения alwaysauthreject=yes ;Разрешить/Запретить отвечать на INVITE и REGISTER allowoverlap=no ;Разрешить/Запретить набор по одной цифре limitonpeers=yes ;Разрешить/Запретить лимит на кол-во одновременных разговоров srvlookup=yes ;Принимать SIP вызовы на основании доменных имен useragent=Asterisk JAKONDA ;Значение поля useragent в SIP заголовке [authentication] ;Шаблон для ВНУТРЕННИХ НОМЕРОВ [internal_numbers](!) type=friend ;peer(Исходящие) и user(Входящие) в одном context=int-call ;Контекст обработки входящих вызовов host=dynamic ; nat=no ;Политики работы через nat deny=0.0.0.0/0.0.0.0 ;Cети из которых запрещено подключение permit=10.1.1.0/255.255.255.0 ;Cети из которых разрешено подключение qualify=yes ;Переодическая проверка доступности клиента canreinvite=no ;Разрешить/Запретить потоки peer-to-peer в обход сервера insecure=port,invite ;port (не требовать совпадения порта), invite (не требовать аутентификации) callgroup=1 ;Группа вызова pickupgroup=1 ;Группа перехвата вызовов call-limit=2 ;Лимит входящих вызовов dtmfmode=rfc2833 ;Какую спецификацию использовать при передачи DTMF сигналов disallow=all ;Запретить использование всех кодеков, ниже разрешаем нужные allow=alaw allow=g729 [100](internal_numbers) callerid="Number 100" <100> secret=123 [101](internal_numbers) callerid="Number 101" <101> secret=123
После внесенных изменений в файле sip.conf, нужно в консоли Asterisk выполнить команду (sip reload), для того чтобы внесенные изменения приминились.
Список созданных номеров (sip show users):
SRV-ASTERISK-SP*CLI> sip show users Username Secret Accountcode Def.Context ACL Forcerport 100 123 int-call No No 101 123 int-call No No
Настройка внешних линий для выхода на городские, междугородние номера и приема входящих извне звонков
Для того чтобы совершать звонки на внешние номера, а так же иметь возможность принимать и обрабатывать входящие звонки на внешний номер, необходимо в файл конфигурации /etc/asterisk/sip.conf добавить данные SIP-транков выданных провайдером.
На примере рассмотрим провайдеров МАНГО-ТЕЛЕКОМ и ZADARMA.COM.
[general] ;Блок регистраций транков в МАНГО-ТЕЛЕКОМ register=000100:XXXXXXXX@domain.mangosip.ru:60000/000100 register=000101:XXXXXXXX@domain.mangosip.ru:60000/000101 [authentication] ;Шаблон для ВНЕШНИХ ТРАНКОВ (МАНГО-ТЕЛЕКОМ) [external_trunks_mgo](!) type=friend context=ext-call-mgo host=domain.mangosip.ru port=60000 qualify=yes accountcode=Mgo fromdomain=domain.mangosip.ru insecure=invite dtmfmode=inband disallow=all allow=alaw allow=g729 ;Внутренние номера (МАНГО-ТЕЛЕКОМ) [000100](external_trunks_mgo) username=000100 secret=XXXXXXXX fromuser=000100 [000101](external_trunks_mgo) username=000101 secret=XXXXXXXX fromuser=000101 ;Шаблон для ВНЕШНИХ ТРАНКОВ (ZADARMA.COM) [external_trunks_zadarma] host=sip.zadarma.com insecure=invite,port type=friend fromdomain=sip.zadarma.com disallow=all allow=alaw,ulaw dtmfmode=auto secret=Aa1234567 defaultuser=555666 trunkname=555666 fromuser=555666 callbackextension=555666 context=ext-call-zadarma qualify=400 accountcode=Zdr directmedia=no nat=force_rport,comedia
После внесенных изменений в файле sip.conf, нужно в консоли Asterisk выполнить команду (sip reload), для того чтобы внесенные изменения приминились.
Список созданных номеров (sip show users):
SRV-ASTERISK-SP*CLI> sip show users Username Secret Accountcode Def.Context ACL Forcerport 000100 XXXXXXXX Mgo ext-call-mgo No No 000101 XXXXXXXX Mgo ext-call-mgo No No 555666 XXXXXXXX Zdr ext-call-zdr No Yes 100 123 int-call No No 101 123 int-call No No
Список пиров (sip show peers):
SRV-ASTERISK-SP*CLI> sip show peers Name/username Host Dyn Forcerport Comedia ACL Port Status Description 100/100 (Unspecified) D No No 0 UNKNOWN 101/101 (Unspecified) D No No 0 UNKNOWN 000100/000100 88.88.88.88 Auto (No) No 60000 OK (2 ms) 000101/000101 88.88.88.88 Auto (No) No 60000 OK (2 ms) 555666/555666 88.88.88.88 Yes Yes 5060 OK (3 ms) 5 sip peers [Monitored: 3 online, 2 offline Unmonitored: 0 online, 0 offline]
Мы разобрали как создавать внутренние номера на основе шаблонов, добавлять SIP-транки от провайдеров. Теперь перейдем к настройки маршрутизации звонков.
Настройка маршрутизации звонков (extensions.conf)
Прежде чем начать, выполним резервное копирование файла конфигурации /etc/asterisk/extensions.conf:
cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup
Выполним настройку файла конфигурации /etc/asterisk/extensions.conf. Настроим правила маршрутизации внутренних звонков, звонков на внешние номера и прием и обработка входящих извне звонков:
[general] ;Возможность сохранять текущий dialplan в файл (dialplan save) static=yes writeprotect=no [globals] [default] ;Вешаем трубку [handup-sip] exten => _X!,1,HangUp() ;Исходящие звонки [int-call] ;Звонки на внутренние номера exten => _XXX,1,Dial(SIP/${EXTEN}) ;Звонки на внешние номера через МАНГО-ТЕЛЕКОМ exten => _XXX.,1,Dial(SIP/${EXTEN}@000${CALLERID(num)}) ;Звонки на внешние номера через ZADARMA.COM ;exten => _XXX.,1,Dial(SIP/${EXTEN}@555666) include => handup-sip ;Входящие звонки на номера МАНГО-ТЕЛЕКОМ [ext-call-mgo] exten => 000100,1,Dial(SIP/100) ;Входящие звонки на номер ZADARMA.COM [ext-call-zdr] exten => 555666,1,Dial(SIP/101)
После внесенных изменений в файле extensions.conf, нужно в консоли Asterisk выполнить команду (dialplan reload), для того чтобы внесенные изменения приминились.
Выполним тестовые звонки, сперва с номера 100 на 101, затем на внешний номер 99999 (тестовый номер МАНГО-ТЕЛЕКОМ). В файле /var/log/asterisk/cdr-csv/Master.csv можно посмотреть историю совершенных звонков:
"","100","101","int-call","""Number 100"" <100>","SIP/100-00000001","SIP/101-00000002","Dial","SIP/101","2017-10-23 13:30:32","2017-10-23 13:30:39","2017-10-23 13:31:22",50,42,"ANSWERED","DOCUMENTATION","1508765432.1","" "","101","99999","ext-call-mgo","""Number 101"" <101>"" <101>","SIP/101-00000003","SIP/000101-00000004","Dial","SIP/99999@000101","2017-10-24 12:27:53","2017-10-24 12:27:55","2017-10-24 12:27:58",4,3,"ANSWERED","DOCUMENTATION","1508848073.106",""
Таким образом мы настроили простую маршрутизацию звонков, указав отдельными правилами, что 3-х значные номера расценивать как внутренние, а номера более 3-х знаков расценивать как внешние и использовать для звонка на такие номера нужно SIP-транк провайдера (прим. МАНГО-ТЕЛЕКОМ). Так же при входящем звонке на внешний номер 000100 (МАНГО-ТЕЛЕКОМ) переадресовывать звонок на внутренний номер 100, аналогично поступаем с внешним номером 555666 (ZADARMA.COM), только переводим звонок на номер 101.
Продолжение следует…
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Hey there! I’m at work surfing around your blog from my new iphone 3gs!
Just wanted to say I love reading through your
blog and look forward to all your posts! Keep up
the great work!