Asterisk als WebRTC-Gateway einrichten
Für einen funktionierenden WebRTC-Endpoint müssen vier Stellen
stimmen: die http.conf, der WSS-Transport in pjsip.conf, der
WebRTC-Endpoint und das DTLS-Material.
http.conf: TLS-WebSocket aktivieren
; /etc/asterisk/http.conf
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/letsencrypt/live/pbx.example.com/fullchain.pem
tlsprivatekey=/etc/letsencrypt/live/pbx.example.com/privkey.pem
Die WebRTC-Clients verbinden sich dann mit
wss://pbx.example.com:8089/ws.
pjsip.conf: WSS-Transport und WebRTC-Endpoint
; WSS-Transport
[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0
; Template für WebRTC-Clients
[webrtc-endpoint](!)
type=endpoint
context=intern
disallow=all
allow=opus
allow=ulaw
webrtc=yes
; (webrtc=yes setzt implizit:
; transport=transport-wss
; dtls_ca_file, dtls_cert_file, ...
; ice_support=yes
; use_avpf=yes
; media_encryption=dtls
; rtcp_mux=yes
; direct_media=no
; Einzelne Einstellungen lassen sich weiterhin überschreiben.)
[auth-webrtc-template](!)
type=auth
auth_type=userpass
[aor-webrtc-template](!)
type=aor
max_contacts=5
remove_existing=yes
; Ein Browser-User
[bob](webrtc-endpoint)
auth=bob
aors=bob
[bob](auth-webrtc-template)
username=bob
password=WEBRTC-GEHEIM-BOB
[bob](aor-webrtc-template)
|
|
DTLS-Material
Für DTLS-SRTP brauchen Sie ein Zertifikat und einen privaten
Schlüssel. webrtc=yes liest die Dateien standardmäßig aus
/etc/asterisk/keys/. Einmalig erzeugen:
# mkdir -p /etc/asterisk/keys
# cd /etc/asterisk/keys
# openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
-subj "/CN=pbx.example.com" \
-keyout asterisk.key -out asterisk.crt
# chown asterisk:asterisk asterisk.key asterisk.crt
# chmod 640 asterisk.key asterisk.crt
Anschließend im Endpoint-Template ergänzen:
[webrtc-endpoint](!)
...
dtls_ca_file= ; leer = keine CA-Prüfung (Fingerprint reicht)
dtls_cert_file=/etc/asterisk/keys/asterisk.crt
dtls_private_key=/etc/asterisk/keys/asterisk.key
dtls_verify=fingerprint ; Gegenseite per SDP-Fingerprint verifizieren
ICE/STUN
Innerhalb eines LANs funktioniert WebRTC meist ohne zusätzliche Maßnahmen. Sobald ein Client von außerhalb kommt, braucht es einen STUN-Server (für das reine Herausfinden der öffentlichen IP) oder einen TURN-Server (als Media-Relay, wenn UDP blockiert ist).
Beliebte Wahl für eigene Installationen: coturn
(https://github.com/coturn/coturn). Den STUN-Server konfigurieren Sie
in res_stun_monitor.conf; die von STUN ermittelte öffentliche IP
setzen Sie am Transport als external_media_address und
external_signaling_address — siehe auch
Das SIP-NAT-Problem.