моя россыпь

Маршрутизация в режиме без аутентификации

4.1 Настройте шлюз, маршрут в режиме без проверки подлинности такой же, как и в режиме проверки подлинности

4.2 Шлюз не настроен, укажите напрямую на IP-адрес

4.3 Другие ситуации

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

После того, как регистрация внутренней сети завершена, на маршрутизаторе делается отверстие, то есть выполняется сопоставление портов внутренней и внешней сетей. FreeSWITCH не может напрямую добраться до шлюза, но он может достигнуть шлюза внутренней сети через порт внешней сети (существует много типов NAT, которые могут быть неудачными, но обычно это возможно).

В это время предположим, что шлюз интрасети зарегистрирован во FreeSWITCH с расширением 4444. (Фактически это также может быть сделано другими способами, такими как сопоставление портов на маршрутизаторе и сопоставление портов во внутренних и внешних сетях, но этот метод недостаточно гибок)

Звоните в консоль FreeSWITCH

sofia_contact 4444

получил ответ

sofia/internal/sip:[email protected]:17480

Отсюда мы можем узнать адрес внешней сети и порт, соответствующий шлюзу, а затем просто отправить информацию о вызове на 171.2221.76.7:17480. Но номер, на который мы действительно хотим позвонить, может быть номером мобильного телефона или фиксированной линией.

Установка freeswitch – centos

FreeSWITCH — откры­тая теле­фон­ная плат­фор­ма, рас­про­стра­ня­е­мая в исход­ных кодах, создан­ная для удо­вле­тво­ре­ния потреб­но­сти в управ­ля­е­мых голо­сом или тек­стом систе­мах, мас­шта­би­ру­е­мых от софт­фонa до софт­сви­чa. FreeSWITCH может быть исполь­зо­ван в каче­стве ком­му­та­то­ра, АТС, медиа шлю­за или медиа сер­ве­ра для при­ло­же­ний IVR, исполь­зу­ю­щих про­стые или XML скрип­ты для управ­ле­ния алго­рит­мом обра­бот­ки звон­ка. FreeSWITCH под­дер­жи­ва­ет раз­ные про­то­ко­лы, такие как SIP, H.323, IAX2 и Google Talk, что поз­во­ля­ет вза­и­мо­дей­ство­вать c sipX, OpenPBX, Bayonne, Yate, или Asterisk.

1 Спо­соб авто­ма­ти­че­ская установка:

Для уста­нов­ки Freeswitch в CentOS 7 под­клю­чим epel репо­зи­та­рий от freeswitch. Под­клю­че­ние репо­зи­та­рия идет через RPM пакет с сер­ве­ров раз­ра­бот­чи­ка. Для это­го выпол­ним в кон­со­ли сле­ду­ю­щую команду.

Далее уста­но­вим сам freeswitch.

По окон­ча­нии уста­нов­ки добав­ля­ем в авто­за­груз­ку командой.

и можем запускать

Про­ве­ря­ем кор­рект­ность запус­ка вхо­дом в кон­соль. выпол­ня­ем коман­ду fs_cli.

На этом уста­нов­ка freeswitch на CentOS закончена.

2 Спо­соб сбор­ка из исходников

Перед уста­нов­кой необ­хо­ди­мо под­го­то­вить сер­вер, уста­но­вив необ­хо­ди­мые ути­ли­ты и зависимости.

Сна­ча­ла реко­мен­ду­ет­ся отклю­чить Selinux, для это­го необ­хо­ди­мо поме­нять в фай­ле /etc/selinux/config поме­нять зна­че­ние пара­мет­ра SELINUX с enforsing на disabled

Сле­ду­ю­щим шагом необ­хо­ди­мо выпол­нить обнов­ле­ние систе­мы, запус­ка­ет­ся коман­дой yum update

Так­же реко­мен­ду­ет­ся уста­но­вить базо­вые сер­вер­ные ути­ли­ты, коман­дой yum groupinstall Base

После выпол­не­ния дан­ных шагов необ­хо­ди­мо пере­за­гру­зить сер­вер коман­дой reboot

После загруз­ки про­ве­рить ста­тус Selinux, коман­дой sestatusрезуль­тат дол­жен выдать disabled

Далее нуж­но уста­но­вить веб-серв­ре и mysql. В каче­стве веб-сер­ве­ра исполь­зу­ет­ся Apache, в каче­стве mysql — Mariadb.

Уста­нов­ка Apache про­из­во­дит­ся командой

yum install httpd

После уста­нов­ки необ­хо­ди­мо запу­стить Apache b доба­вить его в авто­за­пуск, командами

systemctl start httpd и
systemctl enable httpd .

Далее необ­хо­ди­мо уста­но­вить Mariadb, командой
yum install mariadb-server mariadb

