Nachtrag zum Themenkomplex Asterisk auf Fritz!Box: der interne S0

Ist im anderen Posting leider untergegangen; das Problem mit dem internen S[sub]0[/sub] der Fritz!Box ist, daß, offensichtlich anders als beim externen, hier ein sehr aggressiver AVM-propietärer Daemon drauf lauscht und auch schon mal gerne sich in die CAPI-Kommunikation einmischt. Was (bislang zumindest) hervorragend geht, ist ein Gespräch per IAX zum Asterisk auf einer Fritz!Box schicken, diese leitet jenen dann auf den internen S[sub]0[/sub] per Dial(CAPI/ISDN-INT/${EXTEN}).
Was nicht geht, ist das Abgreifen von Anrufen, die vom internen S[sub]0[/sub] (oder der internen DECT-Basis z. B. beim Speedport W900V über den internen S[sub]0[/sub]) ausgehen; zwar bekomme ich einen solchen Anruf weitergeleitet, muß aber damit rechnen, daß, während z. B. ein entfernter Asterisk den Ruf noch aufbaut, lokal schon ein Besetztzeichen eingespielt wird. Lustigerweise wechselt das teilweile wieder zum Klingelton, wenn’s »drüben« wirklich klingelt …
Kurzum: das ist faktisch nicht einsetzbar. Da mein Hauptziel aber auch nicht die komplette Ersetzung der AVM-Daemons war, löse ich derlei über eine SIP-Verbindung Fritz!Box zu Asterisk (wobei das derzeit zu einem zentralen Asterisk erfolgt, aber auch lokal funktionieren müßte). Einziges Manko, was mich etwas stört: als »gelernter« ISDN-Nutzer fällt mir natürlich sofort die »Ziffernsammelpause« auf, die die Fritz!Box bei einer Nummer ohne abschließendens »#« in Sekundengröße einlegt. Ich schätze, Analog-Nutzer vermissen da nur das Piep-Pieeep-Piiiep des MFV und stören sich nicht an der Sekunde Stille — ich bin nicht ganz glücklich, aber gut, so ist es nun einmal. (Irgendwann hole ich mir auch noch mal so einen Bakelit-Fernsprecher aus den 50ern; wobei: wo kann ich den noch anschließen, IIRC kann Pulswahl kein aktuelles Gerät mehr?)
Naja, und nachdem sie so dermaßen im Preis gefallen ist, habe ich mir heute Mittwoch eine »Dlink Horst-Box Professional« bestellt. Mal schauen, was mit Schäzchen alles zu machen ist –. immerhin mit »Asterisk on Board« ;)

Verteilte Telefonie mit Asterisk und Fritz!Box Fon

