The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Создание Skype - SIP гейта (sip voip skype asterisk)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: sip, voip, skype, asterisk,  (найти похожие документы)
From: Alex Samorukov <samm@os2.kiev.ua.> Date: Mon, 31 Mar 2009 14:31:37 +0000 (UTC) Subject: Создание Skype - SIP гейта Оригинал: samm.kiev.ua/articles:skype Задача Одним из наиболее популярных приложений для голосового общения в сети является Skype. Для этого есть и объективные предпосылки - достаточно развитые возможности клиента и протокола, неплохая работа в условиях NAT (и даже возможность работы через прокси), интеграция (коммерческая) с телефонными сетями, мультиплатформенный клиент. Основной недостаток - закрытость протокола и клиента, сложность интеграции с другими chat/voice сервисами, замкнутость технологии на одной компании. Тем не менее - реалии таковы что на сегодняшний день это наиболее популярное средство для общения и, на мой взгляд, альтернатив, особенно открытых, немного. В этой заметке я решил описать создание гейта skype <-> SIP с использованием IP АТС Asterisk. Данное решение позволит преобразовать skype трафик в стандартный и открытый SIP, с которым потом уже средствами Asterisk (и не только) можно делать все что угодно. Выбор ПО Редкий тролль не любит рассказов об ужасах, скрывающихся в BLOB`ах закрытых продуктов (особенно забавна история когда обнаружили чтение skype`ом /etc/passwd и стали трубить о том что скайп "ворует пароли"), которые чаще всего не подкреплены какими либо доказательствами. Тем не менее - в данной задаче, на мой взгляд, и в самом деле удобнее создать изолированное окружения, как по соображениям безопасности так и с точки зрения удобства поддержки. В качестве виртуальной машины я выбрал linux-kvm (также успешно протестирована работа в VirtualBox), в качестве гостевой среды - debian 5 (который как раз только что вышел). Выбор основан исключительно на личных предпочтениях, думаю что должно работать на любом другом дистрибутиве, и скорее всего, даже на BSD (в линуксяторе). В дальнейшем я планирую перенести гейт на XEN, так что в данном случае нормальная поддержка в debian работы в domU тоже плюс. Единственным найденным мной открытым решением для *nix стал Skypiax, так что тут и выбирать не пришлось. Принцип работы Как уже упоминалось - скайп закрытое приложение, и его протокол достаточно неплохо защищен от сторонних разработчиков. Так что единственным доступным клиентом протокола в настоящий момент является сам skype. Но для интеграции своего ПО со сторонними разработчиками (как железа, так и ПО) skype клиент позволяет работать с ним используя документированное API. В linux версии для транспорта используется DBUS и X11. API достаточно обширно, но тем не менее о полноценном embed клиенте говорить не приходится, так что нам все равно потребуется X11 и запущенный клиент. Skypiax позволяет Asterisk общаться с запущенными skype клиентами и совершать или принимать skype звонки. Установка ПО Для начала установим ОС. Для нашей задачи будет вполне достаточно диска на 2Gb (думаю, что хватило бы и сильно меньшего но это потребовало бы пересборки пакетов без ненужных зависимостей). Ставить дистрибутив x86_64 лишено смысла, так как клиент все равно i386, да и памяти меньше израсходуем. qemu-img create ~/images/skype 2G kvm -hda ~/images/skype -cdrom ~/dists/debian-500-i386-CD-1.iso Выбираем вариант установки без десктоп окружения и прочего непотребства, все что нужно мы позже установим из пакетов. После того как установка завершена - перезагружаем гостя и устанавливаем нужные пакеты: Asterisk, заголовки и куча преимущественно ненужных нам зависимостей skype:~# apt-get install asterisk-dev Skype client skype:~# wget http://skype.com/go/getskype-linux-deb skype:~# dpkg -i skype-debian_2.0.0.71-1_i386.deb skype:~# apt-get -f install skype:~# dpkg -i skype-debian_2.0.0.71-1_i386.deb Subversion (потребуется для скачивания исходников skypiax) skype:~# apt-get install subversion OpenSSH server (для управления в будущем и первоначальной настройки Skype) skype:~# apt-get install openssh-server Заголовки Xlib потребуются нам позже skype:~# apt-get install libx11-dev Теперь загрузим и скомпилируем skypiax: skype:~# svn co http://www.celliax.org:8081/svn/celliax/trunk celliax skype:~# cd celliax/skypiax_stuff/build/ skype:~/celliax/skypiax_stuff/build# vi Makefile Заменяем путь AST_INCLUDE_DIR=/home/user/devel/asterisk-1.4.23.1/include на AST_INCLUDE_DIR=/usr/include, компилируем и копируем результат в нужную нам папку. skype:~/celliax/skypiax_stuff/build# make skype:~/celliax/skypiax_stuff/build# cp chan_skypiax.so /usr/lib/asterisk/modules/ && cp skypiax.conf /etc/asterisk/ На этом установка завершена, можно переходить к более увлекательному этапу настройки. Настраиваем skype клиента Для запуска skype я использован возможность X11 forwarding openssh сервера и клиента, присоединившись с десктоп машины на skype сервер с параметром -X: ssh -X root@skypeserver.local Для своей работы скайп захочет звуковую карту, для подобных целей в alsa предусмотрен драйвер snd-dummy, загрузим его: modprobe snd-dummy После этого запускаем в терминале скайп, и если все работает правильно - он должен показать лицензионное соглашение и свой интерфейс на рабочем столе. Скайп позволяет использовать одно и тоже подключение из нескольких мест (чем, кстати, выгодно отличается от SIP), но тем не менее я рекомендую завести отдельную запись, как минимум для удобства тестирования. Запустив скайп соглашаемся с лицензией и вводим данные учетной записи. Если все настроено правильно - skype должен зарегистрироваться в сети. Перейдя в настройки отключаем уведомления (Notifications -> Enable Event). Теперь самое важное - в пункте Sound Devices указываем устройство Dummy (hw:Dummy,0). В меню Advanced стоит отключить проверку обновлений, а в меню Video Devices - поддержку видео. После этого skype клиент должен без проблем совершать или принимать звонки, правда слышно ничего не будет, так как карта виртуальная. Не закрываем клиент (он нам скоро потребуется) и переходим к настройке Asterisk. Настраиваем Asterisk 1. Подключаемся к серверу с включенным X11 forwarding Desktop:~$ ssh -X root@skypeserver.local 2. Для того, чтобы астериск смог взаимодействовать с запущенным skype клиентом нам потребуется значение переменной DISPLAY skype:~# echo $DISPLAY В моем случае это localhost:11.0 3. Параметры skype транков (их может много) задаются в /etc/asterisk/skypiax.conf. По умолчанию там уже заданы 2 транка, закомментируем их. Параметры для моего транка выглядят так: [skypeclient] language=en ; default context=default ; incoming context extension=600 ; forward calls to default asterisk echo test skype=yes ; legacy setting X11_display=localhost:11.0 ; value from $DISPLAY tcp_cli_port=11234 ; 2 random pots tcp_srv_port=11235 ; skype_user=skypet123 ; skype nickname playback_boost=0 ; volume boost for playback capture_boost=0 ; ... and recording В данной конфигурации я указал X11_display из пункта 2, для того, чтобы asterisk смог соединиться с запущенным клиентом. Extension=600 обозночает что входящие звонки в будут перенаправлены в extension 600, который по умолчанию (см. extensions.conf) перенаправляется на эхо тест задержки. Это позволит нам убедиться что все работает правильно и заодно определить на слух задержу сигнала. 4. Запускаем астериск в режиме консоли skype:~# /etc/init.d/asterisk stop; asterisk -c -vvv -ddd Если все настроено верно - скайп должен показать уведомление о том, что другая программа пытается к нему подключиться. Обязательно отмечаем галку "Remember this selection" и разрешаем подключение. После этого пробуем позвонить на эту скайп запись. Если все настроено верно - вы должны слышать эхо-тест астериска. Кстати, распознавание DTMF прекрасно работает, что позволяет создавать IVR на базе данного решения. Запуск скайп в виртуальном X сервере Для того, чтобы skype работал в виртуальном X11 окружении установим xvfb - Virtual Framebuffer 'fake' X server. skype:~# apt-get install xvfb Данный сервер позволяет работать X11 приложением локально, не требуя видео карты и потребляя сравнительно немного ресурсов. Для запуска скайпа создадим скрипт skypestart.sh: #!/bin/sh # loading sound driver /sbin/modprobe snd_dummy # setting DISPLAY export DISPLAY=:1 # starting virtual framebuffer X-Server nohup /usr/bin/Xvfb ${DISPLAY} -screen scrn 300x600x8 >/dev/null & echo <skypenick> <password>|/usr/bin/skype --pipelogin & # restarting asterisk sleep 5 /etc/init.d/asterisk restart заменив <skypenick> <password> на данные skype записи. Этот скрипт загружает snd_dummy, запускает X-server и загружает скайп. Перезагрузка астериска требуется для того, чтобы он установил связь с клиентом. Скрипт можно добавить в крон, например так: @reboot /root/skypestart.sh Или сделать на его основе полноценный init.d сценарий. Также возможна запуска более чем одной копии Skype. Для этого надо скопировать $HOME/.Skype/ в соответствующие поддиректории, и переопределив HOME и DISPLAY запустить для каждой из копий свой xvfb сервер и клиента, добавив соответствующие записи в конфигурацию asterisk. Redirect звонков skype на SIP phone Для тестирования работы skype c SIP телефоном я использовал ATA adapter Linksys (подойдет и любой sofpthone, например - Ekiga), подключив его к Asterisk. Для этого создадим запись в файле /etc/asterisk/sip.conf ; linksys ata adapter, skype testing [sipphone] context=default type=friend ; ATA login secret=f.ck ; ATA password host=dynamic ; allow to register Перезапустим Asterisk и настроем АТА адаптер используя Asterisk в качестве сервера. Для проверки наберем на SIP телефоне 600#, вы должны услышать эхо тест. Если все работаем - настроим перенаправление. Для этого в /etc/asterisk/skypiax.conf заменим строчку extension=600 на, например extensions=555. В файле /etc/asterisk/extensions.conf (секция [default]) добавим exten => 555,1,Dial(SIP/sipphone); Перезапустим Asterisk и попробуем вызвать наш тествовый SkypeID - звонок должен быть перенаправлен на sipphone. Единственный неприятный момент - скайп берет трубку сразу после поступления вызова, так что корректную сигнализацию, вероятно, обеспечить не удастся. Вызов skype абонентов Для того, чтобы с sipphone вызывать skype пользователей - добавим соответствующие записи в /etc/asterisk/extensions.conf (секция default), например [default] exten => 555,1,Dial(SIP/sipphone); exten => 556,1,Dial(Skypiax/skypeclient/echo123); exten => 557,1,Dial(Skypiax/skypeclient/drugdiler); exten => 558,1,Dial(Skypiax/skypeclient/advokat); и в консоли Asterisk наберем dialplan reload. Теперь набрав на sipphone 556 asterisk соединет нас с Skype call testing service. Что и требовалось ) Заключение Для использования решения в production желательно сделать некоторые доработки, так я планирую сделать скрипты для пуска/остановки клиентов, создать rootless окружение для всего этого, интегрировать все это хозяйство с monit и перенести все в Xen domU. Тем не менее уже сейчас понятно что решение работоспособно и работает достаточно неплохо. Я буду рад дельным замечаниям и комментариям на эту тему.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, ggbwe (?), 12:49, 16/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я вот хочу решить противоположную задачу, как по sip телефону через skype акаунт позвонить, есть какой нибудь сервис эмуляции sip для skype ?
     
     
  • 2.3, Андрей (??), 11:30, 05/05/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Я вот хочу решить противоположную задачу, как по sip телефону через skype
    >акаунт позвонить, есть какой нибудь сервис эмуляции sip для skype ?
    >

    Вызов skype абонентов

       Для  того,  чтобы  с  sipphone  вызывать skype пользователей - добавим
       соответствующие   записи   в   /etc/asterisk/extensions.conf   (секция
       default), например

            [default]
            exten => 555,1,Dial(SIP/sipphone);
            exten => 556,1,Dial(Skypiax/skypeclient/echo123);
            exten => 557,1,Dial(Skypiax/skypeclient/drugdiler);
            exten => 558,1,Dial(Skypiax/skypeclient/advokat);


       и  в  консоли  Asterisk  наберем  dialplan  reload.  Теперь  набрав на
       sipphone 556 asterisk соединет нас с Skype call testing service. Что и
       требовалось )

    Вы статью-то до конца дочитали?

    Единственное, что требуется - это завести всех скайп-абонентов в диалплан (их логины в скайп). Причем, если у абонента скайп стоит по-умолчанию "принимать звонки от всех" (а это редко кто из уверенных пользователей ПК меняет), то ему звонок придет вне зависимости от того, заведен ли у него Ваш скайп-ник в "друзьях" или нет ;)

     
     
  • 3.4, Konstantin (??), 11:04, 04/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Отличный мануал! Спасибо автору! Поставил Asterisk на Debian 5. Всё заработало с первого раза. Входящие звонки из скайпа идут прямо на телефонную трубку. Исходящий межгород пустил через скайп при помощи правила в extensions.conf "exten => _8ХXXXXXXXXX,1,Dial(Skypiax/skypeclient/+7${EXTEN:1})"
     
     
  • 4.7, yks (ok), 11:15, 22/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.celliax.org перенаправляет на http://www.gsmopen.org и в нынешнем chan_celliax.tgz нет skypiax_stuff, похоже шлюз астериск - скайп вообще исключен. Не могли бы вы прислать соотв. пакет на yks000@gmail.com

     

  • 1.5, alex (??), 09:29, 27/08/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Альтернативный Skype канал от Digium (коммерческий, 66$ за канал) можно приобрести у авторизованного реселлера Digium - http://www.pbxware.ru/products/skype
     
  • 1.6, yks (?), 08:14, 21/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я сделал этот шлюз на отдельном сервере -  (debian - FreeSwitch со Skypiax - Skype). Хотел перенести на основной с Астериском (CentOS 5.3) по вашей методике. Но http://www.celliax.org перенаправляет на http://www.gsmopen.org и в нынешнем chan_celliax.tgz нет skypiax_stuff, похоже шлюз со скайпом вообще исключен. Не могли бы вы прислать соотв. пакет на yks000@gmail.com
     
     
  • 2.9, c0re (??), 16:13, 14/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    а под астериск нет больше модуля этого
    есть skypiax, который идёт в поставке с FreeSWITCH, там даже есть что-то под астериск, но собрать этот модуль отдельно от FreeSWITCH у меня не получилось.
    поэтому сделал эту идею на FreeSWITCH+skypiax
    описание настройки можете найти в гугле по keyword skypiax
     

  • 1.8, Алексей Вертинский (?), 23:10, 03/11/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    СПАСИБО!!!
     
  • 1.10, apostolos (?), 18:24, 18/05/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хочу создать свой скайп
     
  • 1.12, Бузуев Виктор (?), 15:33, 05/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хочу создать хорошую программу Skype,чтобы вместе с тем существовал хороший поиск даже по фамилии и имени клиентов
     
  • 1.13, max (??), 18:33, 05/01/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Морально устарело... У кого есть этот мод skypiax? Сбросьте на rwx@ukr.net
     
  • 1.14, Евгений (??), 03:11, 27/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    можете как нибудь всё выложить в файлах, что бы можно было это скачать ?
     
  • 1.15, миша и андрей (?), 15:49, 26/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ыы
     
  • 1.16, миша и андрей (?), 15:50, 26/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    как скайп саздать
     
     
  • 2.17, Walkman (??), 16:53, 26/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > как скайп саздать

    такой ответ устроит? - "Молча:)".

     
     
  • 3.18, Walkman (??), 16:56, 26/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> как скайп саздать
    > такой ответ устроит? - "Молча:)".

    Рекомендую SipToSys. Доступна как для линукс, так и виндовс.
    Сервер лудше всего розварачивать на линукс... В дальнейшем можно много всего прикрутить...

     

  • 1.19, Едуард (?), 23:01, 14/06/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    По моему вот так намного легче http://www.goebel.net/technews/2008/03/free-bridge-from-skype-to-phone.html
    И все РЕАЛЬНО РАБОТАЕТ !!!
    1 + БЕЗ КОМПА
    2 + Номер можно раздавать и тебе звонят не в скайп
    3 + КАЧЕСТВО
    Я сделал за 3 часа. +9990009369996114ХХХ вот такой номер дают и с СКАЙПА бесплатно на него звонят,а в Скайпе ставишь переадресовывание на него
     
  • 1.20, Едуард (?), 23:06, 14/06/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    и к тому-же и IVR и много фигни можно прикрутить
     
  • 1.21, Заира (?), 01:48, 22/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я хочу запустить две учетные записи Skype на одном компьютере нужен какой то текст статьи ключ sekenderi, как его установить?
     
  • 1.22, слава (??), 17:38, 25/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    rfr
     
  • 1.23, ЖЕНЯ (?), 09:36, 18/07/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    КЛЁВА ВСЕМ ПРИВЕТ
     

    лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру