Tipps und Tricks rund um Asterisk (VoIP / Trunk Software), FreePBX (GUI für Asterisk) und Raspbx (Raspberry PI 3 Portierung von FreePBX)
Inhaltsverzeichnis
Generelles Verständnis
Asterisk ist vereinfacht gesagt ein VoIP Client und Server zugleich. Es baut eine Verbindung zum SIP Provider auf, von dem man seine Telefonnummern erhält und stellt gleichzeitig SIP Zugänge für die anzuschließenden Telefone bereit.
Begriffe
- Trunk
- SIP Provider im Internet
- Extension
- Die Nebenstelle oder der Benutzer, der an Asterisk angeschlossen werden soll mit eigener Durchwahl.
- User
- Benutzer, die sich am WebUI anmelden können. Können mit Nebenstellen verknüpft werden.
- Outbound Routes
- Regeln, die beim Wählen einer Nummer durch eine Nebenstelle entscheiden, welcher Trunk verwendet werden soll.
- Inbound Routes
- Regeln, die bei ankommenden Gesprächen entscheiden, auf welche Neben stelle das Gespräch weitergeleitet werden soll, also auch welches Telefon klingeln soll.
- DID / DDI
- Direct Inward Dialing / Direct Dial In. Bezeichnet das Prinzip, dass die gewählte Nummer an die PBX Zentrale übergeben wird, um dort das Routing auf die Endgeräte vornehmen zu können.
Trunk Konfiguration
Die Provider können Daten erwarten, die voneinander leicht abweichen. Als recht universell haben sich die Werte von/für toplink-xpress herausgestellt:
Allgemeines
Asterisk bedient sich für das Registrieren beim VoIP Anbieter (für eingehende Telefonate) eines sog. Register-Strings, der sich aus Logindaten, dem Server und ggf. anderen Parametern zusammensetzt.
- Er hat dieses Format
[peer?][transport://]user[@domain][:secret[:authuser]]@host[:port][/extension][~expiry]
- oder
[peer?][transport://]user[@domain][:secret[:authuser]]@trunkname[/extension][~expiry]
- In den meisten Fällen setzt er sich lediglich so zusammen
user:secret@host[:port][/user]
- oder
user:secret@trunkname[/user]
Trunk Parameter allgemein
- qualify=yes
- means that your system will periodically send a request that the other system identify itself
- net=yes
- tells Asterisk that the system you are communicating with is or may be behind a NAT, and that Asterisk should ignore the IPAddress in the from line and instead use the IP address that the packets actually come from
- keepalive=30
"30" is the number of seconds that Asterisk will wait between sending keepalive messages. Keepalive messages are important if you are behind a NAT firewall, because if the firewall closes the port, you may not receive all incoming calls
Toplink
Die Outgoing Parameter:
- Trunk Name
- toplink
- PEER Details
- type=peer
- username=<username>
- secret=<password>
- insecure=port,invite
- host=sip.toplink-xpress.de
- fromuser=<username>
- fromdomain=sip.toplink-xpress.de
Die Incoming-Parameter:
- USER Context
- <leer>
- USER Details
- <leer>
- Register String
- <username>:<password>@sip.toplink-xpress.de/<username>
- Alternativ: <username>:<password>@toplink/<username>
o2
Die Outgoing Parameter:
- Trunk Name
- alicesip
- PEER Details
- type=peer
- username=<Vollständige Rufnummer ohne +>
- secret=<password>
- insecure=port,invite
- host=sip.alice-voip.de
- fromuser=<Vollständige Rufnummer ohne +>
- fromdomain=sip.alice-voip.de
- qualify=no
- caninvite=no
- canreinvite=no
- context=public
- keepalive=120
Die Incoming-Parameter:
- USER Context
- <leer>
- USER Details
- <leer>
- Register String
- <username>:<password>@alicesip/EXT~1800
EXT steht hier für die Extension-Nummer, auf der es klingeln soll. o2 liefert keine DID mit, so dass man Inbound Rules verwenden könnte, um den Anruf zu leiten, sondern man legt im Register-String bereits fest, an welcher Extension der Anruf eingehen soll. Noch dazu muss diese Extension im [public] Context definiert sein!
Hierzu muss man sich auf per SSH auf den Raspbx begeben und die Datei /etc/asterisk/extensions_custom.conf
editieren mit dem Inhalt:
[public]
include => from-trunk
Jetzt werden Anrufe im Context [public] genauso behandelt wie andere externe, landen aber auf der Extension EXT.
Wenn aber z.B. keine bestimmte Extension, sondern eine Gruppe klingeln soll, muss man sich eine Art "Dummy"-Extension (z.B. 99) anlegen, die man dann so konfiguriert, dass sie alle Anrufe direkt umleitet auf das gewünschte Ziel. Hier kann das Modul "Follow Me" behilflich sein.
Fonial
Die Outgoing Parameter:
- Trunk Name
- fonial
- PEER Details
- type=friend
- host=sip.alice-voip.de
- username=<Benutzername>
- secret=<Passwort>
- fromdomain=sip.plusnet.de
- nat=force_port,comedia
- qualify=yes
- insecure=port,invite
- canreinvite=no
Die Incoming-Parameter:
- USER Context
- <leer>
- USER Details
- <leer>
- Register String
- <username>:<password>@fonial/<Vollständige Rufnummer mit +>
Bei Fonial ist die Besonderheit, dass der letzte Teil des Register-Strings bei einem Anruf als DID mitgegeben wird. Man muss hier also die vollständige Rufnummer eintragen (und nicht den Benutzernamen, wie auf der fonial website), um eingehende Routen auf Basis der angerufenen Nummer definieren zu können.
Inbound Routes
Diese Regeln leiten die Anrufe an die korrekten Nebenstellen weiter. Es muss für jede extern erreichbare Nummer jeweils eine Inbound Route geben, in der die DID (komplette externe Nummer) gesetzt ist. "Set Destination" bestimmt dann die Nebenstelle, an die der Anruf gehen soll.
Für interne Anrufe muss es eine Inbound Route geben, in der die CID mit der internen Nebenstellennummer gesetzt ist und ebenfalls unter "Set Destination" die gewünschte Nebenstelle.
Outbound Routes
Eine Outbound Route wird anhand der gewählten Nummer aktiviert. Das "Dial Pattern" bestimmt, wie die gewählten Nummern erkannt und ggf. modifiziert werden.
Ein Pattern gilt dann als erfüllt, wenn prefix
und [match pattern]
mit der Nummer übereinstimmen. Danach wird allerdings prefix
von der Nummer
entfernt und (prepend)
vorangestellt.
Default outgoing
So möchte man z.B., dass lokalen Nummern die Ortsvorwahl vorangestellt wird. Lokale Nummern beginnen hier in D. mit einer Zahl größer 1. Dafür steht der Buchstabe N. Gefolgt von beliebigen und beliebig vielen weiteren Nummern. Hierfür steht der Punkt. Daraus ergibt sich bei der Ortsvorwahl 02206 das folgende Pattern:
(+492206) | [N.]
=> Es wird nichts entfernt, aber +492206 vorangestellt. Aus 80105 wird so +49220680105
Aus Nummern, die mit Vorwahlen (also einer 0) beginnen, möchte man das Internationale Format machen. Das ist dann dieses Pattern:
(+49) 0 | [Z.]
=> Greift bei einer beliebigen Nummer, die mit 0 beginnt und mit 1...9 weitergeht, entfernt die 0 und setzt +49 davor. Aus 0220680105 wird so: +49220680105.
Aber auch beim internationalen Format soll unsere Regel greifen. Dafür sorgt dieses Pattern:
() | [+Z.]
=> Greift bei allen international formatierten Nummern und verändert nichts.
Internal
Werden 3-stellige Nummern gewählt, die mit 2 beginnen (110 und 112 müssen ausgehende Nummern sein!), soll das Gespräch intern geroutet werden. Dafür legt man eine eigene Route an, markiert sie als Intra-Company, ohne Trunk und legt das folgende Pattern dort an:
() | [NXX]
=> Greift bei allen 3-stelligen Nummern, die mit einer Zahl größer als 1 beginnen.
Special numbers
Sondernummern sind Notfallnummern, aber auch die Auskunft usw. Diese beginnen mit einer 1, ihnen soll aber nicht die Ortsvorwahl vorangestellt werden. Daher legt man eine neue Route an, markiert sie mit Emergency und legt das folgende Pattern an:
() | [[1].]
=> Greift bei allen beliebig langen Nummern, die mit einer 1 beginnen.
Die Email-Konfiguration kann über die Oberfläche nur vorgenommen werden, wenn man "Sysadmin Pro" erworben hat. Ansonsten muss man das auf der Shell manuell tun:
Methode 1
(Funktioniert bei mir nicht, da /etc/postfix schon nicht vorhanden ist)
edit /etc/postfix/main.cf:
relayhost = SMTP server address
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_generic_maps = hash:/etc/postfix/generic
edit /etc/postfix/sasl_passwd:
relayhost username:password
execute:
postmap hash://etc/postfix/sasl_passwd
edit /etc/postfix/generic:
<source> <real_email_address@real-comain.tld>
...
execute:
postmap /etc/postfix/generic
do a postfix reload:
service postfix restart
Methode 2
- Per SSH wird dieser Befehl ausgeführt:
dpkg-reconfigure exim4-config
In dem Setup alle Einstellungen so belassen, wie sie sind, außer bei der Frage nach "IP address or the host name of a mail server". Hier die SMTP-Adresse eintragen! - In die Datei
/etc/exim4/passwd.client
am Ende die Zeile einfügen:SMTP_HOSTNAME:USERNAME:PASSWORD
dabei natürlich die echten Werte einsetzen! - In die Datei
/etc/email-addresses
am Ende diese Zeilen einfügen:root: from@server.de
asterisk: from@server.de
dabei wieder die echten Werte einsetzen! - Befehl
update-exim4.conf
ausführen! - Testen:
send_test_email target@server.de
Update
Updates über das FreePBX WebUI sollten in der folgenden Reihenfolge vorgenommen werden:
- FreePBX Framework. Danach Apply Config
- Core. Danach Apply Config
- Process Management. Danach Apply Config
- Restliche Module. Danach Apply Config und Neustart.
Tampered Files
Wenn im Dashboard eine Meldung erscheint, die von "tampered files" erzählt, müssen über SSH diese Befehle ausgeführt werden:
amportal chown
amportal a ma refreshsignatures
amportal a reload
Backup directory placeholders
- __AMPWEBROOT__
- /var/www/html
- __ASTETCDIR__
- /etc/asterisk
- __AMPSBIN__
- /usr/sbin
- __ASTVARLIBDIR__
- /var/lib/asterisk
- __ASTSPOOLDIR__
- /var/spool/asterisk:In diesem Verzeichnis befindet sich auch das "backup"-Verzeichnis selbst, in dem die Backups abgelegt werden.
Quellen und Tutorials
rogermayer.info/asterisk-konfiguration-fur-toplink-xpress-sip-trunk
www.toplink-xpress.de/wie-kann-ich-meinen-ip-anschluss-an-einer-asterisk-basierten-anlage-einrichten
www.voip-info.org/asterisk-config-sipconf
wiki.freepbx.org/display/FPG/PBX+GUI+Home
www.youtube.com/watch?v=77KzDLij8eQ
wiki.freepbx.org/display/PPS/Setup+Postfix+Manually
www.raspberry-asterisk.org/documentation/#email
Elektronik-Kompendium - Audio-Codecs zur Sprachdigitalisierung