Problem
Derzeit (Stand Mai/2016) gibt es wenige bezahlbare und gute Mediagateways für GSM/UMTS-SIP, so dass hier wieder einmal Selbstbau gefragt ist. Mit Asterisk 13 steht eine sehr flexible und skalierbare Lösung zur Verfügung, die vom Hersteller auch aktiv weiter entwickelt wird.
Hardware
- USB Datastick, am besten Huawei K3520
- Odroid, oder Rasperry Model 2
- Aktiver USB Hub, nicht den billigsten, es wäre schade um den Odroid und/oder den Datastick…
Der aktive USB Hub wird gebraucht, weil der Odroid nicht genügend Strom auf dem USB Port liefern kann, um den Datastick bei Laune zu halten. Der Odroid U3 scheint hier eine Ausnahme zu sein.
Software
- Ubuntu 14.04, Debian 8 sollte auch gehen
- Asterisk 13
Vorbereitung
Die SIM Karte darf nicht mit einer PIN geschützt sein, sonst klappt es nicht. Die SIM Karte daher in ein beliebiges Handy stecken und dort die PIN deaktivieren. Jetzt kann die SIM Karte in den Datenstick eingesetzt werden.
Installation Asterisk
Da Asterisk 13 aus dem Source Code erstellt werden soll, werden noch einige -dev Pakete benötigt. Mit apt install libjansson-dev uuid-dev libxml2-dev build-essential subversion git werden die notwendigen Pakete installiert.
- cd /usr/src
- wget http://www.pjsip.org/release/2.5/pjproject-2.5.tar.bz2
- tar xvf pjproject-2.5.tar.bz2
- cd pjproject-2.5
- ./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib --enable-shared --disable-video --disable-sound --disable-opencore-amr
- make -j8 && make install # bei -j <anzahl cpu cores> ergibt beste Resultate
- cd /usr/src
- wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
- tar xvf asterisk-13-current.tar.gz
- cd asterisk-13.9.0 # oder was gerade current ist
- contrib/scripts/get_mp3_source.sh
- ./configure
- make menuconfig # da sollte man auch mp3 auswählen
- make && make install && make basic-pbx
- git clone https://github.com/wdoekes/asterisk-chan-dongle.git
- cd asterisk-chan-dongle
- ./configure --with-astversion=130900 && make && make install
- cp etc/dongle.conf /etc/asterisk/
Config Files
Von den zahlreichen Asterisk Config Files sind nur die folgenden Files relevant.
/etc/asterisk/asterisk.conf
runuser = asterisk ; The user to run as.
rungroup = dialout ; The group to run as.
/etc/asterisk/dongle.conf
context=dongle-incoming ; context for incoming calls
/etc/asterisk/sip.conf
Die Codec Auswahl hat hier einen bestimmten Grund: chan_dongle benötigt eine translation auf slin, was aus irgendwelchen Gründen mit alaw nicht klappt, mit g722 und g729 dagegen schon.
[general]
port = 5060
bindaddr = 0.0.0.0
context = gs-context
disallow = all
allow = g722
allow = g729
allowguest = yes
alwaysauthreject = yes
maxexpiry = 3600
defaultexpiry = 1800
localnet = 192.168.0.0/255.255.0.0
encryption = no
[gs5]
context = gs-internal
type = friend
secret = ***
host = dynamic
qualify = yes
/etc/asterisk/extensions.conf
Der Dialplan ist für die Anbindung an eine Gemeinschaft 5 Installation bestimmt, sollte jedoch auch mit anderen Lösungen funktionieren.
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
exten => ussd,1,Verbose(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
exten => +49***,1,NoOp()
exten => +49***,2,Dial(SIP/2001@gs5)
exten => +49***,n,Hangup()
[gs-internal]
exten => _X.,1,NoOp()
exten => _X.,2,Dial(Dongle/dongle0/${EXTEN},,r)
exten => _X.,n,Hangup
exten => _+49X.,1,NoOp()
exten => _+49X.,2,Dial(Dongle/dongle0/${EXTEN},,r)
exten => _+49X.,n,Hangup
ToDo
- Migration auf pjsip, das soll den alten SIP Code in Asterisk wohl zukünftig ersetzen
- Lösung für VoLTE (Voice over LTE)
- Asterisk 13 auf Android migrieren, mit chan_ril?
- Anmelden, um Kommentare verfassen zu können