Так­же реко­мен­ду­ет­ся выпол­нить пер­во­на­чаль­ную настрой­ку Mariadb с помо­щью коман­ды mysql_secure_installation

alt

Так­же необ­хо­ди­мо уста­но­вить допол­ни­тель­ные зависимости:

yum install php php-pdo php-mysql sqlite-devel pcre-devel speex-devel libedit-devel bison patch ncurses-devel unixODBC-devel openssl-devel gnutls-devel libogg-devel autoconf automake gcc-c git-core libjpeg-devel libtool libjpeg-devel kernel-devel git xz-devel mesa-dri-drivers libXv libXScrnSaver xorg-x11-fonts* libXScrnSaver curl-devel libtiff-devel libjpeg-devel subversion fontconfig libICE libSM libX11 libXau libxcb libXcursor libXext libXfixes libXi libXinerama libXrandr libXrender libXScrnSaver libXv portaudio portaudio-devel

Так­же реко­мен­ду­ет­ся уста­но­вить и настро­ить ODBC кон­нек­тор, если он отсут­ству­ет в системе:

yum install unixODBC-devel mysql-connector-odbc

Далее необ­хо­ди­мо настро­ить ODBC с помо­щью фай­ла /etc/odbcinst.ini в боль­шин­стве слу­ча­ев нет необ­хо­ди­мо­сти вно­сить прав­ки. Ниже при­ве­ден при­мер­ный вид дан­но­го фай­ла — сек­ция [MySQL]

alt

Далее необ­хо­ди­мо запол­нить файл /etc/odbc.ini при его отсут­ствии — необ­хо­ди­мо создать и вне­сти в него сле­ду­ю­щие данные:

Далее необ­хо­ди­мо ска­чать через git исход­ный код FreeSwitch.
Для это­го необ­хо­ди­мо перей­ти в дирек­то­рию /usr/src и выпол­нить команду:

git clone -b v1.8 https://vhod-v-lichnyj-kabinet.ru/stash/scm/fs/freeswitch.git  freeswitch

Далее перей­ти в дирек­то­рию с кодом: cd /usr/src/freeswitch

И запу­стить кон­фи­гу­ра­цию коман­дой ./bootstrap.sh -j

Далее перед про­дол­же­ни­ем уста­нов­ки реко­мен­ду­ет­ся рас­ком­мен­ти­ро­вать допол­ни­тель­ные моду­ли в фай­ле modules.conf

При­мер­ный вид при­ве­ден ниже на скриншоте:

alt

Далее необ­хо­ди­мо запу­стить про­дол­же­ние кон­фи­гу­ра­ции командой

./configure –enable-portable-binary –prefix=/usr –localstatedir=/var –sysconfdir=/etc –with-gnu-ld –with-openssl –enable-core-odbc-support –enable-zrtp –enable-static-v8 –disable-parallel-build-v8 

при удач­ном кон­фи­гу­ри­ро­ва­нии будет выдан спи­сок дирек­то­рий, с кото­ры­ми рабо­та­ет FreeSwitch

Далее вызы­ва­ем коман­ду make

Если выпол­не­ние make пре­ры­ва­ет­ся сооб­ще­ни­ем Neither yasm nor nasm have been found необ­хо­ди­мо уста­но­вить ути­ли­ту yasm c помо­щью git: git clone https://github.com/yasm/yasm.git && cd yasm && ./autogen.sh && make && make install

После успеш­ной уста­нов­ки  – долж­но отоб­ра­зит­ся пред­ло­же­ние выпол­нить make install.

======================================================================

Freeswitch в систе­ме мож­но пред­ста­вить схе­ма­ти­че­ски сле­ду­ю­щим образом:

alt

Здесь 10.200.16.215 – это IP адрес сете­во­го интер­фей­са ens32 сер­ве­ра Linux.

По умол­ча­нию в Freeswitch уже созда­ны номе­ра 1000 – 1019. У всех номе­ров задан стан­дарт­ный пароль реги­стра­ции 1234. И если Iptables про­пус­ка­ет SIP и RTP тра­фик, то на сер­ве­ре мож­но сра­зу заре­ги­стри­ро­вать­ся, исполь­зуя порт 5060 по умолчанию.
После реги­стра­ции на freeswitch с номе­ром 1000 с паро­лем по умол­ча­нию мож­но позво­нить на номер 5000 и услы­шать при­вет­ствие freeswitch. Здесь так же мож­но про­те­сти­ро­вать неко­то­рые воз­мож­но­сти freeswitch. При тести­ро­ва­нии нуж­но убе­дить­ся, что firewall про­пус­ка­ет тра­фик! (на вре­мя теста firewall мож­но вооб­ще отключить)

Вход в кон­соль freeswitch
# fs_cli

Выход из консоли
freeswitch@internal> control-D

