Installation FreePBX 14 mit Asterisk Certified auf Debian 10

System auf den neusten Stand bringen:

apt-get update
apt-get upgrade

Abhängigkeiten installieren:

apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 wget net-tools mariadb-server mariadb-client bison flex php-pear curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp2-dev libspandsp-dev sudo subversion libmariadbclient-dev unixodbc

PHP 5.6 installieren:

apt-get install -y apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-xml php5.6-mbstring

PHP 5.6 aktivieren:

update-alternatives --config php

System neustarten:

reboot

Legacy pear Abhängigkeiten installieren:

pear install Console_Getopt

Download der aktuellen Certified Asterisk Version:

wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/asterisk-certified-13.21-current.tar.gz

Asterisk-Sourcen entpacken:

tar xfvz asterisk-certified-13.21-current.tar.gz

Asterisk-Sourcen entpacken und Abhängigkeiten installieren:

cd asterisk-certified-13.21-cert3
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install

Asterisk-Module auswählen:

./configure --with-pjproject-bundled
make menuselect

Module Auswählen:

addons/format_mp3
addons/res_config_mysql
applications/app_chanisavail
applications/app_minivm
cdr/cdr_csv
cdr/cdr_odbc
channel drivers/chan_sip
ressource modules/res_hep
ressource modules/res_hep_pjsip
ressource modules/res_hep_rtcp
ressource modules/res_pjsip_history
core sounds/core-sounds-en-alaw
moh/alaw
extra sound packages/extra-sounds-en-alaw

Asterisk compilieren und installieren:

make
make install
make samples
make config
ldconfig

Benutzer und Rechte für Asterisk setzen:

useradd -m asterisk
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk
rm -rf /var/www/html

Apache2-User bearbeiten:

Runuser und Rungroup auf ‚asterisk‘

nano /etc/apache2/envvars
service asterisk stop
service asterisk start

Asterisk-Konfigurieren:

nano /etc/asterisk/asterisk.conf 

[directories]
...
runuser = asterisk        ; The user to run as.
rungroup = asterisk        ; The group to run as.
...

Einige Einstellungen für das Webinterface setzen:

sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

a2enmod rewrite
service apache2 restart

NodeJs installieren:

curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs

ODBC Treiber installieren:

cd /root
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-2.0.18/mariadb-connector-odbc-2.0.18-ga-debian-x86_64.tar.gz
tar xfvz mariadb-connector-odbc-2.0.18-ga-debian-x86_64.tar.gz
cp -R lib/ /usr
cp -R share/ /usr

ODBC Konfiguration setzen:

cat >> /etc/odbcinst.ini << EOF
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmaodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1

EOF
cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
driver=MySQL
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock
option=3

EOF

FreePBX herunterladen und entpacken:

cd /usr/src
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz
tar vxfz freepbx-14.0-latest.tgz
rm -f freepbx-14.0-latest.tgz
cd freepbx

Modifikation des FreePBX installers:

nano /usr/src/freepbx/installlib/installcommand.class.php

