Skype to SIP Gateway своими руками

Subtitle

Alexcr2

Шлюз на базе Asterisk — Skype for Asterisk и alix.



Сделать такой шлюз я решил когда понял что SFA можно будет купить только до 26 июля и зарегистрировать его нужно тоже до 26 июля, Лицензия SFA привязывается как минимум к мак адресу железа на котором он установлен и для этого я взял ALIX и Voyage Linux.

Задачи:
1) Обеспечить входящий вызов из сети Skype в SIP.
2) Обеспечить исходящие вызовы из SIP сеть в Skype.

Для начала купил тут собранную коробку на базе плат ALIX с предустановленной Askozia. Поскольку Askozia никак не дружит с SFA снес ее сразу :). Выбор пал на дистрибутив Voyage который прекрасно работает на ALIX-ах и устанавливается за 5 минут на любую CF карту.
Установка Voyage:

Скачаем архив Voyage, распаковываем и выполняем скрипт для установки его на CF карту.
cd /tmp
wget www.voyage.hk/download/voyage/voyage-0.7.5.tar.bz2
tar -axf voyage-one-0.7.5.tar.bz2
cd voyage-one-0.7.5
./usr/local/sbin/voyage.update


далее нужно в меню установки выбрать параметры:
Configuration details:
----------------------

Distribution directory: /home/alexcr/Voyage-one.ru/voyage-one-0.7.5

Disk/Flash Device: /dev/sdb
Installation Partition: /dev/sdb1
Create Partition and FS: yes
Bootstrap Partition: /dev/sdb1

Will be mounted on: /mnt/cf

Target system profile: ALIX
Target console: serial
Target baud rate: 38400

Bootstrap installer: grub
Bootstrap partition: /dev/sdb1

OK to continue (y/n)?


 
Установка пакетов:

Для того чтобы собрать asterisk И SFA нужно установить требуемые пакеты.
ssh root@192.168.0.100 ###пароль voyage###

remountrw ###монтируем файловую систему Read&Write###
apt-get update
apt-get install mc aptitude vim -y
aptitude install make asterisk-1.8 libncurses5-dev build-essential libstdc++6-4.4-dev gcc glibc-2.11-1 -y

 
Установка Asterisk & SFA

cd /usr/src/
wget downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.4.4.tar.gz
wget downloads.digium.com/pub/telephony/skypeforasterisk/asterisk-1.8.0/x86-32/skypeforasterisk-1.8.0_1.1.4-x86_32.tar.gz
wget downloads.digium.com/pub/register/x86-32/register
tar axvf skypeforasterisk-1.8.0_1.1.4-x86_32.tar.gz
tar axvf asterisk-1.8.4.4.tar.gz
cd asterisk-1.8.4.4/
./configure --disable-xmldoc
make menuselect
make && make install && make samples
cd ../skypeforasterisk-1.8.0_1.1.4-x86_32/
make && make install
cp chan_skype.conf.sample /etc/asterisk/chan_skype.conf

 
Запуск Asterisk и SFA

Запускаем asterisk и проверяем есть ли модуль SFA в системе.
/etc/init.d/asterisk restart
asterisk -rvvvv
CLI> skype show version
Skype For Asterisk Components:
Channel Driver: 1.8.0_1.1.4
Library: UNKNOWN_and_probably_unsupported


 
Регистрация SFA

Для работы SFA нужна купить ключ активации на нужное вам количество каналов, стоимость на один Skype канал составляет $66 его купил за 5 минут тут. Активация ключа делается с утилитой register.
chmod 777 register
./register
1 - Digium Products
7 - Skype For Asterisk
Please enter your Key-ID: S4A-LM2WQTTGZGZG

Do you accept this licensing agreement (y/n)? y
First Name: Last Name: Company: Address 1: Address 2: City: State: Postal Code: Country: Phone: E-Mail:


Проверим есть ли лицензия в системе

/etc/init.d/asterisk restart
asterisk -rvvv