Фай­лы конфигурации

Кон­фи­гу­ра­ция freeswitch лежит здесь
/usr/local/freeswitch/conf/

Струк­ту­ра ката­ло­га основ­ных кон­фи­гу­ра­ци­он­ных файлов:
autoload_configs – ката­лог загру­жа­е­мых при стар­те систе­мы модулей
dialplan – ката­лог пла­нов набо­ра. Здесь для каж­до­го пла­на набо­ра созда­ет­ся xml файл с общим опи­са­ни­ем и ката­лог с деталь­ным опи­са­ни­ем пла­нов набо­ров раз­лич­ных направ­ле­ний. Пла­ны набо­ра направ­ле­ний под­гру­жа­ют­ся по оче­ре­ди по алфа­ви­ту, поэто­му луч­ше пла­ны набо­ра начи­нать назы­вать циф­ра­ми, что бы обес­пе­чить пра­виль­ную после­до­ва­тель­ность загрузки.
    default
        00_in.xml
        01_in_supp.xml
    default.xml
directory – ката­лог с опи­са­ни­ем або­нент­ских номе­ров, кото­рые будут под­клю­чать­ся и рабо­тать через Freeswitch. Здесь есть файл с общим опи­са­ни­ем поль­зо­ва­те­лей и их групп и одно­имен­ная пап­ка, содер­жа­щая мно­же­ство фай­лов. Каж­дый файл соот­вет­ству­ет одно­му абоненту.
    default
        1000.xml – опи­са­ние або­нен­та с номе­ром 1000
        1001.xml – опи­са­ние або­нен­та с номе­ром 1001
        ….
        1019.xml
        default.xml
    default.xml
sip_profiles – ката­лог содер­жа­щий про­фи­ли сер­ве­ра Freeswitch. Глав­ные пара­мет­ры про­фи­ля – это то, IP адрес и порт, на кото­ром рабо­та­ет это SIP про­филь. В про­стей­шем слу­чае име­ет­ся один про­филь, рабо­та­ю­щий на всех IP адре­сах сер­ве­ра и пор­ту 5060. В кон­фи­гу­ра­ции по умол­ча­нию созда­но два про­фи­ля. Пер­вый про­филь Internal, рабо­та­ю­щий на пор­ту 5060, вто­рой про­филь external, рабо­та­ю­щий на пор­ту 5080. Дирек­то­рия, име­ю­щая тоже назва­ние, что и имя про­фи­ля содер­жит опи­са­ние внеш­них кана­лов сер­ве­ра Freeswitch – сущ­но­стей gateway.
    external
        example.xml
    external.xml
    internal.xml
vars.xml – файл, опре­де­ля­ю­щий ряд гло­баль­ных пере­мен­ных, кото­рые мож­но исполь­зо­вать при постро­е­нии кон­фи­гу­ра­ци­он­ных файлов.
Допу­стим необ­хо­ди­мо реа­ли­зо­вать следующую

схе­му, как пока­за­но на рисунке:

alt

И або­нен­ты и внеш­ний стык рабо­та­ют на пор­ту 5060 – поэто­му необ­хо­дим толь­ко один про­филь SIP. Осталь­ные про­фи­ли в могут быть уда­ле­ны в пап­ке sip_profiles (а луч­ше пере­име­но­ва­ны для буду­ще­го под­смат­ри­ва­ния), что бы в при загруз­ке Freeswitch их «не видел». Фай­лы мож­но пере­име­но­вать таким обра­зом, что бы они не име­ли рас­ши­ре­ние xml, а име­ли рас­ши­ре­ние напри­мер такое: xml.removed.
Необ­хо­ди­мая струк­ту­ра фай­лов будет иметь вид:

alt

Исклю­че­ние ненуж­ных про­фи­лей из кон­фи­гу­ра­ции Freeswitch:
# cd /usr/local/freeswitch/conf/sip_profiles
# mv internal-ipv6.xml internal-ipv6.xml.removed
# mv external-ipv6.xml external-ipv6.xml.removed
# mv internal.xml internal.xml.removed
# mv external.xml external.xml.removed
# mv external/example.xml external/example.xml.removed
# mv external-ipv6/example.xml external-ipv6/example.xml.removed
# mv ../directory/default/example.com.xml ../directory/default/example.com.xml.removed
# systemctl restart freeswitch
Убеж­да­ем­ся, что ни один про­филь не загружен:

fs_cli

alt

После исклю­че­ния из кон­фи­гу­ра­ции про­фи­лей по умол­ча­нию, пор­ты 5060, 5061, 5080, 5081 более не прослушиваются.
Отклю­ча­ем модуль VERTO, кото­рый раз­ре­ша­ет рабо­тать Freeswitch с теле­фо­на­ми-бра­у­зе­ра­ми по пор­там 8081, 8082, 1337 с исполь­зо­ва­ни­ем стан­дар­та WEBRTC:
# nano /usr/local/freeswitch/conf /autoload_configs/modules.conf.xml
Ком­мен­ти­ру­ем строку:
<load module=”mod_verto”/>
Долж­но получиться:
<!–<load module=”mod_verto”/> –>
Настра­и­ва­ем Freeswitch на рабо­ту с систе­мой mod_event_socket на пор­ту 8021. Это необ­хо­ди­мо для управ­ле­ния Freeswitch через API. Раз­ре­ша­ем при­ни­мать запро­сы на пор­ту 8021.
# nano /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml
Меня­ем строку
<param name=”listen-ip” value=”::”/>
на:
<param name=”listen-ip” value=”0.0.0.0″/>
Откры­ва­ем пор­ты RTP в диа­па­зоне 8000 – 32768
# nano autoload_configs/switch.conf.xml
При­во­дим блок RTP port range  к виду
<!– RTP port range –>
<param name=”rtp-start-port” value=”8000″/>
<param name=”rtp-end-port” value=”32768″/>
Пере­за­гру­жа­ем сервис:
# systemctl restart freeswitch.service
Про­ве­ря­ем пор­ты, кото­рые слу­ша­ет Freeswitch:
# netstat -ltupn | grep freesw
tcp    0  0 0.0.0.0:8021  0.0.0.0:*   LISTEN  16208/freeswitch

Для того, что бы Freeswitch мог рабо­тать по сети вно­сим мини­маль­ные прав­ки в iptables. Напри­мер, так:
# nano /etc/sysconfig/iptables
-A INPUT -p udp -m udp –dport 5060 -j ACCEPT
-A INPUT -p udp -m udp –dport 8000:32768 -j ACCEPT
# systemctl restart iptables.service
Здесь мы откры­ва­ем всем порт 5060 для при­е­ма SIP сооб­ще­ний и пор­ты 8000 – 32768 для при­е­ма RTP трафика.

Нача­ло конфигурирования

Теперь мож­но при­сту­пить к кон­фи­гу­ри­ро­ва­нию соб­ствен­но­го про­фи­ля, кана­лов и настрой­ке систе­мы Freeswitch
При кон­фи­гу­ри­ро­ва­нии систе­мы после добав­ле­ния новых фай­лов кон­фи­гу­ра­ции необ­хо­ди­мо выполнять:
# chown -R freeswitch:freeswitch /usr/local/freeswitch/conf/
# chmod -R 770 /usr/local/freeswitch/conf/
# fs_cli
> reloadxml
или просто
# fs_cli -x “reloadxml”
При гло­баль­ный изме­не­ния (не про­сто добав­ле­нии ново­го або­нен­та), нуж­но рестар­то­вать весь Freeswitch командой:
# systemctl restart freeswitch

Сме­на паро­ля кли­ен­там по умол­ча­нию для всех кли­ен­тов freeswitch выпол­ня­ет­ся так:
# cd /usr/local/freeswitch/conf
# nano vars.xml
Меня­ем пароль 1234 в строке
<X-PRE-PROCESS cmd=”set” data=”default_password=1234″/>
Напри­мер на что-то более суровое:
<X-PRE-PROCESS cmd=”set” data=”default_password=12345678″/>
Затем при­ме­ня­ем изме­не­ния в кон­со­ли fs выполняем
> reloadxml
> sofia profile restart all

Запись собы­тий (логов) freeswitch в файл:
Под­го­тав­ли­ва­ем лог-файл:
# touch /var/log/freeswitch.log
# chown freeswitch:freeswitch /var/log/freeswitch.log
Пра­вим кон­фи­гу­ра­цию freeswitch:
# nano /usr/local/freeswitch/conf/autoload_configs/logfile.conf.xml
Ищем строку
<!–<param name=”logfile” value=”/var/log/freeswitch.log”/>–>
Для запи­си лог в файл стро­ку нуж­но рас­ком­мен­ти­ро­вать, а для это­го убрать xml ком­мен­та­рии <!– и –>. Долж­но получиться:
<param name=”logfile” value=”/var/log/freeswitch.log”/>
Рас­ком­мен­ти­ро­вать и изме­нить стро­ку с пара­мет­ром maximum-rotate
<param name=”maximum-rotate” value=”5″/>
И потом вот эту строч­ку, опре­де­ля­ю­щую мак­си­маль­ный раз­мер файла::
<param name=”rollover” value=”10485760″/>
Пере­за­пус­ка­ем freeswitch:
# systemctl restart freeswitch.service

