Springe zum Inhalt

1

Von FreeSwitch über FusionPBX zu Asterisk und FreePBX. Eine spannende und subjektiv erzählte Reise.

Die letzten paar Tage war es hier ziemlich still auf dem Kanal. Das lag daran, dass ich mich ausgiebig mit dem Thema PBX beschäftigt habe, was zwar Public Branch Exchange heißt, aber nichts anderes als eine gute alte Telefonanlage bedeutet. In modernen Zeiten natürlich über VoIP. ...weiterlesen "FreePBX: Aufregende Zeiten"

1

Die Kombination aus FusionPBX und FreeSwitch stellt eine einfach zu installierende "Voice over IP"-Telefonanlage bereit, die für Privatanwender als auch für anspruchsvolle Lösungen interessant und einsatzfähig ist.

Nach der Installation und dem Durchführen der ersten Schritte sind Telefonate im internen Netz möglich. Bei ausgehenden Anrufen legt einem allerdings die Telekom einige Steine in den Weg. Die Telekom-VoIP-Server akzeptieren nicht irgendwelche Absenderadressen wie z.B. die intern gesetzte Extension. Ohne Anpassung werden Anrufe dann nur mit einem Statuscode "407 Forbidden" quittiert.

Ausgehende Anrufe

Für ein Gateway zur Telekom muss immer die korrekte Telekom-Telefonnummer als Absender in den SIP-Nachrichten mitgeteilt werden. In FusionPBX kann die korrekte Nummer unter Dialplan -> Outbound Routes eingestellt werden. Vor der Aktion bridge müssen folgende Aktionen eingefügt werden:

FusionPBX Outgoing Routes Settings

Für effective_caller_id_number und effective_caller_id_name muss die vollständige Telefonnummer inklusive Vorwahl angegeben werden. Damit erhalten alle ausgehenden Anrufe über dieses Gateway die von der Telekom geforderte Rufnummer.

Eingehende Anrufe

Da man mit einem Telekom-VoIP-Anschluss grundsätzlich drei Telefonnumern erhält (analog ISDN), ist es naheliegend, in FusionPBX drei Gateways mit je einer Rufnummer einzurichten. FusionPBX verwendet allerdings zur weiteren Verarbeitung des eingehende Anrufs den Usernamen, welcher bei allen Telekom-Rufnummern gleich ist. Eine Behandlung des Anrufs pro Rufnummer ist dadurch nicht möglich.

Abhilfe schafft der Eintrag der eigenen Telefonnummer pro Gateway. In FusionPBX erreicht man das mit folgenden Einstellungen beim entsprechenden Gateway unter Accounts -> Gateways:

FusionPBX Gateway Telekom Settings

  • Gateway: frei wählbarer Name des Gateways
  • Username: Telekom E-Mail-Adresse, z.B. mustermann@t-online.de
  • Password: das für Webzugriff im Telekom-Kundencenter eingestellte Kennwort
  • From User: eigene Telefonnummer inklusive Vorwahl
  • Proxy und Realm: tel.t-online.de
  • Extension: eigene Telefonnummer inklusive Vorwahl

Mit den obigen Einstellungen sind Anrufe nach Extern möglich, da sie entsprechend den Telekom-Anforderungen gesendet werden. Ebenso ist eine Unterscheidung der eingehenden Anrufe nach den eingestellten Rufnummern möglich.

Nach der Installation von FusionPBX auf einem Raspberry Pi 2 entsprechend der Anleitung und dem Einrichten einer Extension über die Weboberfläche von FusionPBX kann sich das erste Gerät mit FreeSwitch verbinden. Beim ersten Anruf erhält man allerdings folgende Hinweis- und Fehlermeldungen:

Audio Codec Compare [SILK:99:24000:20:0:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[GSM:3:8000:20:13200:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[GSM:3:8000:20:13200:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[GSM:3:8000:20:13200:1]
...
Hangup sofia/internal/1000@xxx.xxx.xxx [CS_NEW] [INCOMPATIBLE_DESTINATION]

Es konnte kein kompatibler Codec für beide Geräte (SIP-Telefon und FreeSwitch) gefunden werden.

Grund dafür ist, dass der unter Debian Wheezy (auf dem Raspbian aktuell basiert) GCC 4.6 als Standard-Compiler verwendet und GCC 4.6 auf der ARM-Plattform FreeSwitch falsch übersetzt. quentusrex hat den Fehler umfangreich analysiert und dokumentiert und bereits Bugreports erstellt.

Abhilfe schafft erst GCC 4.7. Mit folgenden Kommandos wird GCC 4.7 auf dem Raspberry Pi 2 installiert und als Default-Compiler eingerichtet. Beim letzten Kommando erscheint eine Auswahl, in der 4.7 als Default gewählt werden kann (Quelle).

$ sudo apt-get install gcc-4.7 g++-4.7
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
$ sudo update-alternatives --config gcc

Anschließend muss natürlich FreeSwitch noch einmal kompiliert werden. Danach jedoch funktioniert die Codec-Auswahl korrekt.

Ich wollte auf einem komplett neu aufgesetzten Raspbian FusionPBX entsprechend der Anleitung installieren. Verwenden wollte ich die vorgeschlagene Konfiguration mit Nginx und Sqlite. Leider schlägt nach ein paar Stunden Kompilieren der letzte Konfigurationsschritt im Webbrowser fehl, da das Timeout in Nginx für FastCGI-Skripte (in dem Fall PHP) in der Standardeinstellung zu kurz eingestellt ist. Der kleine Raspi müht sich nach Kräften, schafft es aber nicht in der vorgegebenen Zeit. Die Einrichtung im Webbrowser schlägt mit "Gateway-Timeout" fehl. Abhilfe schafft der Eintrag

fastcgi_read_timeout 300;

in der Datei /etc/nginx/fastcgi_params. Nginx-Restart nicht vergessen. Damit die abschließende Konfiguration von FusionPBX neu gestartet wird, muss noch die Datei /var/www/fusionpbx/resources/config.php gelöscht und die Webseite auf dem Raspi neu aufgerufen werden.