Ein ganz klein wenig bin ich jetzt doch stolz ;) Naja, whatever: auch wenn es etwas länger gedauert hat als gedacht, meine Kopplung mehrerer Fritz!Boxen zu einer Art verteilten Telefonanlage funktioniert nun endlich.
Wenngleich man schon viele lustige Sachen mit einer Fritz!Box alleine machen kann, eines nervt doch: selbst wenn man über Rufumleitung > Parallelruf einen Parallelruf via SIP startet, kommt die A-Rufnummer leider nicht mit. Derlei hätte ich aber gerne, denn ich möchte etwas wie eine »abgesetzte Nebenstelle« realisieren: bin ich grade nicht im Office, sollen die Anrufe – so transparent und so kostengünstig wie möglich – an einem anderen Ort – nennen wir’s mal Homeoffice – signalisiert und beantwortbar gemacht werden.
Und nachdem schon jahrelang vorgearbeitet wurde, habe ich es nun aufgegeben, mit AVM-Bordmitteln mein Ziel zu erreichen zu versuchen und kurzerhand auch auf die relevanten Fritz!Boxen Asterisk ausgerollt — mit bislang sehr angenehmen Ergebnis.
Vielleicht ein Wort vorab zu Infrastruktur: ich selber setze seit knapp 20 Jahren auf ISDN, weil es einfach damals die überlegene Technologie war und in vielerlei Hinsicht meines Erachtens auch heute, im Zeitalter von NGN-Telefonie, noch aus Anschlußsicht ist. Somit habe ich natürlich zu Hause ISDN, AFAIK noch »echtes« ISDN und keine NGN-ISDN-Emulation … Der S[sub]0[/sub] zieht sich – selbstverlegt – durch alle drei Etagen der Wohnung, der NTBA ist im Keller. Daneben gab es mal einen zweiten, von Asterisk & HFC-Karten gespeisten, S[sub]0[/sub], der liegt aber seit ein paar Jahren aufgrund von mangelder Stabilität still. Am S[sub]0[/sub] hängen ein SX353isdn – eine Gigaset-ISDN-DECT-Anlage – sowie ein A/B-Wandler für den Anschluß des obligatorischen Faxgerätes (HP OfficeJet 5600Series). Sowie, neuerdings, ein Speedport W701V (auf AVM-Oberfläche umgeflasht, also eine 7170 ohne internen S[sub]0[/sub]) als Remote-CAPI-Lösung – die im Asterisk-Server eingebaute HFC-Karte lief mit bristuff wieder nicht stabil :( –, außerdem noch ein umgefritzter Speedport W900V als »Mittler« zwischen ISDN und SX353isdn (Wunschvorstellung wäre gewesen, daß jener W900V CAPI-Endpunkt für T-ISDN einerseits und CAPI-Endpunkt für den internen S[sub]0[/sub], also die ISDN-Geräte im Haus, andererseits wird; dazu später mehr).
Das »Office« ist über Alice-DSL (AliceComfort, weil ich ja ISDN als Telefonie-Schnittstelle sowie zwei »Amtsleitungen« haben möchte) erschlossen, den Netzabschluß bildet ein Alice-IAD, an wessen S[sub]0[/sub]-Ausgang sich der netzseitige S[sub]0[/sub]-Eingang einer Fritz!Box 7170 anschmiegt. Telefonie ermöglicht ein Sinus 43 aus der Bucht, an welches per DECT sich weitere Mobilteile hängen können. Die analogen Ports der Fritz!Box sind nicht in Benutzung; evtl. kommt hier später noch ein Fax hinzu, was für die Betrachtung der Telefonie aber nicht relevant ist.
Für meine Anwendung das Kernproblem der Fritz!Boxen ist, daß sie auf SIP aufbauen, einem im NAT-Umfeld nicht trivialen Protokoll, ferner gerne mal mit ihrer öffentlichen IP rausgehen (was natürlich als Router hinter einem Router eher keine wirklich öffentliche IP liefert), selbst bei Routing über einen Tunnel :( Und wahrscheinlich gab es hinsichtlich der technischen Optionen Vorgaben der Netzbetreiber, was sie als Feature eher doof fänden, daraus resultieren meines Erachtens vermutlich einige Einschränkungen.
Nun denn, die Lösung, wie so oft, lautet hier Asterisk, denn dankenswerterweise kann man auch auf den linuxbasierten Fritz!Boxen auf die CAPI zugreifen und da AVM es genauso macht, gibt es bei viellen Anwendungen gar keine Probleme. Remote-CAPI allerdings ist auf Serverseite problematisch, da ein Server nur eine Remote-CAPI über das fbrcapi.ko-Modul ansprechen kann; somit war der nächste logische Schritt, es mit Asterisk auf der Fritz!Box zu versuchen. Wie schon geschrieben, mit der aktuellen Firmware-Version ….70 sind die Pakete von »dynamic« unter c2a2b2.com zielführend. Da man eine solche Fritz!Box wohl zuvor schon mit den Pseudo-Images von The-Construct.com um u. a. dropbear (und, in meinem Fall, OpenVPN zur Fernadministration und besser kontrollierbarem VoIP-Routing) erweitert hat, ich die Fernadministration bzw. -konfiguration der Logfiles dank sshfs auch kein Thema mehr.
Die gewählte, ersteinmal funktionale, Lösung ist … etwas komplex. Die Zielsetzung war:

  • Anrufe auf der Office-Nummer sollen auf einer MSN im Homeoffice inkl. orginaler A-Rufnummer signalisiert werden und angenommen werden können.
  • Anrufe auf einer bislang im Homeoffice genutzten MSN sollten parallel, möglichst, aber nicht zwingend, wieder mit korrekter A-Rufnummer, im Office signalisiert werden und angenommen werden können.
  • Möglichst auch aus dem Homeoffice sollte eine Rauswahl mit der Office-Nummer, z. B. für Rückfragen, Beantwortung von Nachrichten auf dem Office-Anrufbeantworter, möglich sein.

Für die simple Weiterleitung eines Anrufes Office->Homeoffice ud umgekehrt bietet die Fritz!Box-Oberfläche schon den sog. Parallelruf an; das funktioniert über’s Festnetz wie über SIP – leider aber eben auch im letzten Fall mit Rufnummer des absetztenden Anschlusses und nicht der des Anrufers von außen. Außerden müßte man hier unterschiedliche MSNs verwenden, da sonst ein Anruf von außen auf der Office-MSN dort als auch an der Homeoffice-MSN signalisiert würde. Durch den eingegenden Anruf auf der Homeoffice-MSN wird aber die Weiterleitung an die Office-MSN getriggert, wie wiederum … Ja, das’ doof. Auch doof, daß ein Anruf von Familienmitgliedern von zu Hause auf der Office-MSN zum klingeln der Homeoffice-MSN führt. Da wird man dann irgendwann wahnsinnig ;)
Rauswahl über den neuerdings vorhandenen SIP-Registrar in der 7170-Firmware bzw. schon die Kopplung zweier Fritz!Boxen über OpenVPN-Verbindungen tat bei mir irgendwie nicht; tcpdump zeigte, daß die Antworten der fernen Fritz!Box auch über den OpenVPN-Tunnel mit deren offizieller IP ankamen. Ich hab’ das dann irgendwann einfach sein gelassen, auch die Kopplung des zentralen Asterisk an eine solche Fritz!Box scheiterte (»chan_sip.c:12537 handle_response_register: Got 404 Not found on SIP register to service 620@192.0.2.17, giving up«) — ich habe dann die Keule rausgeholt und Asterisk installiert.
Dreh- und Angelpunkt ist mein zentraler Asterisk-Server, der für die Fritz!Boxen gleichzeitig OpenVPN-Server ist; hier finden im Groben die Routingentscheidungen statt, die Fritz!Boxen sind im Grunde nur CAPI-IAX-Gateway. Anrufe von außen auf den Fritz!Boxen kommen auf dem Asterisk per CAPI an und werden, je nach lokaler Konfiguration, per IAX2 an den zentralen Asterisk (ast-1) weiterverbunden (insbes. im Falle der Office-Fritz!Box):
[from-amt]
exten => 5000000,1,Dial(IAX2/ast-1/2000000,30) ; peercontext=from-office in iax.conf
exten => 5000000,n,Hangup

Für den Parallelruf sondere ich lokale MSNs aus (Anrufe, die per IAX reinkommen und vom lokalen S[sub]0[/sub] stammen, werden sofort mit Hangup() beantwortet) und übergebe ansonsten über Dial(IAX2/FBW900V-1-out/${EXTEN}) an den Asterisk der heimischen W900V:
[from-office]
exten => 2000000/05241200000,1,Hangup
exten => 2000000,1,NoOp,${CALLERID(all)}
exten => 2000000,n,NoOp,${CALLERID(rdnis)}
exten => 2000000,n,Dial(IAX2/FBW900V-1-out/2000000,,rt) ; peercontext=from-ast-1
exten => 2000000,n,Hangup

Diese wiederum hat einen recht simplen Kontext an dieser Stelle:
[from-ast-1]
exten => _0X.,1,Dial(CAPI/ISDN-AMT/${EXTEN},55,Tt/bd)
exten => _0X.,n,Hangup
exten => _Z.,1,Dial(CAPI/ISDN-INT/${EXTEN},55,Tt/bd)
exten => _Z.,n,Hangup

ISDN-AMT ist hier der externe, ISDN-INT der interne S[sub]0[/sub]; die Weiterleitung per IAX2 funktioniert unter Beibehaltung der orginalen CallerID, die dann auch auf den ISDN-/DECT-Endgeräten (nahezu) korrekt angezeigt wird (»Anruf von 0800000000 auf 2000000«; richtiger wäre natürlich die Office-MSN).
Der Weg Homeoffice-MSN -> Office läuft analog, nur daß ich hier a) derzeit keinen A-Rufnummern filtere und b) der Signalisierung und der Rufabgriff auf ast-1 über Remote-CAPI schon erfolgt, nicht über IAX und die W900V:
[from-capi-amt]
exten => 2000000,1,Dial(IAX2/FB-OFFICE-out/5000000,25)
exten => 2000000,n,Hangup