Ино­гда лог-фай­лы freeswitch пере­пол­ня­ют­ся и Freeswitch не может нор­маль­но рабо­тать. При этом в кон­со­ли fs_cli посто­ян­но сыпят­ся логи:
2022-05-21 19:00:25.931136 [NOTICE] mod_logfile.c:213 New log started.
2022-05-21 19:00:25.931136 [NOTICE] mod_logfile.c:213 New log started.

В этом слу­чае необ­хо­ди­мо оста­но­вить freeswitch
# systemctl stop freeswitch.service

Затем уда­лить файл логов и вновь создать его
# rm -f /var/log/freeswitch.log
# touch /var/log/freeswitch.log
# chown freeswitch:freeswitch /var/log/freeswitch.log

Затем запу­стить Freeswitch заново:
# systemctl restart freeswitch.service

Уста­нов­ка рус­ских зву­ков в freeswitch
# cd /usr/local/freeswitch/conf
# nano vars.xml

Встав­ля­ем строку
<X-PRE-PROCESS cmd=”set” data=”default_language=ru”/>
В кон­со­ли fs выполняем
> reloadxml

Созда­ние ново­го профиля:

# /usr/local/freeswitch/conf
# touch sip_profiles/supportsvttk.xml
# nano sip_profiles/supportsvttk.xml
Содер­жи­мое файла

[codesyntax lang=”xml” blockstate=”collapsed”]

[/codesyntax]

Созда­ние пап­ки для фай­лов с опи­са­ни­ем кана­лов – шлю­зов – gateway-ев
# mkdir sip_profiles/supportsvttk
Добав­ля­ем пра­ва на создан­ные фай­лы и пап­ки и перезагружаемся:
# systemctl restart freeswitch
Про­ве­ря­ем в кон­со­ли Freeswitch и убеж­да­ем­ся, что наш про­филь загрузился:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Про­ве­ря­ем пор­ты, слу­ша­ю­щие Freeswitch:

После изме­не­ния пара­мет­ров про­фи­ля, его пере­за­груз­ку мож­но выпол­нить так:
# fs_cli -x “sofia profile supportsvttk killgw samara-ast1” && sleep 30 && fs_cli -x “sofia profile supportsvttk rescan”

Созда­ние опи­са­ния абонентов

Созда­дим трех або­нен­тов – 11, 12, 50
# cd /usr/local/freeswitch/conf/directory
Созда­ем общий файл опи­са­ния абонентов
# touch supportsvttk.xml
Содер­жи­мое файла:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Домен sip.svttk.ru дол­жен быть про­пи­сан в DNS. В нашем слу­чае на Ip 10.200.16.215
Далее созда­ем пап­ку, где для каж­до­го або­нен­та будет созда­вать­ся отдель­ный файл с его описанием:
# mkdir supportsvttk
Нако­нец фай­лы або­нен­тов созда­ем по шаблону:
# touch supportsvttk/11.xml
# nano supportsvttk/11.xml
Содер­жи­мое файла:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Ана­ло­гич­но созда­ют­ся и дру­гие фай­лы 12.xml и 50.xml
Про­бу­ем заре­ги­стри­ро­вать­ся на сер­ве­ре 10.200.16.215 на пор­ту 5060 с логи­ном 11, 12 или 50 и паро­лем 12345xyz.
Настрой­ки ZoyPer:

alt

Реги­стра­ция про­шла успешно.

alt

ри реги­стра­ции в кон­со­ли будет писаться:
2022-05-15 18:27:39.192559 [WARNING] sofia_reg.c:1775 SIP auth challenge (REGISTER) on sofia profile ‘supportsvttk’ for [[email protected]] from ip 10.10.69.141
2022-05-15 18:27:39.212547 [DEBUG] sofia_reg.c:3002 IP [10.10.69.141] passed ACL check [10.10.69.0/24,192.168.1.0/24]

Про­вер­ка ста­ту­са реги­стра­ции абонентов
Для всех абонентов:
> sofia status profile supportsvttk reg
Для кон­крет­но­го абонента
> sofia status profile supportsvttk reg 11
Или для кон­крет­но­го або­нен­та мож­но посмот­реть и так
> sofia status profile supportsvttk reg [email protected]

Обно­вить реги­стра­цию кон­крет­но­го абонента
> sofia profile supportsvttk flush_inbound_reg [email protected]  reboot
Если не напи­сать, кого сбра­сы­ва­ем, то обну­лять­ся все регистрации.
> sofia profile supportsvttk flush_inbound_reg  reboot

Диа­лог SUBSCRIBE и NOTIFY.

