[Из песочницы] Лето, отпуск, asterisk или сам себе VoIP оператор |
Здравствуйте, гость ( Вход | Регистрация )
[Из песочницы] Лето, отпуск, asterisk или сам себе VoIP оператор |
1.7.2013, 21:54
Сообщение
#1
|
|
Администратор Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 |
Asterisk*, DIY или Сделай Сам Собрался я вместе со своим товарищем в период летнего отпуска поколесить на авто по Европе. А серой осенью есть мысли отправиться поближе к экватору. И вполне резонно встал вопрос связи. Skype, ICQ и прочие сервисы это конечно хорошо, но только не для старшего поколения. Жена и друзья без вопросов, а родители? Супруга сразу же сказала что передастом (человек который передает что-либо) быть не желает. Еще неплохо было бы свой номер рабочим оставить, чтоб у людей не было ощущения, что я канул в небытие. Опять же учитывая непростую роуминговую тарификацию наших операторов сотовой связи, в которой разбираться у меня нет никакого желания, сформировалось представление того, что я хочу получить в итоге.
Выбор программного обеспечения Для реализации бюджетного VoIP как нельзя лучше подходит Asterisk, с которым мне периодически приходится сталкиваться по работе. Дешево, сердито и надежно. GSM шлюз это конечно хорошо, но даже goip это 12 тыс.руб. и более. Поэтому единственный вариант который мне показался приемлемым это chan_dongle и парочка huawei. Прием и передача смс это либо jabber, либо электронная почта. Безопасность отдельная тема. Так как админ из меня так себе, то все таки считаю что не замечательно будет, если астериск голой попой на всеобщее обозрение выставить. Если к астериску подключатся с ноутбука, то в общем то без разницы какой будет VPN. Но это же не правильно и не удобно каждый раз доставать ноут. А учитывая что у меня неистовая любовь к андроиду, я изучил маркет на предмет vpn клиентов и на своего старичка galaxy s поставил OpenVPN. Итак, приступим Порылся в дальнем углу кладовки и достал старый комп. Система ubuntu, т.к. дебиан подобные мне близки. Ставил исключительно с болванки, так как ubuntu с флешки ставится только после магических па. Так как на хабре предпочитают jedi way и не любят стандартные маны по установке, будем ставить астериск 11 ручками и спрячем подробности под спойлеры. OpenVPN будем ставить как смертные. Выбор 11 астериска обусловлен новым модулем xmpp, в котором появилась возможность обрабатывать входящие сообщения. Openvpn Так как решено использовать соединение через OpenVPN а комп с астериском будет стоять на работе за натом, то будем использовать внешний VPN сервер. Для личных нужд у меня имеется сервачек у немцев. Но в принципе не будет хуже, если использовать что ни будь наше. Селектел мне понравился (ни разу не реклама), все интуитивно понятно, разворачивается только в путь. И по затратам вполне гуманно, надо включил, не надо выключил. В общем, накатываем openVPN на что ни будь торчащее в сеть, в моем случае дебиан. Для сервераСтавим OpenVPN sudo su aptitude update aptitude upgrade aptitude install openvpn Создадим директорию и скопируем комплект скриптов из примеров: mkdir /etc/openvpn/easy-rsa/ cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ Редактируем vars nano /etc/openvpn/easy-rsa/vars Я правил: export KEY_COUNTRY="RU" export KEY_PROVINCE="REGION" export KEY_CITY="GLUBINKA" export KEY_ORG="KROILOVO CORP" export KEY_EMAIL=”[email protected]” Дальше генерируем сертификаты и переносим в каталог с настройками: cd /etc/openvpn/easy-rsa/ source vars ./clean-all ./build-dh ./pkitool --initca ./pkitool --server server cd keys openvpn --genkey --secret ta.key cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/ Теперь необходимо сгенерировать сертификаты для клиентов cd /etc/openvpn/easy-rsa/ source vars ./build-key client_name ,где clien_name имя клиента На клиентские устройства необходимо передать: /etc/openvpn/ca.crt /etc/openvpn/easy-rsa/keys/clien_name.crt /etc/openvpn/easy-rsa/keys/ clien_name.key /etc/openvpn/ta.key Мой server.conf port 1110 proto tcp dev tun ca ca.crt cert server.crt key server.key dh dh1024.pem server 192.168.100.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-to-client #чтоб клиенты видели друг друга keepalive 10 120 comp-lzo max-clients 10 persist-key persist-tun status openvpn-status.log verb 3 Для клиентов linuxСтавим OpenVPN sudo su aptitude update aptitude upgrade aptitude install openvpn в /etc/openvpn должны лежать ca.crt clien_name.crt сlien_name.key ta.key client_name.conf Мой client_name.conf Client dev tun proto tcp remote serverIP 1110 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client_name.crt key client_name.key comp-lzo verb 3 Для клиентов AndroidИз google play ставим OpenVPN for Android Копируем на флешку устройства сертификаты, сгенерированные на сервере Задаем адрес и порт сервера, добавляем сертификаты и соединяемся. В итоге получаем все устройства в одной VPN. У меня получилось 5 устройств:
Asterisk Идем на asterisk.org и в downloads качаем. В тот момент когда я ставил asterisk.org лежал. Поэтому ставил 11.2.1 так как оно на компе валялось. На данный момент доступен 11.4.0. Не думаю что сильно отличается, но changelog не читал. Установка Asterisksudo su mkdir /usr/src/asterisk cd /usr/src/asterisk wget http://downloads.asterisk.org/pub/telephon...-current.tar.gz aptitude update aptitude upgrade Ставим зависимости aptitude install build-essential linux-headers-`uname -r` g++ libmysqlclient-dev libxml2-dev libncurses5-dev libsqlite3-dev libssl-dev libsrtp0-dev unixodbc-dev Так как в планируется использовать jabber, то нужно поставить iksemel и openssl. Без них модуль xmpp не соберется aptitude install libssl-dev libssl1.0.0 libiksemel-dev libiksemel3 Начинаем ставить tar xvf asterisk-11-current.tar.gz cd asterisk-11-current ./configure make menuselect Добавил xmpp и ael остальное по дефолту make make install делаем make samples чтобы получить дефолтовые конфиги. делаем make config чтобы астериск запускался демоном. Chan dongle Дальше нам нужно собрать chan_dongle. Чудесный проект, который поддерживал товарищ BG2, но толи запал пропал, толи в силу непреодолимых обстоятельств обновлений у проекта не было достаточно давно (что прискорбно) и под 11 астериском оно собираться отказывается напрочь. Но гитхаб нам поможет. Установка chan_dongleaptitude install git cd /usr/src/asterisk wget https://github.com/jstasiak/asterisk-chan-d.../asterisk11.zip unzip asterisk11.zip ну а дальше по мануалу aclocal autoconf automake –a ./configure Make Make install Дальше читаем вики проекта wiki.e1550.mobi и находим модемы из списка поддерживаемых. В моем случае это оказались E1550 и E173. С самими модемами все просто, гуглим на предмет usbmodeswitch ну или под windows переводим в режим только модем через терминал. На моем Е1550 еще потребовалось активировать голосовые функции. В Dongle.conf особых изменений не делал, только добавил IMSI своих симок, по которым модуль будет выбирать ту самую симку, и контекст для входящих. изменения dongle.confcontext=dongle-incoming [mts] imsi=25001xxxxxxxxxx; exten=911 [megafon] imsi=25002xxxxxxxxxx; exten=921 теперь в CLI астериска перегружаем модуль и проверяем зацепились ли модемы dongle reload now dongle show devices Если все увиделось и все хорошо то можно приступать к настройке всего этого добра. Настройка Asterisk В sip.conf прописываем пользователей sip.conf[general] language = ru; tcpenable = yes ; transport = tcp,udp; [LOCAL-USERS](!) type = friend ; host = dynamic ; context = from-office ; disallow = all ; allow = ulaw ; allow = alaw ; allow = gsm ; monitor = yes ; callcounter = yes ; callwaiting = no ; rtptimeout = 10; rtpholdtimeout = 20; dtmfmode = rfc2833 ; [10](LOCAL-USERS) ; username = 10 ; secret = passfor10 ; [11](LOCAL-USERS) ; username = 11 ; secret = passfor11 ; [12](LOCAL-USERS); username = 12 ; secret = passfor12; [13](LOCAL-USERS); username = 13 ; secret = passfor13; [14](LOCAL-USERS); username = 14 ; secret = passfor14; Cоздаем очередь в queues.conf queues.conf[general] persistentmembers = yes ; autofill = yes ; monitor-type = MixMonitor [WORKGROUP] strategy = ringall; ringinuse = yes ; timeout = 20 ; retry = 1 ; maxlen = 0 ; member => SIP/10 member => SIP/11 member => SIP/12 member => SIP/13 member => SIP/14 Так как для восприятия более удобным считаю AEL, то диалплан писал исключительно на нем. Extensions.aelGlobals { __TRANSFER_CONTEXT=transfer; //Дефолтовый контекст для перевода звонков }; context transfer{ _1X => Dial(SIP/${EXTEN},60,t); //перевод звонков } context from-office { includes { ; //инклудим контексты чтоб кашу не устраивать mobile-numbers; city-numbers; local-users; }; }; context mobile-numbers { ;//все мобильные _89XXXXXXXXX => Dial(Dongle/s:25002/${EXTEN},,T); //Кроить дак кроить, звонить будем с рабочего номера }; context city-numbers { ; //городские _XXXXXX => Dial(Dongle/s:25002/${EXTEN},,T); }; context dongle-incoming { ;// входящие c chan_dongle 921 => Queue(WORKGROUP,t,,,60); //все входящие с рабочего отправляем в очередь workgroup 911 =>{ ;// все входящие на личный Answer; Dial(SIP/10,60,tT); //набираем на андроид Dial(SIP/11,60,tT); //набираем на ноут Playback(/tmp/ya_v_otpuske); //говорим что я в отпуске Jabbersend(asterisk@jabber_example.ru,grasp@jabber_example.ru,Тебе звонили с номера {CALLERID(num)}); // шлем в jabber номер звонящего Hangup; }; sms => { Jabbersend(asterisk@jabber_example.ru,grasp@jabber_example.ru,${CALLERID(num)} ${SMS}); //в jabber шлем входящие смс Hangup(); }; ussd => { Jabbersend(asterisk@ jabber_example.ru,grasp@jabber_example.ru,${USSD}); // //в jabber шлем входящие ussd Hangup(); }; }; context local-users { _500 => { ; // для записи голосовых файлов Wait(2); Record(/tmp/ast:wav); Wait(2); Playback(/tmp/ast); Wait(2); Hangup; }; _600 => { ; // запрос баланса, ответ придет в jabber System(/usr/sbin/asterisk -x 'dongle ussd mts *100#'); System(/usr/sbin/asterisk -x 'dongle ussd megafon *100#'); }; _1X => { Dial(SIP/${EXTEN},60,tT); // Для внутренних звонков }; }; На андроиде поставил 2х клиентов 3сх и CSipSimple. Были проблемы со звуком в одну сторону, но разбираться было особенно некогда, поэтому в openVPN поставил галочку “перенаправлять весь трафик через VPN” и все заработало. Проверял через 3G и wifi, работает не заикается. Для jabber поднял openfire. Думаю описывать не стоит да и можно что то стороннее использовать. В xmpp.conf прописал настройки и все с пол пинка запустилось. OpenFire ставил исключительно из любопытства, так как под него есть плагин для астериска, но это отдельная история. Остается еще прикрутить отправку смс через jabber, но пока еще окончательно не решил действительно ли оно мне надо. Еще надо бы настроить голосовую почту, но вроде тоже пока не сильно актуально, вернусь из отпуска и будет ясно. По итогу посмотрим как у меня вся эта затея приживется. В голове есть мысли по реализации этакого мобильного офиса, с переадресациями на коллег, работой далеко за пределами рабочего стола и прочими плюшками. Прошу строго не судить. Если что то забыл указать пишите поправлю, так как последовательность действий описывал по памяти, мог чего ни будь и упустить. Так же, если старшие товарищи поделятся своими идеями или реализациями чего ни будь подобного то буду только рад. Original source: habrahabr.ru (comments, light). Читать дальше -------------------- |
|
|
Текстовая версия | Сейчас: 25.4.2024, 8:03 | |