Asterisk ist ein freier und quelloffene VoIP Server. FreePBX ist ein Open Source Webinterface dazu. Siehe auch SIP, Homepage, Wiki und Youtube Kanal
Um Asterisk in MS Teams einzubinden nutzt man das „Direct Routing“ Feature von Teams und einen SBC (Session Border Controller).
Asterisk nutzt das STUN Protokoll um Firewalls und NAT zu erkennen.
asterisk -rvvv asterisk -rx <shell-command>
CLI
console dial <exten> console send text "Hello wold" console hangup
In Konfigurationsdateien kann man andere Dateien einbinden um es übersichtlich zu halten
#include myusers.conf
#!/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
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
In der Datei /etc/asterisk/extensions.conf
werden die Nebenstellen (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/
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
In der Datei /etc/asterisk/logger.conf
kann man einstellen welche Logs man wo sehen möchte.
console => debug,notice,warning,error,security
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.
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.
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
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
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)
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.
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
Todo - Siehe https://www.asteriskguru.com/tutorials/manager_conf.html und https://www.voip-info.org/asterisk-config-managerconf/
[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
Apps