voyage*CLI> skype show licenses
Skype For Asterisk Licensing Information
========================================
Total licensed channels: 1

Licenses Found:
File: S4A-LM2WQTTGZGZG.lic -- Key: S4A-LM2WQTTGZGZG -- Expires: 2031-06-29 -- Host-ID: e4:07:e8:a8:d1:99:3b:f2:45:ea:7e:20:b8:4f:30:bd:7c:7b:5b:1c -- Channels: 1 (OK)


 
Настройка SIP и Skype аккаунта

Добавим SIP аккаунт в sip.conf
[sip-skype](!)
type=friend
context=from-sip
host=dynamic
nat=yes
qualify=yes
canreinvite=no
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=alaw
callwaiting=yes

[101](sip-skype)
username=101
secret=mypass

[102](sip-skype)
username=102
secret=mypass


Настроим диалплан для звонков из сети Skype в SIP extensions.conf
[from-skype-user1]
exten => s,1,NOOP(From Skype ${CALLERID} to ${EXTEN})
exten => s,n,Dial(SIP/101,60,r)
exten => s,n,Hangup

[from-skype-user2]
exten => _X.,1,NOOP(From Skype ${CALLERID} to ${EXTEN})
exten => _X.,n,Dial(SIP/102,60,r)
exten => _X.,n,Hangup


Настроим диалплан для звонков на skype аккаунты и для внешних звонков
[from-sip]
exten => 201,1,NOOP(From SIP ${CALLERID} to ${EXTEN})
exten => 201,2,Dial(SKYPE/alexcr.telecom,60,Tr)
exten => 201,n,Hangup

exten => 202,1,Dial(SKYPE/skype-contact,60,Tr)
exten => 203,1,Dial(SKYPE/skype-contact2,60,Tr)
exten => 202,1,Dial(SKYPE/skype-contact3,60,Tr)

exten => _00X.,1,NOOP(Dial to Skype PSTN ${CALLERID} to ${EXTEN})
exten => _00X.,2,Dial(SKYPE/${EXTEN},60,Tr)
exten => _00X.,n,Hangup



Настроим chan_skype.conf
[skype-user-1]
secret=skype-pass
context=from-skype-user1
exten=s
disallow=all
allow=ulaw
direction=both
auth_policy=accept
buddy_autoadd=true
autoreply = Этот пользователь не может получать текстовые сообщения, пожалуйста отправьте ваше сообщения на емайл I@mail.ru

[user2]
secret=userpass2
context=from-skype-user2
exten=s
disallow=all
allow=ulaw
direction=both
auth_policy=accept
autoreply = Этот пользователь не может получать текстовые сообщения, пожалуйста отправьте ваше сообщения на емайл I@gmail.com



Проверяем статус Skype аккаунтов в asteriske
voyage*CLI> skype show users
Skype Users
user2: Logged In



Проверяем звонки на Skype
-- Executing [201@from-sip:1] NoOp("SIP/101-00000004", "From SIP to 201") in new stack
-- Executing [201@from-sip:2] Dial("SIP/101-00000004", "SKYPE/alexcr-telcom,60,Tr") in new stack
-- Called alexcr-telcom
-- Skype/user2-0854f990 is ringing
-- Skype/user2-0854f990 answered SIP/101-00000004
== Spawn extension (from-sip, 201, 2) exited non-zero on 'SIP/101-00000004'



Проверяем звонки на SIP
-- Executing [s@from-skype-user1:1] NoOp("Skype/user1-085004a8", "From Skype to s") in new stack
-- Executing [s@from-skype-user1:2] Dial("Skype/user1-085004a8", "SIP/101,60,r") in new stack
== Using SIP RTP CoS mark 5
-- Called 101
-- SIP/101-00000005 is ringing
-- SIP/101-00000005 answered Skype/user1-085004a8
== Spawn extension (from-skype-user1, s, 2) exited non-zero on 'Skype/user1-085004a8'



Дополнительная документация:
Как зарегистрировать skype аккаунт для SFA
README-voyage
README-SFA
Digium-register