Benutzer-Werkzeuge

Webseiten-Werkzeuge


asterisk

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

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 (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

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/

asterisk.txt · Zuletzt geändert: 2023/06/10 23:40 (Externe Bearbeitung)