31 Oct 2020
       

Telekom SIP-Trunk mit Asterisk

Nach einigem herumprobieren will auch ein Telekom-SIP-Trunk mit dem Asterisk harmonieren ;-)

1. DNS-Auflösung

Leider hat die Telekom keine schlichten A-Records im DNS für Registrar und Outbound-Proxy angelegt, sondern verlässt sich auf SRV-Einträge. D.h., die zuständigen Hosts müssen über die Abfrage und Auswertung eines SRV-Records ermittelt werden.
(vgl. host -t SRV _sip._tcp.reg.sip-trunk.telekom.de)

Ein srvlookup=yes in der sip.conf sollte das lösen.

Wenn die Service-Lookups nicht funktionieren, was möglicherweise von der eingesetzten Asterisk-Version abhängig ist, kann evtl. als Quick&Dirty-Workaround ein Eintrag in der /etc/hosts für sip-trunk.telekom.de und reg.sip-trunk-telekom.de helfen. Aber schön ist das nicht.

2. sip.conf

Hier müssen die o.g. SRV-Lookups aktiviert werden, außerdem sprechen die Telekom-SIP-Server tcp anstelle des sonst üblichen udp.

Für eingehende Anrufe benötigt es eine Registrierung (register =>) in geeigneter Form.

Die Bezeichnungen entsprechen den von der Telekom auf der Mitteilung der Zugangsdaten verwendeten Benennungen. Die Registrierungsrufnummer hat bspw. die Form +4969123450, der Telefonie-Benutzername entspricht der Zugangsnummer und hat die Form 551112345678.

Die Registrierungsnummer am Ende des Register-Statements wird bei eingehenden Anrufen als Extension im Wählplan angesprungen (extensions.conf) und entspricht damit NICHT wie üblich der gewählten Rufnummer!

Das Register-Statement gehört in EINE Zeile und ist hier nur der Lesbarkeit wegen umgebrochen!

Die angebenen Beispiele sind geeignet anzupassen und ergänzen die vorhandene sip.conf.

 

[global]
srvlookup=yes
tcpenable=yes
; SIP-Trunking Telekom ausgehend
register =>
tcp://"REGISTRIERUNGSRUFNUMMER"@"sip-trunk.telekom.de":
"TELEFONIE-PASSWORT":
"TELEFONIE-BENUTZERNAME"@"reg.sip-trunk.telekom.de":
5060/"REGISTRIERUNGSNUMMER"
; SIP-Trunking Telekom ausgehend

[sip-trunk-telekom]
context=incoming
type=peer
host=reg.sip-trunk.telekom.de
transport=tcp
nat=force_rport,comedia
defaultuser=551112345678
fromdomain=sip-trunk.telekom.de
secret=strenggeheim
insecure=invite
videosupport=no
disallow=all
allow=alaw
directmedia=no
qualify=yes
dtmfmode=inband
session-timers=refuse
registertimeout=480

3. extensions.conf

Um die gewählte Durchwahl zu erhalten, ist ein wenig Arbeit im Wählplan erforderlich:

[outgoing]
exten => _0X.,1,Dial(SIP/${EXTEN}@sip-trunk-telekom)

 

[incoming]

exten => +49691234560,1,Noop(externer Anruf)
; 0 zur Amtsholung voranstellen
exten => +49691234560,n,Set(CALLERID(num)=0${CALLERID(num)})

 

;die gewählte Durchwahl findet sich im SIP-Header und muss da extrahiert werden
exten => +49691234560,n,Set(DEST=${SIP_HEADER(TO)})
exten => +49691234560,n,Set(DEST=${CUT(DEST,@,1)})
exten => +49691234560,n,Set(DEST=${CUT(DEST,:,2)})
; Zentrale angewählt, dann weiter mit zentrale
exten => +49691234560,n,GotoIf($[$["${DEST}"] = "+49691234560"]?zentrale)
; übrige Durchwahlen haben das Format +4969123456XX
exten => +49691234560,n,Goto(incoming,${DEST},1)
exten => +49691234560,n(zentrale),Dial(SIP/10)
; ...
;Zweistellige Durchwahlen...
exten => +4969123456XX,1,Dial(SIP/${EXTEN:-2})

4. Rufumleitung am Telefon

Wird am Telefon eine Rufumleitung auf ein externes Ziel, beispielsweise ein Mobiltelefon, aktiviert, so muss auch hierfür die Konfiguration ein wenig angepasst werden, da die Umleitung sonst von Telekom-Seite mit 403 Forbidden abgewiesen wird.
send_diversion=no entfernt aus dem SIP-INVITE für den umgeleiteten Anruf den Diversion-Header, welcher die ursprünglich gerufene Nummer enthält. Eigentlich wäre es ja schön, wenn man bei einem umgeleiteten Anruf sehen könnte, wer da ursprünglich welche Nummer angerufen hat.
Vielleicht findet ja jemand eine Erklärung für das Telekom-Verhalten oder gar eine Lösung dafür. Sachdienliche Hinweise werden gerne entgegengenommen.

Weshalb der Audio-Kanal ohne progressinband=yes nicht durchgereicht wird, würde mich ebenfalls interessieren.

Die sip.conf um folgende Informationen ergänzen:

 

[global]
; Damit funktioniert schonmal der Rufaufbau trotz Umleitung
send_diversion=no
; Damit auch das Audiosignal im umgeleiteten Anruf transportiert wird, ist zusätlich folgendes nötig
progressinband=yes