Завдання:
Реалізувати бюджетний варіант VoIP телефонії, для здешевлення дзвінків на телефони потрібних операторів, всіх інших блокуємо.
Будемо використовувати три Huawei E1550 (при потребі кількість можна збільшити).
Також три сім-картки різних операторів: МТС, Київстар, Лайф. Клієнти мають підключатися зовні на VoIP шлюз (маємо білу ІР).
Також в процесі експлуатації налаштувати: перевід дзвінків; опрацювання черги на вхідні дзвінки і т.д..
В якості платформи буде використовуватися звичайний ПК та операційна система FreeBSD 9.2 amd64.
Встановлення:
1. Встановлюємо ОС, робимо реліз стабільним, оновлюємо порти, перезбираємо ядро без IPv6.
2. Встановлюємо asterisk, я вибрав наступні опції:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | root@voip:/tmp # cd /usr/ports/net/asterisk root@voip:/usr/ports/net/asterisk # make config ┌──────────────────────── asterisk18-1.8.29.0 ──────────────────────────┐ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ [x] CURL Data transfer support via cURL │ │ │ │ [x] DAHDI DAHDI support │ │ │ │ [ ] EXCHANGE Exchange calendar support │ │ │ │ [x] FREETDS FreeTDS library support │ │ │ │ [x] GSM GSM codec support │ │ │ │ [x] H323 H.323 codec support │ │ │ │ [ ] JABBER Jabber communications protocol support │ │ │ │ [ ] LDAP LDAP protocol support │ │ │ │ [ ] LUA Lua scripting language support │ │ │ │ [x] MYSQL MySQL database support │ │ │ │ [x] NEWG711 New G711 Codec │ │ │ │ [x] ODBC ODBC database backend │ │ │ │ [ ] OOH323 ooh323 support │ │ │ │ [ ] PGSQL PostgreSQL database support │ │ │ │ [ ] RADIUS RADIUS protocol support │ │ │ │ [x] SNMP SNMP network protocol support │ │ │ │ [ ] SPANDSP SpanDSP faxing support │ │ │ │ [ ] SQLITE SQLite database support │ │ │ │ [ ] SRTP SecureRTP support │ │ │ │ [x] VORBIS Ogg Vorbis audio codec support │ │ │ └───────────────────────────────────────────────────────────────────┘ │ ├───────────────────────────────────────────────────────────────────────┤ │ < OK > <Cancel> │ └───────────────────────────────────────────────────────────────────────┘ root@voip:/usr/ports/net/asterisk # make install |
3. Встановлюємо драйвер для Huawei E1550:
1 2 3 4 5 6 7 8 9 10 | root@voip:/usr/ports/net/asterisk # cd /home/user root@voip:/home/user # mkdir ./asterisk_gsm root@voip:/home/user/ # cd ./asterisk_gsm root@voip:/home/user/asterisk_gsm # fetch http://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz root@voip:/home/user/asterisk_gsm # tar xf ./chan_dongle-1.1.r14.tgz root@voip:/home/user/asterisk_gsm # cd ./chan_dongle-1.1.r14 root@voip:/home/user/asterisk_gsm/chan_dongle-1.1.r14 # ./configure root@voip:/home/user/asterisk_gsm/chan_dongle-1.1.r14 # gmake root@voip:/home/user/asterisk_gsm/chan_dongle-1.1.r14 # gmake install root@voip:/home/user/asterisk_gsm/chan_dongle-1.1.r14 # cp ./etc/dongle.conf /usr/local/etc/asterisk/ |
Не большая правка на 2020 год :-) если вылетают ошибки, (aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in')
копируем файл
cp configure.in configure.ac
так же после ./configure
правим строчки в файле
Makefile
CFLAGS = -g -O2 -O6 -I$(srcdir) ... -fblocks
LIBS = /usr/local/lib/libiconv.so Чуть позже полностью обновлю статейку, что бы не забыть!
4. Виставляємо потрібні права:
1 2 3 4 5 6 7 8 | root@voip:/home/user/asterisk_gsm # cd /tmp root@voip:/tmp # chown -R asterisk:asterisk /usr/local/etc/asterisk/ root@voip:/tmp # ee /etc/group ..... dialer:*:68:asterisk ..... root@voip:/tmp # rehash root@voip:/tmp # |
5. Тестовий запуск asterisk:
1 2 3 4 | root@voip:/tmp # /usr/local/etc/rc.d/asterisk onestart Starting asterisk. Privilege escalation protection disabled! See https://wiki.asterisk.org/wiki/x/1gKfAQ for more details. |
Бачимо застереження, вимикаємо його:
1 2 3 4 | root@voip:/tmp # ee /usr/local/etc/asterisk/asterisk.conf ..... live_dangerously = no ..... |
6. Після запуску в логах фіксуємо WARNING-и, щодо певних модулів - вимикаємо їх. Також тушимо все, що не знадобиться:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | root@voip:/tmp # ee /usr/local/etc/asterisk/modules.conf ..... ; noload => pbx_ael.so noload => chan_dahdi.so noload => codec_dahdi.so noload => res_config_mysql.so noload => cel_tds.so noload => chan_unistim.so noload => chan_h323.so noload => chan_iax2.so noload => pbx_dundi.so noload => chan_skinny.so ; |
7. Так, як наша ОС Freebsd 9.2 amd64, то модуль u3g вже присутній в ядрі і наші ЖСМ-брелкі адекватно визначаються ОС, після підключення:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | root@voip:/tmp # usbconfig list ..... ugen2.3: <HUAWEI Mobile HUAWEI Technology> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA) ugen2.4: <HUAWEI Mobile HUAWEI Technology> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA) ..... root@voip:/tmp # ll /dev/cua* ..... crw-rw---- 1 uucp dialer 0x77 1 вер 15:45 /dev/cuaU0.1 crw-rw---- 1 uucp dialer 0x78 31 сер 14:33 /dev/cuaU0.1.init crw-rw---- 1 uucp dialer 0x79 31 сер 14:33 /dev/cuaU0.1.lock crw-rw---- 1 uucp dialer 0x7d 2 вер 09:56 /dev/cuaU0.2 crw-rw---- 1 uucp dialer 0x7e 31 сер 14:33 /dev/cuaU0.2.init crw-rw---- 1 uucp dialer 0x7f 31 сер 14:33 /dev/cuaU0.2.lock ..... crw-rw---- 1 uucp dialer 0x8f 2 вер 09:29 /dev/cuaU1.1 crw-rw---- 1 uucp dialer 0x90 31 сер 14:34 /dev/cuaU1.1.init crw-rw---- 1 uucp dialer 0x91 31 сер 14:34 /dev/cuaU1.1.lock crw-rw---- 1 uucp dialer 0x95 2 вер 09:56 /dev/cuaU1.2 crw-rw---- 1 uucp dialer 0x96 31 сер 14:34 /dev/cuaU1.2.init crw-rw---- 1 uucp dialer 0x97 31 сер 14:34 /dev/cuaU1.2.lock |
8. Приводимо dongle.conf до наступного вигляду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | root@voip:/tmp # cp /usr/local/etc/asterisk/dongle.conf /usr/local/etc/asterisk/dongle.conf-dist root@voip:/tmp # ee /usr/local/etc/asterisk/dongle.conf ..... [general] interval=5 ; -------------------- OUTGOING-INCOMING CALLS --------------- ; [a-out- in ] context=a-out- in rxgain=3 txgain=-3 autodeletesms= yes resetdongle= yes u2diag=0 usecallingpres= yes callingpres=allowed_passed_screen disablesms= yes language=ru disable=no initstate=start callwaiting= yes [KS](a-out- in ) audio=/dev/cuaU0.1 data=/dev/cuaU0.2 group=0 [MTS](a-out- in ) audio=/dev/cuaU1.1 data=/dev/cuaU1.2 group=1 ..... |
9. Приводимо extensions.conf до наступного вигляду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | root@voip:/tmp # ee /usr/local/etc/asterisk/extensions.conf ..... [general] static= yes writeprotect= yes clearglobalvars=no [globals] [out-mts] ; 050 exten => _050XXXXXXX,1,Dial(Dongle/MTS/${EXTEN},60) exten => _050XXXXXXX,2,Hangup ; 066 exten => _066XXXXXXX,1,Dial(Dongle/MTS/${EXTEN},60) exten => _066XXXXXXX,2,Hangup ; 09[5,9] exten => _09[5,9]XXXXXXX,1,Dial(Dongle/MTS/${EXTEN},60) exten => _09[5,9]XXXXXXX,2,Hangup [out-ks] ; 039 exten => _039XXXXXXX,1,Dial(Dongle/KS/${EXTEN},60) exten => _039XXXXXXX,2,Hangup ; 06[7,8] exten => _06[7,8]XXXXXXX,1,Dial(Dongle/KS/${EXTEN},60) exten => _06[7,8]XXXXXXX,2,Hangup ; 09[6,7,8] exten => _09[6,7,8]XXXXXXX,1,Dial(Dongle/KS/${EXTEN},60) exten => _09[6,7,8]XXXXXXX,2,Hangup [inside-calls] exten => _77XX,1,Dial(SIP/${EXTEN},,tTH) exten => s,2,Hangup [extra-num] ; 10[1,2,3,4] exten => _10[1,2,3,4,9],1,Dial(Dongle/MTS/${EXTEN},30,tT) exten => _10[1,2,3,4,9],2,GotoIf(${DIALSTATUS} = BUSY,3) exten => _10[1,2,3,4,9],3,Dial(Dongle/KS/${EXTEN},30,tT) exten => _10[1,2,3,4,9],4,GotoIf(${DIALSTATUS} = BUSY,5) exten => _10[1,2,3,4,9],5,Hangup [a-out- in ] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Queue(a-out- in ,tTh,,,45) exten => s,4,Hangup [other-bloking] exten => _X.,1,Hangup [out-calls] include => out-mts include => out-ks include => inside-calls include => extra-num include => other-bloking ..... |
10. Приводимо sip.conf до наступного вигляду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | root@voip:/tmp # ee /usr/local/etc/asterisk/sip.conf ..... [general] allowoverlap=no udpbindaddr=x9x.1xx.x0.x4 tcpenable=no tcpbindaddr=0.0.0.0 transport=udp srvlookup=no language=ru nat= yes [A-USERS](!) type =friend host=dynamic canreinvite=no context=out-calls disallow=all allow=ulaw allow=alaw dtmfmode=rfc2833 allowguest=no alwaysauthreject= yes [7701](A-USERS) username=sup1 secret=123456 call-limit=1 callerid=Sup1 [7702](A-USERS) username=sup2 secret=234567 call-limit=1 callerid=Sup2 [7703](A-USERS) username=Test secret=345678 callerid=Test [7704](A-USERS) username=admin secret=456789 callerid=Admin [7705](A-USERS) username=User secret=567890 callerid=user ..... |
11. Налаштовуємо чергу для вхідних дзвінків:
1 2 3 4 5 6 7 8 9 10 11 12 13 | root@voip:/tmp # ee /usr/local/etc/asterisk/queues.conf ..... [general] persistentmembers = yes monitor- type = MixMonitor [a-out- in ] strategy = ringall context = in -calls member => SIP/7701,1 member => SIP/7702,2 ..... |
12. Перевіряємо налаштування трансферу дзвінків. Чи є у контексті вхідних дзвінків маленька буква t - (дивимось вище extensions.conf). по дефолту за перевід дзвінка відповідає "#" - при потребі є можливість змінити (features.conf):
1 2 3 4 5 | root@voip:/tmp # asterisk -r voip*CLI> features show ..... Blind Transfer # # ..... |
13. Відкриваємо порти 10000 - 20000 та 5060 (налаштування firewall):
1 2 3 4 5 6 7 | root@voip:/tmp # less /etc/firewall.conf ..... # VOIP /sbin/ipfw -q add 100 allow udp from 1x2.x6.x24.4x to me 5060,10000-20000 via $wan /sbin/ipfw -q add 101 allow udp from me 5060,10000-20000 to 1x2.x6.x24.4x via $wan /sbin/ipfw -q add 102 allow udp from 1x2.x6.x24.4x to me frag via $wan ..... |
14. Запускаємо програмний IP-телефон Екіга - створюємо акаунт SIP. Авторизуємося, налаштовуємо пристрої вводу/виводу звуку. Тестуємо наші діалплани, черги, обмеження.
Першоджерела:
Переривання певних дзвінків.
Припустимо, ми хочемо вимкнути дзвінок користувачеві +4003 (виділений).
Виконуємо команду:
Тепер можна побачити, що дзвінок завершений.
(с)http://test.pp.ua/index.php/voip/39-vstanovlennia-ta-nalashtuvannia-asterisk-1-8-freebsd-9-2-huawei-e1550
Коментувати