В опи­сан­ной настрой­ке не исполь­зу­ет­ся диа­лог SUBSCRIBE и NOTIFY. Этот диа­лог раз­ре­ша­ет поль­зо­ва­те­лю под­пи­сать­ся на собы­тия сер­ве­ра и полу­чать пери­о­ди­че­ски уве­дом­ле­ния о его состо­я­нии. Вклю­че­ние это­го диа­ло­га выпол­ня­ет­ся на
SIP кли­ен­те. В ZoyPer «Subscribe for MWI»=«both»
– На сер­ве­ре freeswitch в sip про­фи­ле пара­метр <param name=”manage-presence” value=”true”/>
Диа­лог SUBSCRIBE и NOTIFY выгля­дит так, как пока­за­но ниже. При этом про­вер­ка состо­я­ния кли­ен­та запро­са­ми OPTION не производиться.

alt

Дру­гие вари­ан­ты диа­ло­га, при выклю­чен­ной воз­мож­но­сти на Freeswitch и при выклю­чен­ной воз­мож­но­сти на сто­роне клиента:

altalt

В послед­нем слу­чае Freeswitch в теку­щей кон­фи­гу­ра­ции будет про­ве­рять состо­я­ние кли­ен­та запро­са­ми OPTION.

Созда­ние внут­рен­не­го пла­на набора

Созда­дим базо­вую кон­фи­гу­ра­цию dialplan и дадим воз­мож­ность або­нен­там зво­нить друг другу.
# cd /usr/local/freeswitch/conf
# touch dialplan/supportsvttk.xml
# nano dialplan/supportsvttk.xml
Содер­жи­мое файла:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Этот файл опи­сы­ва­ет пра­ви­ла обра­бот­ки и предот­вра­ще­ния петель.
Далее созда­ем пап­ку, где будут хра­нить­ся пра­ви­ла набора:
# mkdir dialplan/supportsvttk
# touch dialplan/supportsvttk/01_internal.xml
# nano dialplan/supportsvttk/01_internal.xml
Содер­жи­мое файла:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Меня­ем пра­ва на создан­ные фай­лы и рестартуемся.
Теперь або­нен­ты 11,12 и 50 могут позво­нить друг дру­гу по корот­ким номе­рам. Вызы­ва­е­мый або­нент уви­дит в АОН корот­кий номер вызы­ва­ю­ще­го абонента.

Исхо­дя­щая и вхо­дя­щая связь. Asterisk.
Связь с внеш­ним миром (с ТфОП) будет обес­пе­чи­вать­ся через сер­вер Asterisk и стан­цию Si3000 ISKRATEL.
Соеди­не­ние с Asterisk про­ис­хо­дит с помо­щью номе­ра 2057553

alt

Вхо­дя­щие вызо­вы на 2057553 направ­ля­ют­ся на внут­рен­ний номер 12.
Кон­фи­гу­ра­ция Asterisk:
Файл /etc/asterisk/extensions.conf:
[test-2057553]
exten => _XXXXXXX,1,Dial(${OUTTRUNKSI}/${EXTEN},120,t)
exten => _XXXXXXX,n,Hangup()
exten => _8XXXXXXXXXX,1,Dial(${OUTTRUNKSI}/${EXTEN},120,t)
exten => _8XXXXXXXXXX,n,Hangup()
;Во вхо­дя­щем кон­тек­сте со сто­ро­ны Si3000:
exten => 2057553,1,Dial(SIP/2057553gw/${EXTEN},120,t)
exten => 2057553,n,Hangup()
Файл /etc/asterisk/extensions.conf:
[2057553gw] ; тест Freeswitch
type=peer
host=10.200.16.215
port=5060
context=test-2057553
dtmfmode=rfc2833
deny=0.0.0.0/0.0.0.0
permit=10.200.16.215/255.255.255.255
insecure=port,invite
qualify=yes
disallow=all
allow=ulaw
allow=alaw

Созда­ем файл кон­фи­гу­ра­ции шлю­за на Freeswitch на номер 2057553.
# touch sip_profiles/supportsvttk/gw2057553.xml
# nano sip_profiles/supportsvttk/gw2057553.xml
Содер­жи­мое фай­ла опи­са­ние кана­лов – gateways:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

Для того что бы Freeswitch уста­но­вил соеди­не­ние с IP уда­лен­но­го сер­ве­ра, как вид­но доста­точ­но ука­зать этот IP адрес в пере­мен­ной realm. Это воз­мож­но пото­му, что часть пере­мен­ных, при их отсут­ствии заме­ня­ет­ся выше­сто­я­щи­ми. На рисун­ке пока­за­на зави­си­мость зна­че­ний неко­то­рых пара­мет­ров друг от дру­га в опи­са­нии gateway:

alt

Пара­метр gateway name – самый глав­ный, его обя­за­тель­но нуж­но ука­зы­вать. Пара­метр realm, если не ука­за­но дру­гое, при­ни­ма­ет зна­че­ние gateway name. Пара­метр from-domain, если не ука­за­но дру­гое, при­ни­ма­ет зна­че­ние realm и т.д.

