Asterisk ist eine freie Software, die seit 1999 kontinuierlich weiterentwickelt wird und auf nahezu jeder Rechnerplattform die Funktionalitäten einer vollwertigen Telefonanlage bereitstellt. Sie unterstützt IP-Telefonie (VoIP) mit verschiedenen Netzwerkprotokollen und lässt sich über zusätzliche Hardware auch mit klassischen Telefonanschlüssen wie POTS (analog), ISDN-Basisanschluss (BRI) oder Primärmultiplexanschluss (PRI, E1/T1) integrieren. Ursprünglich von Mark Spencer bei der Firma Digium entwickelt, hat sich um Asterisk eine aktive Entwicklergemeinschaft gebildet, die zahlreiche Erweiterungen und Applikationen beigesteuert hat. Der Name leitet sich vom englischen Begriff für das Sternsymbol („Asterisk“) ab.
Asterisk steht unter einer dualen Lizenz zur Verfügung: einerseits unter der GNU General Public License (GPL) als freie Software, andererseits unter einer proprietären Lizenz, die den Einsatz in nicht-offenen, kommerziellen Projekten ermöglicht.
Technisch basiert Asterisk hauptsächlich auf dem SIP-Protokoll (Session Initiation Protocol), um Verbindungen zwischen Endgeräten wie IP-Telefonen oder Softphones herzustellen. Die Konfiguration erfolgt über textbasierte Konfigurationsdateien und erlaubt eine sehr flexible, bei Bedarf hochkomplexe Anpassung. Um diesen Einstieg zu erleichtern, existieren mittlerweile grafische Frontends wie FreePBX, die viele Konfigurationsaufgaben visuell umsetzen.
Dieses How-To bezieht sich auf den Betrieb eines Asterisk-Servers mit FreePBX auf einem Raspberry Pi 4 Model B Rev 1.5. Ich selbst habe ein ähnliches Setup bereits seit 2020 zuverlässig auf einem Raspberry Pi 3 Model B betrieben. Mittlerweile läuft meine Telefonanlage eben auf einem Raspberry Pi 4 B.
Meine Motivation dafür reicht zurück bis 2010: Ich wollte weg von den typischen "Blackbox"-Lösungen der großen Telefonanbieter – etwa Speedport, FritzBox oder Zyxel. Diese bieten nicht nur eingeschränkte oder schlecht umgesetzte Firewall-Funktionen, sondern auch keine ernstzunehmenden Funktionen im Bereich der Telefonieinfrastruktur. Asterisk hingegen ist sehr schnell zu einer leistungsfähigen, flexiblen und hochwertigen Telefonanlage ausbaubar – und das auf günstiger ARM-basierter Hardware wie dem Raspberry Pi. Interessanterweise basieren auch viele Router der Anbieter auf ARM-Prozessoren – allerdings in stark beschränkter und geschlossener Form. Warum also nicht gleich ein offenes, frei konfigurierbares System nutzen?
Des Weiteren ist meine Motivation zu diesem umfangreichen HowTo der offensichtliche Mangel an Anleitungen zur Installation von Asterisk und FreePBX - insbesondere eben auf Raspberry Pi. Es existiert hier in Deutschland zwar ein Video-Projekt eines Dienstleisters auf Youtube, das aber aus meiner Sicht eher unterhaltsam als wirklich dienlich ist. Die Videos sind teilweise sehr lang und es gibt vor allem keine richtige Struktur, um gezielt nach einem Einstellungspunkt zu suchen. Also, wenn man gezielt nach Dialpatterns sucht, geht das mit Glück nur über die Dateinamen der Videos. Oder man will zum Routing ausgehender Telefonate speziell etwas wissen, so muss man zuerst die teilweise unsortierten Videos sichten. Das macht keinen Spaß. Und das ist auch ein Grund, warum ich hier keine Installationsvideos verwende, sondern eher auf Screenshots setze. Dieser Mangel des schnell einmal Nachschlagens ist eine weitere Motivation, dieses HowTo zur verfügung zu stellen.
Der Einsatz des Raspberry Pi als Asterisk-Server bringt allerdings eine technische Besonderheit mit sich, die – wenn man sie nicht beachtet – zu Problemen führen kann: Die Raspberry Pi-Modelle verwenden eine SD-Karte als primäres Speichermedium („Festplatte“). Und SD-Karten sind für Systeme mit hohen oder häufigen Schreibzugriffen schlichtweg nicht ausgelegt.
Insbesondere der Verzeichnisbaum /var
, in dem viele Dienste ihre Log- und Spool-Dateien ablegen, ist ein kritischer Faktor. Bei Asterisk betrifft das speziell das Verzeichnis /var/spool/asterisk
, in dem sich folgende, oft schreibintensive Inhalte befinden:
Monitor()
)In meinen frühen Asterisk-Experimenten sind mir daher gleich mehrere SD-Karten bereits beim Einrichten des Systems defekt gegangen – schlicht aufgrund der massiven Schreibzugriffe.
Die zuverlässigste Lösung besteht darin, den /var
-Verzeichnisbaum (und idealerweise auch /home
) auf eine externe USB-Festplatte oder SSD auszulagern. Ab dem Raspberry Pi 3 ist – bei Verwendung eines leistungsfähigen Netzteils – genug Strom vorhanden, um eine USB-Festplatte zuverlässig zu betreiben. Diese kann problemlos als eigenes Dateisystem eingebunden (gemountet) werden. Das schützt nicht nur die SD-Karte vor frühzeitigem Verschleiß, sondern verbessert auch die Systemstabilität und Performance.
Ein Asterisk-Server auf dem Raspberry Pi ist durchaus in der Lage, über 100 SIP-Accounts (also einzelne Nebenstellen oder Rufnummern) sowie mehrere IAX2-Links zu externen Asterisk-Servern zu verwalten. In der Praxis ist der Raspberry Pi erst bei mehreren hundert gleichzeitig aktiven Verbindungen an seiner Leistungsgrenze – und das auch nur dann, wenn der Sprachverkehr tatsächlich über den Server selbst geleitet wird. In den meisten Fällen erfolgt die Sprachübertragung jedoch direkt zwischen den Endgeräten (peer-to-peer), sodass der Pi lediglich die Signalisierung übernimmt und damit deutlich entlastet wird.
Bevor es mit der eigentlichen Konfiguration losgeht, muss der Raspberry Pi selbst vorbereitet werden. Da sowohl Asterisk als auch FreePBX ursprünglich für den Betrieb auf Systemen mit x86- bzw. amd64-Architektur ausgelegt sind, ist ein gewisser Anpassungsaufwand nötig, um diese Software auf einem ARM-basierten System wie dem Raspberry Pi lauffähig zu machen.
Hier leistet das Projekt von Ronald Raike wertvolle Hilfe. Er stellt eine Installationsroutine bereit, die regelmäßig gepflegt wird und die Installation sowie Integration von Asterisk und FreePBX auf dem Raspberry Pi deutlich vereinfacht. Diese Automatisierung spart nicht nur Zeit, sondern umgeht viele der typischen Stolpersteine bei der Kompilierung und Einrichtung auf der ARM-Plattform.