Asterisk installieren und konfigurieren
Wie fast immer unter Linux ist die Installation trivial:
sudo apt-get install asterisk
Danach wird es allerdings schwierig. Die Konfiguration von Asterisk findet mittels Textdateien in /etc/asterisk statt. Die Installation erstellt ungefähr hundert davon. Man könnte diese Dateien als Ausgangspunkt verwenden, aber, ehrlich gesagt: Da steht so viel drin, dass kein Mensch versteht, was eigentlich vorgeht. Am besten erstellt man die Dateien, die man braucht, neu. Sicherheitshalber verschiebt man zuvor die Originale an einen sicheren Ort.
mkdir /home/pi/asterisk-etc-backup
sudo mv /etc/asterisk/sip.conf /home/pi/asterisk-etc-backup
sudo mv /etc/asterisk/extensions.conf /home/pi/asterisk-etc-backup
Mit diesen beiden Konfigurationsdateien können wir im Prinzip anfangen. Aber zuerst mal sollte man sich überlegen, was man eigentlich braucht. Für den Anfang definieren wir folgendes:
- Ein Telefon am Empfang
- Ein Telefon im Zimmer 1
- Ein Telefon im Zimmer 2
- Eine Linie nach Aussen, zu einem SIP Provider. Telefonate von aussen sollen zuerst in der Zentrale klingeln, dann, wenn niemand abnimmt, im Zimmer 1. Wenn dort auch niemand abnimmt, soll eine Sprachnachricht abgespielt werden.
- Alle Telefone sollen direkt nach aussen telefonieren können.
- Jedes Gespräch soll von jedem Telefon auf jedes andere weiter verbunden werden können. Mit oder ohne Rücksprache.
- Von jedem Telefon soll man auf jedes andere anrufen können.
- Die Anlage soll später leicht um weitere Telefone erweitert werden können.
Um dieses Anforderungpsprofil in eine für Asterisk verständliche Form zu übersetzen, brauchen wir zwei Dinge:
- Eine Channel-Konfiguration. Ein Channel ist in Asterisk jeder Weg, auf dem Telefonate übertragen werden können. Wir beschränken uns zunächst auf SIP Telefonate. Dazu müssen wir die Datei ‘sip.conf’ erstellen.
- Einen Dialplan. Das ist gewissermassen das Herz von Asterisk. Im Dialplan wird festgelegt, wie die Channels ins System gelangen, was dort mit ihnen geschieht, und wie sie auf der anderen Seite hinausgelangen (wenn überhaupt). In Asterisk ist jedes Telefonat konzeptuell in zwei Telefonate aufgesplittet: Eins von Teilnehmer A zu Asterisk und eins von Teilnehmer B zu Asterisk. Asterisk verbindet diese beiden Channels so, dass A den Eindruck hat, direkt mit B verbunden zu sein und umgekehrt. Daher können auch völlig verschiedene Technologien (z.B. ISDN und VOIP) nahtlos via Asterisk verbunden werden. Der Dialplan wird in der Datei ‘extensions.conf’ definiert.
sip.conf:
[general]
;Hierher kommen globale Einstellungen
port=5060
udpbindaddr=0.0.0.0
language=de_CH
tcpenable=no ; Wir wollen keine TCP Verbindungen, nur UDP
nat=force_rport,comedia ; Asterisk ist hinter einem NAT
; Beim SIP-Provider anmelden.
; Format: username:passwort@server/username
register => 415555555:abcde@sub.domain.tld/415555555
; Schablone für alle internen Telefone
[interne-telefone](!)
type=friend ; Das definiert die Art der Authentisierung
host=dynamic ; Die Telefone haben keine fixe IP
context=praxis ; Kontext für den Dialplan
[10](interne-telefone) ; Empfang
secret=extremgeheim
[20](interne-telefone) ; Zimmer 1
secret=nochgeheimer
[30](interne-telefone) ; Zimmmer 2
secret=totalgeheim
; SIP account
[ext-sip-account]
type=friend
context=sipcall
defaultuser=415555555 ; username des SIP-Accounts
fromuser=415555555
secret=abcde ; Passwort des SIP-Accounts
host=sub.domain.tld ; url des SIP Servers
fromdomain=sub.domain.tld
qualify=yes
insecure=port,invite
nat=force_rport,comedia
Dies ist also quasi die Hardware-Seite. Wir haben 3 interne Telefone und ein “virtuelles” Telefon in Form des SIP-Accounts definiert. Letzteres meldet sich beim Programmstart automatisch beim Provider an (mit der Zeile “register => …”). Dieser Anmeldeprozess ist möglicherweise nicht bei allen Anbietern gleich. Im Zweifelsfall hilft Google oder Nachfragen.
Im Moment haben wir noch gar keine echten Telefone, wir behelfen uns mit Softphones. Das sind SIP Telefone, die auf Computern und Handys laufen. Google hilft dabei, welche zu finden, ein Beispiel ist X-Lite, aber es gibt viele andere, die man nicht nur im Internet, sondern auch im Apple-Store, Google-Android Store usw. findet. Achten Sie nur darauf, dass es das SIP Protokoll beherrscht (was ungefähr 99% davon tun).
Jedes Softphone muss mit Adresse der Servers (Das ist die IP-Adresse unseres Raspi im LAN), username und Passwort konfiguriert werden. Der Username ist die “Telefonnumer”, also z.B. 10 für das Telefon am Empfang. Passwort ist das oben genannte ‘secret’. Sie sollten diese Secrets ernster nehmen, als es hier scheint, da ziemlich üble Dinge geschehen können, wenn ein Bösewicht sich von aussen für eins Ihrer Telefone ausgeben kann. (Er kann zum Beispiel eine kostenpflichtige Nummer, die ihm gehört, für 9.99 pro Minute die ganze Nacht anrufen). Also ein kompliziertes Passwort wählen. Man muss es ja nur beim Einrichten des Telefons angeben.
Wenn Asterisk mit dieser sip.conf läuft, sollte sich jedes korrekt konfigurierte Telefon sofort verbinden und im seinem Status “verbunden” anzeigen. Wir warten aber im Moment noch mit Starten, weil Asterisk ohne Dialplan nicht viel anfangen kann.
extensions.conf
Das ist der vielbeschworene und beliebig komplizierte Dialplan. Wir fangen mal ganz klein an.
[globals]
HAUPTNUMMER=SIP/10
ZIMMER1=SIP/20
ZIMMER2=SIP/30
; Das ist der Kontext "Praxis". Bei der Definition der Telefone in
; sip.conf haben wir diesen Kontext mit 'context=praxis' genannt.
; Dieser Teil des Dialplans gilt also für alle Geräte dieses Kontexts
[praxis]
exten => 99,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
exten => 10,1,Dial(${HAUPTNUMMER})
exten => 20,1,Dial(${ZIMMER1})
exten => 30,1,Dial(${ZIMMER2})
Gar nicht so schwierig, nicht wahr? Am Anfang definieren wir ein paar Variablen, die wir weiter unten referenzieren, und im Kontext [praxis] stehen dann ein paar seltsame Zeilen. Jetzt ist es soweit: Wir müssen Asterisk starten.
Das heisst: Wenn Sie Asterisk so wie oben gezeigt installiert haben, dann läuft es bereits im Hintergrund. Raspian installiert es nämlich als Service, der automatisch gestartet wird. Für unsere Zwecke hier wollen wir den Service zunächst stoppen:
sudo service asterisk stop
Und dann als Vordergrundprogramm wieder starten:
sudo asterisk -cv
Starten Sie jetzt Ihr Softphone im Zimmer 1 und wählen Sie dort 20. Wow! Das Telefon in Zimmer 2 klingelt. Sie können jetzt bereits abnehmen und miteinander sprechen.
Dann wählen Sie spasseshalber mal die 99. Der Anrufbeantworter müsste sich melden. In der Raspi-Konsole sehen Sie ein paar Zeilen durch rasen, die mehr oder weniger unverständlich erläutern, was Asterisk gerade tut, um die Gespräche zu vermitteln.
Fazit
Nun gut. Mit viel Mühe haben wir jetzt also eine Holzversion von Skype installiert? Ist das alles? Natürlich nicht. Aber mehr gibt es erst später.