Asterisk - Client Konfiguration

für Gesprächs- und Transportverschlüsselung

Mit der nachfolgenden Konstellation ist es mir gelungen, verschlüsselte Telefonate zu führen, unabhängig vom angebundenen Netz (Mobilfunk, Heimnetz hinter NAT, Freifunk, lokales Netz)

Vorbereitung

  • Portweiterleitungen im Router auf die IP des Asterisk-Servers
    • 1 SIP-Port (TCP), der in der pjsip.conf unter Transport steht (hier: 5088)
    • pro Gespräch 2 UDP Ports für die Gesprächsdaten, diese sind in der rtp.conf anzugeben
  • Zertifikate über let's encrypt besorgen, um den Server über TLS ansprechen zu können

pjsip.conf

1. Transportverschlüsselung (TLS)

[transport-tls]
type=transport
protocol=tls
bind=192.168.178.23:5088
cert_file=/etc/asterisk/certs/asterisk.cert
priv_key_file=/etc/asterisk/certs/asterisk.key
method=tlsv1_2
local_net = 192.168.178.0/24
local_net = 127.0.0.1/32
external_media_address=123.234.123.23
external_signaling_address=123.234.123.23
  • cert_file: Let's encrypt Fullchain Datei für den DynDNS-Namen
  • priv_key_file: Let's encrypt Key Datei für den DynDNS-Namen
  • bind: Adresse des Asterisk, gefolgt von dem Port, auf den Clients connecten sollen
  • local_net: Hier kommt das lokale Netz sowie das localhost Netz rein
  • external_*: die aktuelle externe IP-Adresse des Anschlusses, muss durch ein Script automatisch bei IP-Wechsel geändert werden

2. Gesprächsverschlüsselung / Client-Konfiguration

; ==== Templates ====
[ext-srtp](!)
media_encryption=sdes
media_encryption_optimistic=yes
disallow=all
allow=g722,ulaw,opus
rewrite_contact=yes
direct_media=no
force_rport=yes
rtp_symmetric=yes

Diese Vorlage wird für alle Clients, die nachher verschlüsselt arbeiten sollen, 1x erstellt

  • media_encryption: wir wollen RSTP mit SDES machen
  • media_encryption_optimistic: falls die Gegenseite keine Gesprächsverschlüsselung unterstützt, trotzdem verbinden ohne Gesprächs-Verschlüsselung
  • disallow, all: Hier kommen die Codecs rein, die die Clients nachher nutzen sollen, in der hier angegebenen Reihenfolge wird abgearbeitet (G722 zuerst, dann u-LAW, dann Opus)
  • rewrite_contact: Interne Adressen werden durch die externe ersetzt (wichtig für NAT)
  • direct_media: Clients können nur über Asterisk den Stream schicken, nicht untereinander
  • force_rport, rtp_symmetric: Nutze die in der rtp.conf angegebenen RTP-Ports

3. Rest der Client-Konfiguration

; ==== Teilnehmer ====

[1000](ext-srtp)
type=endpoint
context=from-internal
callerid="Tester 1"
auth=1000
aors=1000

[1000]
type=auth
auth_type=userpass
password=strenggeheim
username=1000

[1000]
type=aor
max_contacts=2

Der Rest der Client-Konfiguration ist identisch zum nicht-verschlüsselten Client. Dabei entspricht die 1000 der "Nebenstellennummer". Wichtig ist, die Vorlage (ext-srtp) dahinter zu setzen, damit das Template aus der vorherigen Sektion übernommen wird. Der Rest ist die Authentifizierung sowie die Anzahl der maximal gleichzeitigen Registrierungen.