Da der Kontext [from-ast-1] auf der Office-FB nahezu identisch zum schon gezeigten ist (nur für die Rauswahl wird eine andere als MSN gesetzt, daß die Office-MSN nicht die erste MSN des Anschlusses ist, welche bei einer ungültigen/leeren Abgangsrufnummer vom ISDN-Netz zwangsweise gesetzt würde), schenke ich mir Auflistung und Erklärung ;)
Trickreich ist dann der Wunsch Nummer 3: mit der Office-MSN raustelefonieren können. Dies liesse sich einmal per SIP realisieren (neben anderen bietet z. B. auch sipgate.de an, eine spezielle Nummer für CLIP zu setzen – wenngleich die eigentliche, dem SIP-Zugang zugeordnete, Rufnummer auch mit übertragen wird), aber wenn ich doch nun schon verbundene Asteriske habe, geht das auch so: die W900V, an deren internem S[sub]0[/sub] die heimischen Telefone hängen, bekommt einen SIP-Account auf ast-1 und verbindet sich mit diesem. Als Internetrufnummer habe ich in der Fritz!Box-Oberfläche hier »90« eingetragen. Generische Wahlregeln gibt es keine und da die Fritz!Box relativ intelligent entscheidet, ob es über Festnetz oder IP rausgeht, muß man nur die abgehende Rufnummer nach Wunsch konfigurieren:

Ob ein Gespräch über Festnetz oder Internet geführt wird, entscheidet FRITZ!Box Fon anhand der gehenden Rufnummer. Die Regel dabei ist einfach: Ist die Abgangs-MSN eine Internet- oder eine VoIP-fähige Festnetznummer, wird das Gespräch über das Internet aufgebaut. Alle anderen Rufe werden über das Festnetz geführt. Für Geräte ohne Abgangsrufnummer kann in der Box eine Hauptrufnummer (Festnetz oder Internet) hinterlegt werden.

 
Die Gigaset-DECT-Basis im SX353isdn ermöglicht es, vor jeder Wahl die abgehende MSN auszuwählen; hier habe ich einfach eine weitere, nämlich die »90« mit dem Namen »Office«, konfiguriert und kann nun entweder ein Mobilteil permanent auf Abgangs-MSN 90 stellen (und damit die Wahl über SIP zu ast-1 in den Kontext from-office forcieren (in SIP-Kontext wird die CallerID auf “90” gesetzt), wo es per exten => _X./90,1,Dial(IAX2/FB-OFFICE-out/${EXTEN},55,rt) weitergeht) oder fallweise über das heimische ISDN (mit heimischen MSNs) oder den Office-ISDN-Anschluß (mit der Office-MSN ausgehend) telefonieren.
(Kostenmäßig ist der Aufwand übrigens zweckfrei; beide ISDN-Anschlüsse sein Teil jeweils eines DSL-Komplettpaketes inkl. Festnetz-Flatrate. Einzig für Rückrufe auf Mobilfunknummern wäre es ein Kostenthema; wichtiger ist aber die korrekte rausgehende Rufnummer, um nicht wieder externe Rückrufe auf die Homeoffice-Nummer, an der kein Anrufbeantworter (mehr) hängt, zu erzeugen.)
Nun wird sich zeigen müssen, wie stabil das Setup ist und wie sich das qualitativ macht …