GSM/UMTS Mediagateway selbst gebaut

Submitted by admin on So, 11.12.2016 - 11:55

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.

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?