Die folgende Anleitung beschreibt, man Asterisk mit chan_sip an einem Telekom SIP-Trunk Anschluss zum Laufen bringt. Sie richtet sich an Administratoren, die sich schon etwas mit der Asterisk-Konfiguration auskennen, aber am Telekom-Anschluss verzweifelt sind.
Achtung: Diese Anleitung funktioniert nicht mit einem "Normalen" Heim-Anschluss der Telekom (der einen Analogen- oder ISDN Mehrgeräteanschluss ersetzt), sondern nur mit einen SIP-Trunk (der einen Anlagenanschluss ersetzt).
Kurz vor Schaltung des Anschlusses erhält man von der Telekom einen Brief mit den Zugangsdaten. Die wichtigen Angaben für den Asterisk sind:
Telefonie-Nutzer : 123456789012 Telefonie-Passwort: abcdefgh Outbound-Proxy : reg.sip-trunk.telekom.de Registrar : sip-trunk.telekom.de
Zusätzlich braucht man noch die Haupt-Nummer (also die mit einer "0" am Ende) von seinem Telefonanschluss mit einem "+" und der internationalen Vorwahl, also z.B.:
Hauptnummer : +49691234560
Nun fangen schon die Probleme an. Die Telekom verwendet TCP für SIP (nicht UDP), eine Namensauflösung mit NAPTR und SRV, und einen Proxy. Diese Kombination funktioniert bei chan_sip des Asterisk nicht. Um das abzubilden können wir aber ein wenig mit der /etc/hosts "mogeln". Dazu verwenden wir ein kleines Shell-Script, welches die Namensauflösung macht und das Ergebnis in die /etc/hosts schreibt.
#! /bin/bash ROUTER=172.30.20.1 ADMIN=admin@rechner.domain NAPTR=`host -t NAPTR reg.sip-trunk.telekom.de $ROUTER | grep 'SIP+D2T' | sed 's,.* ,,'` SRV=`host -t SRV $NAPTR $ROUTER | grep ^$NAPTR.*has.*SRV | sort -nk 5,5 | head -1 | sed 's,.* ,,'` IP=`host -t A $SRV $ROUTER | grep ^$SRV.*has.*address| head -1 | sed 's,.* ,,'` DTAG=`grep sip-trunk.telekom.de /etc/hosts | sed 's, .*,,' | sed 's, .*,,'` if [ "$IP" = "" ] then echo "Neue IP sip-trunk nicht gefunden" | mail -s Telefon $ADMIN exit 0 fi if [ "$IP" != "$DTAG" ] then grep -v sip-trunk.telekom.de /etc/hosts >/tmp/dtagtmp.$$ echo "$IP sip-trunk.telekom.de" >>/tmp/dtagtmp.$$ cp /tmp/dtagtmp.$$ /etc/hosts rm /tmp/dtagtmp.$$ echo "Neue IP sip-trunk: $IP (alt: $DTAG)" | mail -s Telefon $ADMIN fi
Die Variable "ROUTER" wird auf die IP-Adresse des Telekom-Routers gesetzt (bzw. ein Rechner, der die Namensauflösung über die zum Telefonanschluss gehörende Internetverbindung mit Telekom- Nameserver durchführt). Die Variable "ADMIN" wird mit der Mailadresse von jemanden belegt, der benachrichtigt werden soll, wenn sich etwas geändert hat oder etwas nicht funktioniert.
Wenn das Script nun einmal gestartet wird, sollte danach in der /etc/hosts ein entsprechender Eintrag sein. Die konkrete IP-Adresse wird natürlich je nach Standort und Lust und Laune der Telekom variieren.
217.0.26.67 sip-trunk.telekom.de
So gerüstet können wir nun an die sip.conf vom Asterisk gehen. Hier wird kein Proxy angegeben, weil wir in der /etc/hosts für den Namen sip-trunk.telekom.de die IP-Adresse des Proxy's vorgegaukelt haben.
[general] tcpenable=yes tcpbindaddr=0.0.0.0 register => tcp://+49691234560:abcdefgh:123456789012@sip-trunk.telekom.de/+49691234560 ... [siptrunk] type=peer secret=abcdefgh defaultuser=123456789012@sip-trunk.telekom.de host=sip-trunk.telekom.de fromuser=+49691234560 context=siptrunk-in qualify=yes session-timers=refuse allow=!all,alaw,g722 transport=tcp progressinband=yes ...Etwas Arbeit ist auch in der extensions.conf notwendig. Bei eingehenden Anrufen ist die gewählte Telefonnummer mit Durchwahl in den SIP-Headern versteckt, und muss dort herausgepult werden, bevor wir sie nutzen können. Dabei ist auch zu beachten, dass der Eingang mit der Extension "+49..." erfolgt, also das sehr oft genutzte "_X." nicht funktioniert.
[siptrunk-in] exten => _[+0-9].,1,NoOp() exten => _[+0-9].,n,Set(DEST=${SIP_HEADER(TO)}) exten => _[+0-9].,n,Set(DEST=${CUT(DEST,@,1)}) exten => _[+0-9].,n,Set(DEST=${CUT(DEST,:,2)}) exten => _[+0-9].,n,Set(SRC=${CALLERID(number)}) exten => _[+0-9].,n,Set(SRC=${STRREPLACE(SRC,"+49","0")}); exten => _[+0-9].,n,Set(SRC=${STRREPLACE(SRC,"+","00")}); exten => _[+0-9].,n,Set(CALLERID(number)=0${SRC}) exten => _[+0-9].,n,Set(CALLERID(name)=${SRC}) exten => _[+0-9].,n,Goto(verteiler,${DEST},1) [verteiler] exten => +49691234560,1,... exten => +49691234560,n,... ... exten => +496912345610,1,... exten => +496912345610,n,... ... exten => +496912345611,1,... exten => +496912345611,n,... ...
Ausgehende Anrufe werden mit folgendem DIAL gestartet (Annahme: Ausgehende Anrufe werden durch eine zusätzliche "0" vor der Nummer gekennzeichnet, und wir wollen als Anruferkennung nur unsere Zentrale herausgeben):
exten => _0X.,1,Set(CALLERID(number)=0) exten => _0X.,n,Set(CALLERID(name)=MyCompany) exten => _0X.,n,DIAL(SIP/${EXTEN:1}@siptrunk) exten => _0X.,n,Hangup()
Wenn der Asterisk fertig konfiguriert ist, kann er gestartet werden. Jetzt können wir nachsehen, ob alles funktioniert.
/usr/local/sbin/asterisk -U asterisk -G asterisk >/dev/null 2>&1 & /usr/local/sbin/asterisk -r ... telefon*CLI> sip show registry Host dnsmgr Username Refresh State Reg.Time sip-trunk.telekom.de:5060 N +49691234560 225 Registered Tue, 23 Apr 2019 23:48:39 1 SIP registrations. telefon*CLI> sip show peers ... dtag/123456789012@sip-tru 217.0.26.67 Auto (No) No 5060 OK (22 ms) ...
Wenn die Registrierung aktiv ist und der Peer "OK" ist, dann können wir uns freuen und die Telefonie testen. Sobald alles o.k. ist, muss das Shell-Script für die Namensauflösung noch mit einem Restart des Asterisk zu einer passenden Zeit Nachts in die cron des Rechners gesetzt werden
/usr/local/bin/siptrunkdns.sh /usr/local/sbin/asterisk -x "core restart now" sleep 30 x=`ps -fu asterisk|grep sbin.asterisk` if [ "$x" = "" ] then /usr/local/sbin/asterisk -U asterisk -G asterisk >/dev/null 2>&1 & fi
Bitte senden Sie Kommentare an: Lothar Krauss | Home |