Zwei Asterisk-Server mit IAX2 verbinden

 

Sollen zwei Asterisk miteinander verbunden werden, gibt es eigentlich zwei Gründe:

Es sollen die User auf dem anderen Asterisk erreicht werden, und/oder
es sollen externen Verbindungsmöglichkeiten des anderen Asterisk genutzt werden.

In jedem Fall brauchen wir zunächst die Einträge in den iax.conf der beiden Asterisk, also

iax.conf asterisk1:

[asterisk2]
type=friend
context=asterisk-in
host=asterisk2.dyndns.org
auth=rsa
inkeys=asterisk2
outkey=asterisk1

iax.conf asterisk2:

[asterisk1]
type=friend
context=asterisk-in
host=asterisk1.dyndns.org
auth=rsa
inkeys=asterisk1
outkey=asterisk2

Ich bevorzuge Authentifizierung mit rsa. Schlüssel erstellt man mit astgenkey.
Selbstverständlich ist auch md5 möglich. Dazu müssen die Zeilen inkeys und outkey durch secret=passwort ersetzt werden.

In beiden extensions.conf brauchen wir einen context, im Beispiel asterisk-in. Diesen erstellen wir gemäß unseren wünschen, also z.B.

Asterisk1

[asterisk-in]
exten => _12XX,1,Dial(SIP/${EXTEN}); interne Gespräche via Sip

[raus]
exten => _22XX,1,Dial(SIP/${EXTEN}) ; externe Gespräche anderer Asteisk intern
exten => _0X.,Goto(asterisk2,${EXTEN},1) ; externe Gespräche via anderer Asterisk

[asterisk2]
exten => _XX.,1,Dial(IAX2/asterisk1@asterisk2/${EXTEN})

Asterisk2

[asterisk-in]
exten => _22XX,1,Dial(SIP/${EXTEN})
exten => _XXXX.,1,Goto(provider-out,${EXTEN},1)

Eingehende Anrufe mit einer vierstelligen Nummer, die mit 12 bzw. 22 beginnen werden direkt mit dem SIP-Protokoll angewählt, solche die mit mindestens 5 Ziffern beginnen, werden in den context provider-out weitergeleitet, um dort den einzelnen Accounts zugeschieden zu werden.

Für einen Anruf von asterisk1 nach asterisk2 brauchen wir einen Wahlbefehl in der extensions.conf bei asterisk1:

exten => _XX.,1,Dial(IAX2/iax_contextname_auf_anderem_Asterisk@anderer_Asterisk/${EXTEN}) oder in unserem Beispiel

[asterisk2]
exten => _XX.,1,Dial(IAX2/asterisk1@asterisk2/${EXTEN})

Für einfache Verhältnisse ist dieses Vorgehen sicher problemlos möglich. Bei umfangreichen Weiterleitungen ist das aber unbequem.

Asterisk bietet auch die Möglichkeit, einen context auf einem anderen Asterisk direkt zu benutzen.

Dazu brauchen wir wieder unsere beiden iax.conf. Diese müssen wir nun aber erweitern. Für jeden context den wir benutzen wollen brauchen wir auch einen context= Eintrag auf dem Server der den context zur Verfügung stellen soll. Also in unserem Fall in der iax.conf von asterisk2. Die sieht dann so aus:

[asterisk1]
type=friend
context=asterisk-in
context=sipgate
host=asterisk1.dyndns.org
auth=rsa
inkeys=asterisk1
outkey=asterisk2

In der extensions.conf von asterisk1 legen wir einen neuen context an:

[contextname]
switch => protokoll/zielasterisk/dortiger_context

oder konkret für unser Beispiel:

[sipgate]; mit Sipgate raus
switch => IAX2/asterisk2/sipgate

Die Anwahl in der extensions.conf von asterisk1 sieht dann so aus:

exten => _0049.,1,Goto(sipgate,${EXTEN,1)

Somit können für ein und denselben Account auf den beiden Asterisk vollständig unterschiedliche Wahlregeln definiert werden. Die zu wählende Nummer wird von den beiden Asterisk wahlfertig in den Rauswahlkontext auf Asterisk2 übergeben.

Wird ein zentraler Asterisk von mehreren anderen Asterisk mitbenutzt, empfielt es sich, die Dialpläne über DUNDi zu sharen.

 

Stand: 07.08.06