Hallo.
Ich habe hier ein Problem zum Thema Rufnummernsignalisierung im Verbund und
habe außer einem eigenen Patch noch keine wirklich saubere Lösung
gefunden.
Wir[1] haben ein VPN, in dem mehrere VoIP-Vermittlungsstellen sich
untereinander unter bestimmten Vorwahlen erreichen können. Diese Vorwahlen
sollten überall einheitlich sein, müssen es aber nicht. D.h. die
übliche
VPN-Vorwahl für Hamburg ist "94-", aber es hindert niemanden den
Telefonfrickler in Hinterposemuckel daran, die "42-" dafür zu
vergeben.
Die regionalen Vermittlungsstellen können ihrerseits wieder Durchwahlen zu
VoIP-Anschlüssen lokaler Mitglieder bereitstellen.
Nun möchte ich die Caller-IDs auf dem Weg durch die Vermittlungsstellen so
verändern, daß am Ende die Nummer angezeigt wird, die ich
wählen muss um
die Strecke in der Gegenrichtung zu wählen.
Z.B. rufe ich von meinem Telefon zuhause (201) über meinen Asterisk
(User-Durchwahl 828) und die regionale Vermittlung Hamburg (94) eine Nummer
in Köln (92) an. Der Rückruf muss ebenfalls über den Hamburger
Knoten
gehen, da nur dieser die Verbindung zu meinem Asterisk zuhause herstellen
kann, auch wenn IAX nach Verbindungsaufbau auf direkten Transfer migriert:
Telefon <- [Koeln] <- [Hamburg] <- [packbarthome] <- Telefon
Die letztlich angezeigte Caller-ID soll die gesamte Rückrufroute umfassen.
Da diese jeweils nur der angerufenen Seite bekannt ist, muss jede Station
der eingehenden Caller-ID ein Präfix voransetzen:
-> 94 -> 828 -> 201
Wenn z.B. die direkte Verbindung Hamburg -> Berlin nicht funktioniert, da
irgendwo im VPN eine Route abhanden gekommen ist, möchte ich einen Umweg
wählen können, um dem Verantwortlichen der anderen Seite Bescheid zu
geben:
[Berlin] <- [Koeln] <- [Hamburg] <- Telefon
Der soll natürlich die (hoffentlich auch in der Gegenrichtung)
funktionierende Route angezeigt bekommen, um darüber bei eventuellen
Rückfragen anrufen zu können:
-> 92 -> 94 -> 23
Da das Netz aus dezentral administrierten Vermittlungen mit
unterschiedlichen Versionen von Asterisk 1.1 bis 1.4, Callweaver-Varianten
und unterschiedlicher Paranoia der Admins besteht, wäre mir eine
allgemeine Lösung, die ohne Sourcecodeänderungen auskommt, am
liebsten.
Ich habe nur leider keine gefunden. Google fand wenig Sinnvolles, u.a.
Fragen ohne Antworten und ein paar Ansätze, die Konstrukte wie
X.,1,Set(CALLERID(number)=... verwenden. Das haut bei mir aber irgendwie
nicht hin, oder ich stelle mich da zu doof an.
Außerdem muss ich das Präfix abhängig vom Peer setzen,
über den die
Verbindung hereinkommt. Welche Art des Lookups wäre dafür sinnvoll?
Oder denke ich hier eh in die falschen Richtung?
Asterisk 1.4 habe ich dahingehend noch nicht angesehen, da mir das bei
ersten Tests noch zu oft um die Ohren geflogen ist.
Auf den Verbindungen zwischen den Vermittlungen benutzen wir meist IAX2.
Hauptsächlich weil die Telefon-Admins selten auch die Firewall-Admins sind
und man die Öffnung eines einzigen UDP-Ports besser argumentiert bekommt
als Connection-Tracking und NAT-Magie für SIP, auch wenn das Ganze
über ein
VPN mit privaten IP-Ranges läuft. IMO nehmen sich beide Protokolle nicht
viel und riechen beide etwas streng, nur anders. Aber das Internet ist auch
keine Blümchenwiese.
Daher habe ich als ersten Ansatz chan iax2.c geändert und Usern eine
Option
"calleridprefix" hinzugefügt, mit der das
Rückrufpräfix in der iax.conf
gesetzt werden kann. Leider ist unser Wiki z.Zt. etwas defekt und zeigt
keine <pre>-Blöcke an, eine Kopie des Patches habe ich hier
abgelegt:
http://hendrek.frell.ambush.de/~packbart/asterisk 1 2 chan iax2
calleridprefix.patch
Das funktioniert soweit gut.
Damit kann ich den regionalen Gruppen ihre Vorwahlen zuordnen:
[koeln]
...
calleridprefix