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
Mit CHAN_PJSIP statt CHAN_SIP!
#!/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-18-current.tar.gz
tar zxvf asterisk-18-current.tar.gz
cd asterisk-18.*
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
Damit Asterisk zuverlässig funktioniert – insbesondere für SIP-basierte VoIP-Kommunikation – müssen in der Firewall bestimmte Ports freigegeben werden. Welche genau, hängt vom eingesetzten Protokoll (SIP, IAX, RTP etc.) und der Konfiguration ab. Hier die Standard-Ports, die du üblicherweise freigeben musst:
Siehe SIP
Falls du PJSIP verwendest, ist ebenfalls Port 5060 (UDP) üblich, außer du hast etwas anderes konfiguriert.
RTP ist für die Audioübertragung erforderlich.
Dieser Bereich ist in der Asterisk-Konfiguration (rtp.conf) unter rtpstart und rtpend definierbar. Der Standardbereich ist 10000–20000.
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
asterisk -rx "core reload" asterisk -rx "sip reload" asterisk -rvvv sip show peers
Beispiel einer
/etc/asterisk/pjsip.conf
Datei.
[transport-udp] type=transport protocol=udp bind=0.0.0.0:5060 [6001] type=endpoint transport=transport-udp context=internal disallow=all allow=ulaw auth=6001 aors=6001 [6001] type=auth auth_type=userpass username=6001 password=geheim123 [6001] type=aor max_contacts=1 [6002] type=endpoint transport=transport-udp context=internal disallow=all allow=ulaw auth=6002 aors=6002 [6002] type=auth auth_type=userpass username=6002 password=passwort456 [6002] type=aor max_contacts=1
asterisk -rx "core reload"
asterisk -rx "pjsip reload"
asterisk -rvvv
pjsip show endpoints
database show
asterisk@*> database show registrar/contact
/registrar/contact/6001;@b570247c7377c4bb51f21411a0bebc2f: {"via_addr":"192.168.0.17","qualify_timeout":"3.000000","call_id":"DnL4svKoXz","reg_server":"","prune_on_boot":"no","path":"","endpoint":"6001","via_port":"64803","authenticate_qualify":"no","uri":"sip:6001@192.168.0.17:64803;transport=udp","qualify_frequency":"0","user_agent":"Linphone-Desktop/6.0.0-CallEdition (vie-nb-gbi016) windows/10 Qt/6.8.1 LinphoneSDK/5.4.17","expiration_time":"1750255139","outbound_proxy":""}
1 results found.
database delete registrar contact/6001;@b570247c7377c4bb51f21411a0bebc2f
database deltree registrar/contact # deletes all registrations!
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