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