Zuletzt angesehen:
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
|
asterisk [2025/11/12 22:16] 127.0.0.1 Externe Bearbeitung |
asterisk [2026/04/05 02:21] (aktuell) jango |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | Asterisk ist ein freier und quelloffene [[VoIP]] Server. [[FreePBX]] ist ein Open Source Webinterface dazu. Siehe auch [[sip|SIP]], | ||
| + | Um Asterisk in MS Teams einzubinden nutzt man das " | ||
| + | |||
| + | 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:// | ||
| + | |||
| + | =====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:// | ||
| + | tar zxvf asterisk-18-current.tar.gz | ||
| + | |||
| + | cd asterisk-18.* | ||
| + | |||
| + | contrib/ | ||
| + | contrib/ | ||
| + | |||
| + | ./configure --with-jansson-bundled | ||
| + | |||
| + | make menuselect | ||
| + | make | ||
| + | make install | ||
| + | make samples | ||
| + | make config | ||
| + | |||
| + | ldconfig | ||
| + | |||
| + | groupadd asterisk | ||
| + | useradd -d / | ||
| + | |||
| + | sed -i ' | ||
| + | sed -i ' | ||
| + | sed -i ' | ||
| + | |||
| + | mkdir / | ||
| + | |||
| + | chown -R 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, | ||
| + | |||
| + | ====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/ | ||
| + | |||
| + | 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]]/ | ||
| + | * TCP/8088 – für Asterisk [[HTTP]] WebSockets (z. B. für WebRTC via http.conf) | ||
| + | * TCP/4443, UDP/5349 – wenn [[TURN]]/ | ||
| + | =====Erstkonfiguration===== | ||
| + | |||
| + | ====CHAN_SIP==== | ||
| + | Beispiel einer < | ||
| + | |||
| + | < | ||
| + | [general] | ||
| + | context = extern | ||
| + | transport = udp,tls | ||
| + | qualify = yes | ||
| + | |||
| + | ; | ||
| + | allow = all | ||
| + | |||
| + | ; tls & srtp | ||
| + | tlsenable = yes | ||
| + | tlscertfile = / | ||
| + | tlsprivatekey = / | ||
| + | |||
| + | ; 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/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | asterisk -rx "core reload" | ||
| + | asterisk -rx "sip reload" | ||
| + | asterisk -rvvv | ||
| + | sip show peers | ||
| + | </ | ||
| + | ====CHAN_PJSIP==== | ||
| + | |||
| + | Beispiel einer | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Datei. | ||
| + | |||
| + | < | ||
| + | [transport-udp] | ||
| + | type=transport | ||
| + | protocol=udp | ||
| + | bind=0.0.0.0: | ||
| + | |||
| + | [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@*> | ||
| + | / | ||
| + | 1 results found. | ||
| + | |||
| + | database delete registrar contact/ | ||
| + | database deltree registrar/ | ||
| + | </ | ||
| + | =====Extensions===== | ||
| + | |||
| + | In der Datei ''/ | ||
| + | |||
| + | < | ||
| + | [extern] | ||
| + | exten => _XXX., | ||
| + | same => n, | ||
| + | same => n, | ||
| + | |||
| + | [intern] | ||
| + | ; voicemail main | ||
| + | exten => 9999, | ||
| + | exten => 9999, | ||
| + | exten => 9999, | ||
| + | |||
| + | ; script example | ||
| + | ; exten => _XXX, 1, System("/ | ||
| + | |||
| + | ; all peers | ||
| + | exten => _XXX, 1, Answer() | ||
| + | exten => _XXX, n, Dial(SIP/ | ||
| + | exten => _XXX, n, VoiceMail(${EXTEN: | ||
| + | exten => _XXX, n, HangUp() | ||
| + | |||
| + | ; exten => _102, 1, Dial(08001234567@external, | ||
| + | |||
| + | [sms] | ||
| + | exten => _X., | ||
| + | exten => _X., | ||
| + | exten => _X., | ||
| + | exten => _X., | ||
| + | exten => _X., | ||
| + | exten => _X., | ||
| + | </ | ||
| + | |||
| + | Siehe auch https:// | ||
| + | |||
| + | =====VoiceMail===== | ||
| + | |||
| + | In der Datei < | ||
| + | |||
| + | < | ||
| + | [vm] | ||
| + | 101 => 1234,Jane Doe, | ||
| + | 102 => 1234,Dummy Account, | ||
| + | </ | ||
| + | |||
| + | =====Logs===== | ||
| + | |||
| + | In der Datei ''/ | ||
| + | |||
| + | < | ||
| + | console => debug, | ||
| + | </ | ||
| + | |||
| + | =====CDR===== | ||
| + | |||
| + | CDR steht für '' | ||
| + | |||
| + | =====Callfile===== | ||
| + | |||
| + | |||
| + | < | ||
| + | Channel: SIP/102 ; anrufer | ||
| + | MaxRetries: 2 | ||
| + | RetryTime: 60 | ||
| + | WaitTime: 30 | ||
| + | Context: intern | ||
| + | Extension: 101 ; angerufener | ||
| + | </ | ||
| + | |||
| + | Und die Datei in das Verzeichnis ''/ | ||
| + | |||
| + | =====TLS===== | ||
| + | |||
| + | ====Lets encrypt==== | ||
| + | |||
| + | < | ||
| + | apt install certbot | ||
| + | certbot certonly --standalone -d zarat.ml | ||
| + | |||
| + | mkdir / | ||
| + | |||
| + | cp / | ||
| + | cp / | ||
| + | |||
| + | chown asterisk: | ||
| + | |||
| + | chmod go-rwx / | ||
| + | </ | ||
| + | |||
| + | Datei ''/ | ||
| + | |||
| + | < | ||
| + | tlscertfile=/ | ||
| + | tlsprivatekey=/ | ||
| + | </ | ||
| + | |||
| + | See https:// | ||
| + | |||
| + | ====Asterisk internal==== | ||
| + | |||
| + | < | ||
| + | cd /usr/src | ||
| + | wget http:// | ||
| + | tar zxvf asterisk-16-current.tar.gz | ||
| + | rm -rf asterisk-16-current.tar.gz | ||
| + | cd asterisk-*/ | ||
| + | |||
| + | su asterisk | ||
| + | |||
| + | mkdir / | ||
| + | |||
| + | contrib/ | ||
| + | |||
| + | chmod 600 / | ||
| + | chown -R asterisk: | ||
| + | </ | ||
| + | |||
| + | Datei ''/ | ||
| + | |||
| + | < | ||
| + | tlsenable = yes | ||
| + | tlscertfile = / | ||
| + | transport = udp,tls | ||
| + | </ | ||
| + | |||
| + | =====Konferenzen===== | ||
| + | |||
| + | In der Datei ''/ | ||
| + | |||
| + | < | ||
| + | [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 ''/ | ||
| + | |||
| + | < | ||
| + | ; conference guest | ||
| + | exten => 100, | ||
| + | exten => 100, | ||
| + | exten => 100, | ||
| + | |||
| + | ; conference admin | ||
| + | exten => 101, | ||
| + | exten => 101, | ||
| + | exten => 101, | ||
| + | </ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | =====HTTP WebRTC===== | ||
| + | |||
| + | Möchte man den Zugriff via WebRTC aktivieren muss man den Zugang für SIP deaktivieren. Dazu in der Datei ''/ | ||
| + | |||
| + | Für WebRTC müssen die folgenden Module vorhanden und aktiv sein. | ||
| + | |||
| + | * res_crypto | ||
| + | * res_http_websocket | ||
| + | * res_pjsip_transport_websocket | ||
| + | |||
| + | In der Datei ''/ | ||
| + | |||
| + | < | ||
| + | [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, | ||
| + | </ | ||
| + | |||
| + | In die Datei ''/ | ||
| + | |||
| + | < | ||
| + | [general] | ||
| + | enabled=yes | ||
| + | bindaddr=0.0.0.0 | ||
| + | bindport=8088 | ||
| + | tlsenable=yes | ||
| + | tlsbindaddr=0.0.0.0: | ||
| + | tlscertfile=/ | ||
| + | tlsprivatekey=/ | ||
| + | </ | ||
| + | |||
| + | Siehe https:// | ||
| + | |||
| + | =====Manager===== | ||
| + | |||
| + | Todo - Siehe https:// | ||
| + | |||
| + | =====Fax===== | ||
| + | |||
| + | < | ||
| + | [default] | ||
| + | ; Answer the line and listen | ||
| + | exten => s,1,Answer | ||
| + | ; Dial an extension, let asterisk give a ringtone | ||
| + | exten => s, | ||
| + | ; Hangup if nobody picked up within 40 seconds | ||
| + | exten => s,3,Hangup | ||
| + | |||
| + | ; Did we get a fax? | ||
| + | exten => fax, | ||
| + | exten => fax, | ||
| + | </ | ||
| + | |||
| + | Send to queue | ||
| + | |||
| + | < | ||
| + | Channel: | ||
| + | MaxRetries: 0 | ||
| + | WaitTime: 20 | ||
| + | Application: | ||
| + | Data:/ | ||
| + | </ | ||
| + | |||
| + | See https:// | ||
| + | |||
| + | =====Links===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | Apps | ||
| + | |||
| + | * Zoiper | ||
| + | * Linphone | ||
| + | * MicroSIP | ||
| + | * MizuDroid | ||