Для того что бы раз­ре­шить Asterisk-у уста­нав­ли­вать соеди­не­ния с Freeswitch без реги­стра­ции необ­хо­ди­мо на Freeswitch создать спи­сок досту­па – ACL, имя кото­ро­го будет ука­за­но в пере­мен­ной apply-inbound-acl фай­ла sip-про­фи­ля sip_profiles/supportsvttk.xml. В создан­ном ранее sip-про­фи­ле имя это­го спис­ка досту­па alcgw.
<param name=”apply-inbound-acl” value=”alcgw”/>
Спи­сок досту­па alcgw созда­ет­ся в фай­ле autoload_configs/acl.conf.xml
# nano autoload_configs/acl.conf.xml
Добав­ля­ем меж­ду тега­ми  <network-lists> и  </network-lists> блок:
<list name=”alcgw” default=”deny”>
<node type=”allow” cidr=”10.200.104.12/32″/>
</list>
При попа­да­нии вхо­дя­ще­го вызо­ва в ACL авто­ри­за­ция запра­ши­вать­ся не будет. Это спра­вед­ли­во и для фай­лов  из sip_profiles и для фай­лов из directory.
При­ме­ня­ем к создан­ным фай­лам пра­ва поль­зо­ва­те­ля freeswitch и рестар­ту­ем сер­вис Freeswitch.
# chown -R freeswitch:freeswitch /usr/local/freeswitch/conf/
# chmod -R 770 /usr/local/freeswitch/conf/
# systemctl restart freeswitch.service
Про­ве­ря­ем состо­я­ние создан­но­го канала:
Ста­тус на Asterisk:

[codesyntax lang=”php” blockstate=”collapsed”]

[/codesyntax]

После изме­не­ния пара­мет­ров опи­са­ния шлю­за (фай­ла gw2057553.xml), его рестарт мож­но выпол­нить так:
# fs_cli -x “sofia profile supptechttk stop” && sleep 30 && fs_cli -x “sofia profile supptechttk start”

Созда­ем фай­лы опи­са­ния диал­пла­нов вхо­дя­щей и исхо­дя­щей связи:
# touch dialplan/supportsvttk/10_in.xml
# touch dialplan/supportsvttk/20_out.xml
# nano dialplan/supportsvttk/10_in.xml
Содер­жи­мое файла:

<include>
<extension name=”call_in”>
<condition field=”destination_number” expression=”^(2057553)$”>
<!– Звоним –>
<action application=”bridge” data=”user/[email protected]”/>
<!– Кла­дем трубку –>
<action application=”hangup”/>
</condition>
</extension>
</include>
# nano dialplan/supportsvttk/20_out.xml
Содер­жи­мое фай­ла, раз­ре­ша­ю­ще­го зво­нить на 7ми знач­ные номера:
<include>
<extension name=”call_out”>
<condition field=”destination_number” expression=”^([2-9][0-9]{6})$”>
<action application=”set” data=”hangup_after_bridge=true”/>
<action application=”set” data=”continue_on_fail=true”/>
<!–Выстав­ля­ем номер и имя у вызы­ва­ю­ще­го або­нен­та через дан­ный шлюз–>
<action application=”set” data=”effective_caller_id_number=2057553″/>
<action application=”set” data=”effective_caller_id_name=2057553″/>
<action application=”bridge” data=”sofia/gateway/samara-ast1/$1″/>
<action application=”hangup”/>
</condition>
</extension>
</include>
Теперь мож­но зво­нить в город по ТфОП и при­ни­мать вхо­дя­щие вызо­вы на номер 2057553 або­нен­том 12. При выхо­де в город в каче­стве АОН будет под­став­лять­ся номер 2057553.
При уста­нов­ле­нии вызо­ва от або­нен­та, каж­дый раз будет про­хо­дить про­це­ду­ра авто­ри­за­ции або­нен­та. При этом на Freeswitch для кли­ен­та будут ини­ци­ро­вать­ся пере­мен­ные из про­фи­ля поль­зо­ва­те­ля, кото­рым мож­но в послед­ствии мани­пу­ли­ро­вать.  Нор­маль­ная про­це­ду­ра авто­ри­за­ции при уста­нов­ле­нии вызова:

alt

Для трас­си­ров­ки вызо­вов во Freeswitch суще­ству­ют коман­ды, вклю­ча­ю­щие трас­си­ров­ки на профиле:
Вклю­че­ние / выклю­че­ние трас­си­ров­ки в кон­со­ли Freeswitch:
> sofia profile supportsvttk siptrace on
> sofia profile supportsvttk siptrace off
При вклю­чен­ной трас­си­ров­ки в кон­соль будут вва­лить­ся SIP сооб­ще­ния вме­сте с основ­ны­ми событиями:

alt

