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===== 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 =====Firewall===== 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: ====SIP==== Siehe [[SIP]] * UDP/5060 – für unverschlüsselten [[SIP]]-Verkehr (Standard) * TCP/5060 – optional, wenn [[TCP]] verwendet wird * TLS/5061 – für verschlüsselten SIP-Traffic ([[SIPS]]) Falls du [[PJSIP]] verwendest, ist ebenfalls Port 5060 (UDP) üblich, außer du hast etwas anderes konfiguriert. ====RTP==== [[RTP]] ist **für die Audioübertragung erforderlich**. * UDP/10000–20000 – für die eigentliche Audio-Übertragung Dieser Bereich ist in der Asterisk-Konfiguration (rtp.conf) unter rtpstart und rtpend definierbar. Der Standardbereich ist 10000–20000. ====IAX2==== Siehe [[IAX2]] * UDP/4569 – für IAX2-Verbindungen (wenn du IAX statt [[SIP]] nutzt) ====WebRTC==== Siehe [[WebRTC]] * UDP/3478 – [[STUN]] (wenn [[TURN]]/[[STUN]]-Server verwendet wird) * TCP/8088 – für Asterisk [[HTTP]] WebSockets (z. B. für WebRTC via http.conf) * TCP/4443, UDP/5349 – wenn [[TURN]]/[[TLS]] benötigt wird (abhängig vom Setup) =====Erstkonfiguration===== ====CHAN_SIP==== 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 ====CHAN_PJSIP==== 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! =====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