// Parse Asterisk version.
//if (preg_match('/^Asterisk (?:SVN-|GIT-)?(?:branch-)?(\d+(.\d+))(-?(.)) built/', $astver, $matches)) {
  $determined = true;
  if (version_compare($matches[1], "11", "lt") || version_compare($matches[1], "17", "ge")) {
    $output->writeln("Error!
");
    $output->writeln("Unsupported Version of ". $matches[1]."
");
    $output->writeln("Supported Asterisk versions: 11, 12, 13, 14, 15
");
    //exit(1);
    $astver="13";
  }
  $output->writeln("Yes. Determined Asterisk version to be: ".$matches[1]);
  break;
}

FreePBX installieren:

./start_asterisk start
./install -n

Updaten aller Module:

fwconsole ma updateall

Aufräumen:

cd /root
rm asterisk-certified-13.21-current.tar.gz
rm mariadb-connector-odbc-2.0.18-ga-debian-x86_64.tar.gz
rm -R lib/
rm -R share/
rm -R asterisk-certified-13.21-cert3

Telekom Entertain hinter pfSense Firewall

Problem:

Nach wenigen Sekunden Live-TV stockt der Stream und kommt zum erliegen.

Lösung:

Nach wenigen Augenblicken wird der Entertain LiveStream auf Multicast umgeschaltet. Der Multicast Traffic wird durch pfSense geblockt. Voraussetzung für Entertain ist, dass der MediaReceiver direkt am pfSense-Host oder über IGMPv3 fähige Switche angebunden ist. Außerdem müssen folgende Einstellungen in pfSense gesetzt werden:

IGMP-Proxy einrichten

  1. Im Menü Services→IGMP Proxy auswählen.
  2. Mittels Add ein Upstream-Netz hinzufügen.
    1. Als Interface WAN auswählen.
    2. Beschreibung erhält eine eindeutige Beschreibung zur Identifikation, z.B. „Entertain Upstream“.
    3. Als Type wird Upstream Interface gewählt.
    4. Treshold bleibt leer.
    5. Nun die Netzwerk hinzufügen:
      • 87.128.0.0/11
      • 224.0.0.0/4
      • 193.158.0.0/15
      • 239.35.0.0/16
    6. Zuordnung speichern.
  3. Nun mittels Add ein Downstream-Netz hinzufügen:
    1. Als Interface LAN wählen.
    2. Eine Beschreibung eintragen, z.B. „Lokales Netz“.
    3. Als Type wird Downstream Interface gewählt.
    4. Treshold bleibt leer.
    5. Nun ein Netzwerk hinzufügen:
      • Es wird die IP-Adresse des LAN-Interfaces eingetragen, also z.B. „192.168.1.1 / 24“.
    6. Zuordnung speichern.

Firewall-Regeln
Im Vergleich zu früheren Konfigurationen müssen hier explizit Firewall-Regeln für den Multicast-Datenverkehr angelegt werden.

  1. Regel für IGMP anlegen:
    • Action: Pass
    • Interface: WAN
    • Address Family: IPv4
    • Protocoll: IGMP
    • Source: Any
    • Destination: ANY???
    • Description: z.B. IPTV
    • Advanced Options: Allow IP Options muss aktiviert sein.
  2. Regel für UDP anlegen:
    • Action: Pass
    • Interface: WAN
    • Address Family: IPv4
    • Protocol: UDP
    • Source: Any
    • Destination: ANY??
    • Description: z.B. IPTV

Nun dürfte der Internetzugang inklusive EntertainTV wie erwartet funktionieren.

Asterisk und Vodafone Anlagen-Anschluss Plus Trunk

Problem:

Ein Vodafone Anlagen-Anschluss Plus soll mit Asterisk(FreePBX) genutzt werden. Dabei wird auf die Verwendung der „PlusBox“ verzichtet.

Lösung:

  1. Internetverbindung mit Zugangsdaten herstellen.
  2. Portweiterleitungen von 5060 & 10000-20000 (SIP&RTP) auf Asterisk Server einrichten.
  3. chan_pjsip auf Port 5060 einrichten.
  4. Zuständigen SBC ermitteln:
    1. SBC-Pool aus OneView-Portal auslesen.
    2. SRV Lookup: _sip._udp.<SBC-Pool>
    3. Bei mehreren Ergebnissen ist die niedrigste Priorität der primäre SBC, alle weiteren dienen als Backup.
  5. PJSIP-Trunk mit folgenden Daten einrichten:
    1. Outbound CallerID: 0<ONK><KOPFNR>0
    2. Authentication: none
    3. Registration: none
    4. SIP-Server: sipt.vf-office.net
    5. SIP-Server Port: 5060
    6. Qualify Frequency: 0
    7. Outbound Proxy: sip:<Primärer SBC>:5060\;lr
    8. From Domain: sipt.vf-office.net
    9. Match (Permit): <Alle Hosts aus dem SBC Pool>
  6. Der Datei extensions_custom.conf folgenden Inhalt anfügen (<ONK> und <KOPFNR> ersetzen!!):

[macro-dialout-trunk-predial-hook]
exten => s,1,NoOp(******************** PRE DIAL HOOK ********************)
exten => s,n,Set(HASH(_SIPHEADERS,P-Preferred-Identity)=<sip${SPRINTF(%c,58)}+49<ONK><KOPFNR>0@sipt.vf-office.net:5060${SPRINTF(%c,59)}user${SPRINTF(%c,61)}phone>)
exten => s,n,Set(HASH(_SIPHEADERS,Privacy)=none)
exten => s,n,MacroExit()

Weitere Informationen gibt es hier: https://www.vodafone.de/media/downloads/pdf/VF-SIP-Trunking-local-gateway-Interface-Specification-V1.0.pdf

Zusatz:

Ein Leser dieses Blogs hat mir freundlicherweise die Konfigurationen für einen reinen Asterisk-Server zur Verfügung gestellt. Vielen Dank für diesen Beitrag.

extensions.conf

[vodafone-out]
; Ausgehender Anruf
exten => _X.,1,Dial(PJSIP/vodafone/sip:${EXTEN}@sipt.vf-office.net,,b(pre-dial-vodafone^addheader^1))
same => n,Hangup()

; Ausgehender Anruf mit +
exten => _+X.,1,Dial(PJSIP/vodafone/sip:${EXTEN}@sipt.vf-office.net,,b(pre-dial-vodafone^addheader^1))
same => n,Hangup()

[pre-dial-vodafone]
exten => addheader,1,Set(PJSIP_HEADER(add,P-Preferred-Identity)=<sip:+49<ONK><KOPFNR>0@sipt.vf-office.net:5060\;user=phone>)
exten => addheader,n,Return()

pjsip.conf

;===============TRANSPORT

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
local_net=<LAN_NET/CIDR> ; CHANGEME
external_media_address=<PUBLIC_IP> ; CHANGEME
external_signaling_address=<PUBLIC_IP> ; CHANGEME

; VODAFONE TRUNK
;===============TRUNK

[vodafone]
type=endpoint
transport=transport-udp
context=vodafone-in
disallow=all
allow=alaw
aors=vodafone
from_user=+49<ONK><KOPFNR>0 ; CHANGEME
from_domain=sipt.vf-office.net
outbound_proxy=sip:<PRIMÄRER SBC>:5060\;lr ; CHANGEME
language=de
tone_zone=de
direct_media=no

[vodafone]
type=aor
contact=sip:sipt.vf-office.net:5060
qualify_frequency=0
outbound_proxy=sip:<PRIMÄRER SBC>:5060\;lr ; CHANGEME

[vodafone]
type=identify
endpoint=vodafone
match=<PRIMÄRER SBC> ; CHANGEME
match=<SEKUNDÄRER SBC> ; CHANGEME

Verzeichnis ungültig

Problem:

Beim öffnen von Dateien auf einem Netzlaufwerk erscheint die nachfolgende Meldung:

Lösung:

Ein Neustart der Synology DiskStation hat das Problem behoben.

Outlook 2016 versendet keine Entwürfe

Problem:

Outlook zeigt beim versenden eines E-Mail Entwurf folgende Fehlermeldung:

Lösung:

Kaspersky E-Mail AntiVirus stört die E-Mail Kommunikation. Nachdem das Modul deaktiviert wurde war wieder alles i.O.

Telekom lehnt vereinzelte SIP-INVITE’s ab

Problem:

Die Telekom lehnt vereinzelte SIP-INVITE’s mit dem Fehlercode „606 – Not Acceptable“ und der Begründung „Q.850;cause=88;text=’5′“ ab.

Hintergrund:

Der Fehler tritt auf, wenn sich der B-Teilnehmer im Netz von Vodafone befindet und der Codec G711u in der RTP-Map für einen SIP-INVITE angeboten wird. Vodafone lehnt den INVITE mit der o.g. Fehlermeldung dann ab.

Laut Telekom-Technik wurde das Problem dem B-Carrier mitgeteilt, jedoch habe man noch keine Reaktion erhalten.

Workaround:

Den Codec G711u deaktivieren, scheint das Problem zu beheben.

Netgear ReadyNAS DUO mountet keine shares

Problem:

Ein Netgear ReadyNAS DUO mountet die konfigurierten shares im RAID 1 nicht mehr.

Lösung:

Beide Platten in eine Ubuntu Live-CD einhängen. Im Terminal wie folgt vorgehen:

  1. sudo su
  2. add-apt-repository universe
  3. apt-get update
  4. apt-get install fuseext2 lvm2
  5. modprobe fuse
  6. vgscan
  7. vgchange -ay c
  8. fuseext2 -o ro -o sync_read /dev/c/c /mnt

Das Laufwerk sollte nun readonly in /mnt erreichbar sein. Die Dateien müssen extern gesichert werden.

Surface Book bootet nicht von USB Stick

Problem:

Das Surface Book bootet nicht von mit Rufus erstellten USB-Stick.

Lösung:

Das Surface Book bootet nur 64bit Images. Der Stick muss mit folgenden Einstellungen erstellt werden:

Office 365 / Exchange Sprache der Standardordner Englisch

Problem:

Obwohl die Sprache sowohl in Outlook Web App als auch von Outlook deutsch eingestellt ist, werden die Standardordner auf Englisch angezeigt.

Lösung:

Samsung CLX-9201 druckt nicht

Problem:

Das Drucksystem Samsung CLX-9201 stürzt sporadisch ab (extrem selten). Das Webinterface ist zwar noch erreichbar, jedoch werden keine Druckaufträge mehr bearbeitet.

Lösung:

Nach einem Drucker-Neustart ist das Problem behoben.