Asterisk ist ein freier und quelloffene VoIP Server. FreePBX ist ein Open Source Webinterface dazu. Siehe auch [[sip|SIP]], [[https://www.asterisk.org/|Homepage]], [[https://wiki.asterisk.org/wiki/display/AST/Home|Wiki]] und [[https://www.youtube.com/asteriskvideos|Youtube Kanal]]
Um Asterisk in MS Teams einzubinden nutzt man das "Direct Routing" Feature von Teams und einen [[sbc|SBC]] (Session Border Controller).
Asterisk nutzt das [[stun|STUN]] Protokoll um Firewalls und [[nat|NAT]] zu erkennen.
asterisk -rvvv
asterisk -rx
CLI
console dial
console send text "Hello wold"
console hangup
In Konfigurationsdateien kann man andere Dateien einbinden um es übersichtlich zu halten
#include myusers.conf
[[https://www.voip-info.org/asterisk-variables/|Dialplan Variablen]]
=====Installation=====
#!/bin/sh
apt-get -y install make build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev git subversion
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar zxvf asterisk-16-current.tar.gz
cd asterisk-16.*
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install
./configure --with-jansson-bundled
make menuselect
make
make install
make samples
make config
ldconfig
groupadd asterisk
useradd -d /var/lib/asterisk -g asterisk asterisk
sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/g' /etc/default/asterisk
sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/g' /etc/default/asterisk
sed -i 's/;runuser = asterisk/runuser = asterisk/g' /etc/asterisk/asterisk.conf
mkdir /etc/asterisk /var/{run,lib,log,spool}/asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk /var/{run,lib,log,spool}/asterisk /usr/lib/asterisk
=====Erstkonfiguration=====
Beispiel einer /etc/asterisk/sip.conf
Datei.
[general]
context = extern
transport = udp,tls
qualify = yes
;videosupport=yes
allow = all
; tls & srtp
tlsenable = yes
tlscertfile = /etc/asterisk/keys/asterisk.pem
tlsprivatekey = /etc/asterisk/keys/privkey.pem
; sms
accept_outofcall_message = yes
outofcall_message_context = sms
auth_message_requests = yes
[101]
type = friend
secret = 1234
context = intern
host = dynamic
mailbox = 101@vm
encryption = yes
[102]
type = friend
secret = 1234
context = intern
host = dynamic
mailbox = 102@vm
encryption = yes
#include ext/myusers.conf
=====Extensions=====
In der Datei ''/etc/asterisk/extensions.conf'' werden die Nebenstellen ([[https://www.voip-info.org/asterisk-config-extensionsconf/|Extensions]]) angelegt. Sie bestimmt was passiert wenn eine bestimmte Nummer gewählt wird.
[extern]
exten => _XXX.,1,Answer()
same => n,Dial(${EXTEN:0}@intern)
same => n,VoiceMail(${EXTEN:0}@vm)
[intern]
; voicemail main
exten => 9999,1,NoOp(Voicemail from ${CALLERID(num)})
exten => 9999,2,VoiceMailMain(${CALLERID(num)}@vm)
exten => 9999,3,HangUp()
; script example
; exten => _XXX, 1, System("/my/script ${CHANNEL(uri)}")
; all peers
exten => _XXX, 1, Answer()
exten => _XXX, n, Dial(SIP/${EXTEN:0}, 30, t)
exten => _XXX, n, VoiceMail(${EXTEN:0}@vm)
exten => _XXX, n, HangUp()
; exten => _102, 1, Dial(08001234567@external, 30, t)
[sms]
exten => _X.,1,NoOp(SMS received)
exten => _X.,n,NoOp(To ${MESSAGE(to)})
exten => _X.,n,NoOp(From ${MESSAGE(from)})
exten => _X.,n,NoOp(Body ${MESSAGE(body)})
exten => _X.,n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})
exten => _X.,n,MessageSend(${ACTUALTO},${MESSAGE(from)})
Siehe auch https://blog.astiostech.com/asterisk-10-or-11-messaging-smssip/
=====VoiceMail=====
In der Datei /etc/asterisk/voicemail.conf
kann diei Mailbox gesteuert werden.
[vm]
101 => 1234,Jane Doe,jane.doe@example.com
102 => 1234,Dummy Account,alice@bob.com
=====Logs=====
In der Datei ''/etc/asterisk/logger.conf'' kann man einstellen welche Logs man wo sehen möchte.
console => debug,notice,warning,error,security
=====CDR=====
CDR steht für ''Call detail record'' und zeigt Details zu getätigten Telefonaten. Konfiguriert wird es unter ''/etc/asterisk/cdr*.conf'' und gespeichert wird unter ''/var/log/asterisk/cdr-csv/Master.csv'' solange nicht eine andere Datei konfiguriert wurde.
=====Callfile=====
Channel: SIP/102 ; anrufer
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: intern
Extension: 101 ; angerufener
Und die Datei in das Verzeichnis ''/var/spool/asterisk/outgoing'' kopieren. Asterisk wid den Anruf bei der nächsten Gelegenheit ausführen.
=====TLS=====
====Lets encrypt====
apt install certbot
certbot certonly --standalone -d zarat.ml
mkdir /etc/asterisk/keys
cp /etc/letsencrypt/live/zarat.ml/privkey.pem /etc/asterisk/keys/asterisk.key
cp /etc/letsencrypt/live/zarat.ml/fullchain.pem /etc/asterisk/keys/asterisk.cert
chown asterisk:asterisk /etc/asterisk/keys/asterisk.cert /etc/asterisk/keys/asterisk.key
chmod go-rwx /etc/asterisk/keys/asterisk.cert /etc/asterisk/keys/asterisk.key
Datei ''/etc/asterisk/sip.conf'' bearbeiten
tlscertfile=/etc/asterisk/keys/asterisk.cert
tlsprivatekey=/etc/asterisk/keys/asterisk.key
See https://feeding.cloud.geek.nz/posts/using-letsencrypt-cert-with-asterisk/ and https://www.youtube.com/watch?v=FNIr4gWe4dg
====Asterisk internal====
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar zxvf asterisk-16-current.tar.gz
rm -rf asterisk-16-current.tar.gz
cd asterisk-*/
su asterisk
mkdir /etc/asterisk/keys
contrib/scripts/ast_tls_cert -C zarat.ml -O "My Company" -d /etc/asterisk/keys
chmod 600 /etc/asterisk/keys/*
chown -R asterisk:asterisk /etc/asterisk/keys
Datei ''/etc/asterisk/sip.conf'' bearbeiten
tlsenable = yes
tlscertfile = /etc/asterisk/keys/asterisk.pem
transport = udp,tls
=====Konferenzen=====
In der Datei ''/etc/asterisk/confbridge.conf'' ersetzt man den kompletten Inhalt und legt 3 Einheiten an. Eine Default Bridge, einen Default user und einen Default admin.
[general]
[default_bridge]
type=bridge
max_members=10
[admin_user]
type=user
pin=1234
admin=yes
marked=yes
music_on_hold_when_empty=yes
[default_user]
type=user
pin=1234
wait_marked=yes
end_marked=yes
music_on_hold_when_empty=yes
announce_user_count=yes
In der Datei ''/etc/asterisk/extensions.conf'' werden 2 Nebenstellen eingerichtet, die eine für den Admin und die andere für den User.
; conference guest
exten => 100,1,Progress()
exten => 100,2,Wait(1)
exten => 100,3,ConfBridge(1,default_bridge,default_user)
; conference admin
exten => 101,1,Progress()
exten => 101,2,Wait(1)
exten => 101,3,ConfBridge(1,default_bridge,admin_user)
https://www.youtube.com/watch?v=n__WkoHhTeM
=====HTTP WebRTC=====
Möchte man den Zugriff via WebRTC aktivieren muss man den Zugang für SIP deaktivieren. Dazu in der Datei ''/etc/asterisk/modules.conf'' das jeweilige Modul laden oder blockieren.
Für WebRTC müssen die folgenden Module vorhanden und aktiv sein.
* res_crypto
* res_http_websocket
* res_pjsip_transport_websocket
In der Datei ''/etc/asterisk/pjsip.conf'' trägt man folgendes ein.
[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0
[webrtc_client]
type=aor
max_contacts=5
remove_existing=yes
[webrtc_client]
type=auth
auth_type=userpass
username=webrtc_client
password=webrtc_client
[webrtc_client]
type=endpoint
aors=webrtc_client
auth=webrtc_client
dtls_auto_generate_cert=yes
webrtc=yes
context=default
disallow=all
allow=opus,ulaw
In die Datei ''/etc/asterisk/http.conf'' trägt man folgendes ein.
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/asterisk.crt
tlsprivatekey=/etc/asterisk/keys/asterisk.key
Siehe https://wiki.asterisk.org/wiki/display/AST/Configuring+Asterisk+for+WebRTC+Clients
=====Manager=====
Todo - Siehe https://www.asteriskguru.com/tutorials/manager_conf.html und https://www.voip-info.org/asterisk-config-managerconf/
=====Fax=====
[default]
; Answer the line and listen
exten => s,1,Answer
; Dial an extension, let asterisk give a ringtone
exten => s,2,Dial(IAX2/3987,40,r)
; Hangup if nobody picked up within 40 seconds
exten => s,3,Hangup
; Did we get a fax?
exten => fax,1,SetVar(FAXFILE=/var/spool/asterisk-fax/${UNIQUEID}.tif)
exten => fax,2,rxfax(${FAXFILE})
Send to queue
Channel:ZAP/G1/1234567
MaxRetries: 0
WaitTime: 20
Application:txfax
Data:/tmp/faximage.tif|caller
See https://www.voip-info.org/asterisk-fax/
=====Links=====
* [[https://www.asteriskguru.com/|Asterisk Guru]]
* [[http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html/asterisk-book.html|Asterisk - The Definitive Guide]]
* https://www.youtube.com/watch?v=kVlXQiTp7vU
* https://elektronikbasteln.pl7.de/eine-einfache-asterisk-konfiguration-fuer-einen-sip-server-als-telefonanlage
* https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Specifics
* https://www.youtube.com/watch?v=We_nG9f0eS8
* [[http://cdn.oreillystatic.com/books/9780596510480.pdf|Asterisk - The future of telephony - Oreilly]]
Apps
* Zoiper
* Linphone
* MicroSIP
* MizuDroid