Изме­нить сте­пень дета­ли­за­ции логов кон­со­ли мож­но так:
> console loglevel 7 (режим DEBUG)
> console loglevel 6 (по умол­ча­нию INFO)
> console loglevel – пока­жет теку­щий режим консоли
Уров­ни логи­ро­ва­ния могут быть такие:
0 “CONSOLE“,
1 “ALERT“,
2 “CRIT“,
3 “ERR“,
4 “WARNING“,
5 “NOTICE“,
6 “INFO“,
7 “DEBUG

Исхо­дя­щая и вхо­дя­щая связь. Si3000.

# touch sip_profiles/supportsvttk/gw9938103.xml
# nano sip_profiles/supportsvttk/gw9938103.xml
Содер­жи­мое файла:
<gateway name=”samara-si3000″>
<param name=”username” value=”xxx”/><!–Можно ука­зать любое имя, глав­ное, что бы оно было–>
<param name=”password” value=”yyy”/><!–Можно ука­зать любой пароль, глав­ное, что бы он был–>
<param name=”register” value=”false”/>
<param name=”realm” value=”10.200.101.11″/>
<param name=”from-domain” value=”sip.svttk.ru”/>
<!– допол­ни­тель­ные пара­мет­ры, если на уда­лен­ном сер­ве­ре нуж­но регистрироваться –>
<!– При это нуж­но выста­вить  name=”register” value=”true” –>
<!–<param name=”proxy” value=”10.200.101.11″/>–>
<!–<param name=”register-proxy” value=”10.200.101.11″/>–>
<!–<param name=”expire-seconds” value=”3600″/>–> <!–Пери­од регистрации–>
<!–<param name=”retry-seconds” value=”30″/>–> <!–Коли­че­ство сек ожи­да­ния перед повтор­ной реги­стра­ци­ей, если реги­стра­ция вдруг была неудачной–>
<!–<param name=”ping” value=”25″/>–> <!–ОТправ­лять ping каж­дые 25 сек. При неот­ве­те счи­та­ет шлюз ава­рий­ным и реги­стра­цию прерываем –>
<param name=”context” value=”supportsvttk”/><!– Кон­текст для вхо­дя­щих вызовов–>
<param name=”caller-id-in-from” value=”true”/> <!– Исполь­зо­вать АОН вхо­дя­ще­го вызо­ва в поле from исх вызо­вов через этот шлюз–>
<!–<param name=”contact-params” value=”tport=tcp”/>–> <!–extra sip params to send in the contact–>
</gateway>
Добав­ля­ем марш­рут для вхо­дя­щей связи:
# nano dialplan/supportsvttk/10_in.xml
При­во­дим файл к виду:
<include>
<extension name=”call_in”>
<condition field=”destination_number” expression=”^(2057553)$”>
<!– Звоним –>
<action application=”bridge” data=”user/[email protected]”/>
<!– Кла­дем трубку –>
<action application=”hangup”/>
</condition>
</extension>
<extension name=”call_in_si3000″>
<condition field=”destination_number” expression=”^(9938103)$”>
<!– Звоним –>
<action application=”bridge” data=”user/[email protected]”/>
<!– Кла­дем трубку –>
<action application=”hangup”/>
</condition>
</extension>
</include>
Раз­ре­ша­ем Si3000 соеди­нять­ся с Freeswitch без регистрации:
# nano autoload_configs/acl.conf.xml
Меня­ем ACL – alcgw. Добав­ля­ем туда IP 10.200.101.11.
<list name=”alcgw” default=”deny”>
<node type=”allow” cidr=”10.200.104.12/32″/>
<node type=”allow” cidr=”10.200.101.11/32″/>
</list>
# chown -R freeswitch:freeswitch /usr/local/freeswitch/conf/
# chmod -R 770 /usr/local/freeswitch/conf/
# systemctl restart freeswitch.service
При рабо­те со стан­ци­ей Si3000 нуж­но иметь вви­ду, что стан­ция SI3000 для обме­на сиг­наль­ны­ми сооб­ще­ни­я­ми исполь­зу­ет­ся один ip адрес (в нашем слу­чае – 10.200.101.11), а для обме­на RTP сооб­ще­ни­я­ми – дру­гие IP адре­са (в нашем слу­чае – 10.200.101.13). IP адрес 10.200.101.13 не нуж­но добав­лять в  ACL alcgw.
В опи­сан­ной кон­фи­гу­ра­ции RTP сооб­ще­ния будут про­хо­дить через Freeswitch. Исполь­зуя опцию bypass_media мож­но раз­ре­шить обмен сооб­ще­ни­я­ми RTP меж­ду конеч­ны­ми точ­ка­ми напрямую.
Диа­грам­ма рабо­ты Freswitch с Si3000 при вхо­дя­щем вызо­ве будет следующей:

alt

Похожее:  Личный кабинет Приват24: вход в интернет-банкинг

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *