Встановлення та налаштування Asterisk 1.8 + FreeBSD 9.2 + Huawei E1550

Завдання:

Реалізувати бюджетний варіант 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. Авторизуємося, налаштовуємо пристрої вводу/виводу звуку. Тестуємо наші діалплани, черги, обмеження.

Першоджерела:

www.unix.ck.ua

www.hilik.org.ua

www.hilik.org.ua

smsua.net

habrahabr.ru

www.asterisk-pbx.ru

 

Переривання певних дзвінків.

Спочатку відобразимо інформацію про поточні дзвінки:
 
asterisk2*CLI> core show channels
Channel              Location             State   Application(Data)
SIP/3224-00000a19    s@macro-dial-one:42  Up      Dial(SIP/4027,15,trI)
IAX2/IAX_Trunk_to_US (None)               Up      AppDial((Outgoing Line))
SIP/4003-00000a2f    s@macro-dialout-trun Up      Dial(IAX2/IAX_Trunk_to_US/1001
SIP/4001-0000089e    s-CHANUNAVAIL@macro- Up      VoiceMail(3102@default,u"")
SIP/3117-00000102    s-NOANSWER@macro-vm: Up      VoiceMail(3106@default,u"")
SIP/4027-00000a1a    (None)               Up      AppDial((Outgoing Line))
6 active channels
4 active calls
1553 calls processed

 

Припустимо, ми хочемо вимкнути дзвінок користувачеві +4003 (виділений).
Виконуємо команду:

 
asterisk2*CLI> channel request hangup SIP/4003-00000a2f
Requested Hangup on channel 'SIP/4003-00000a30'
-- Executing [h@macro-dialout-trunk:1] Macro("SIP/4003-00000a30", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/4003-00000a30", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] ExecIf("SIP/4003-00000a30", "0? Set(CDR(recordingfile)=)") in new stack
-- Executing [s@macro-hangupcall:4] Hangup("SIP/4003-00000a30", "") in new stack
== Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'SIP/4003-00000a30' in macro hangupcall'
== Spawn extension (macro-dialout-trunk, h, 1) exited non-zero on 'SIP/4003-00000a30'
-- Hungup 'IAX2/IAX_Trunk_to_US-49'

Тепер можна побачити, що дзвінок завершений.

asterisk2*CLI> core show channels
Channel              Location             State   Application(Data)
SIP/3224-00000a19    s@macro-dial-one:42  Up      Dial(SIP/4027,15,trI)
SIP/4001-0000089e    s-CHANUNAVAIL@macro- Up       VoiceMail(3102@default,u"")
SIP/3117-00000102    s-NOANSWER@macro-vm: Up       VoiceMail(3106@default,u"")
SIP/4027-00000a1a    (None)               Up      AppDial((Outgoing Line))
4 active channels
3 active calls
1554 calls processed

(с)http://test.pp.ua/index.php/voip/39-vstanovlennia-ta-nalashtuvannia-asterisk-1-8-freebsd-9-2-huawei-e1550

 

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.