Zwei Asterisk-SIP-Server über IAX2 verbinden

24.12.2021

Zwei Asterisk-Telefon-Server lassen sich über das IAX2-Protokoll mit wenig Aufwand verbinden. Dabei ist sogar das  Trunking möglich. Das heißt, dass ganze Nummernblöcke des anderen Asterisk-Servers direkt angewählt werden können.

Nachtrag vom 26.01.2022: Mehr Erfahrung besteht mit der unter https://elektronikbasteln.pl7.de/mehrere-asterisk-server-ueber-das-iax2-protokoll-verbinden beschriebenen Methode, die auch IAX2-Verbindungen zu beliebig vielen Asterisk-Servern erlaubt, damit der Weg für Erweiterungen offen ist. Dort ist auch die Aktivierung des DNS-Lookup in der dnsmgr.conf beschrieben, falls Verbindungsabbrüche auftreten.

Voraussetzung ist, dass sich zwei Asterisk-Server über eine IAX2-Verbindung einigen. Jeder Router der beiden Asterisk-Server muss für den Port 4569 UDP eine Portweiterleitung eingerichtet haben. Weitere Ports müssen für IAX2-Verbindungen nicht weitergeleitet werden. Jeder Asterisk-Server sollte über einen DynDNS-Dienst erreichbar sein, der sich ebenfalls im Router einrichten lässt.

Weiterhin ist auf jedem Asterisk-Server die iax.conf zu konfigurieren. In der extensions.conf müssen weitere Einträge erfolgen. Alles andere bleibt wie es ist.

Beispiel IAX2-Verbindung zwischen zwei Asterisk-Servern (getestet mit Asterisk 16.2.1): Im Beispiel sollen zwei Asterisk-SIP-Server, die wir „Schweden“ und „Deutschland“ nennen, über IAX2 verknüpft werden. Man achte darauf, dass die Passwörter für der beiden verknüpften Server gleich sind. Im Beispiel lauten sie „passwort“.

Die beiden Asterisk-Server haben URLs von DynDNS-Anbietern erhalten. Im Beispiel kommen die fiktiven DynDNS „urlschweden.se“ und „urdeutschland.de“ zum Einsatz. In Wirklichkeit sind sie bei DynDNS-Anbietern (z.B. https://www.dslvergleich.net/magazin/ratgeber/die-besten-dyndns-anbieter/ ) zu beschaffen. Es gibt kostenlose Anbieter. Die DynDNS wird im Router eingetragen. Ist man in der glücklichen Lage eine statische öffentliche IP seines Internet-Providers zu besitzen, kann man diese IP anstelle der DynDNS verwenden.

Die iax.conf von „Deutschland“:

; iax.conf von Deutschland. Der Server hat die URL urldeutschland.de (in der Regel von einem DynDNS-Anbietern)
;
; im CLI mit iax2 reload neu laden
; weitere CLI-Befehle:
; iax2 show peers
; iax2 show users
; Im Router Portforwarding für 4569 UDP vornehmen
;
[general] ; Dieser Abschnitt bleibt in der Regel immer gleich.
language=de
disallow=lpc10    
jitterbuffer=no
forcejitterbuffer=no
autokill=yes
delayreject=yes
videosupport=yes
;
register => deutschland:passwort@urlschweden.se ;urlschweden.se ist die fiktive DynDNS der Gegenstelle in Schweden
;
[schweden]
type=friend
host=dynamic
trunk=yes
secret=passwort
context=default

Die iax.conf von „Schweden“ ist „spiegelbildlich“:

; iax.conf von Schweden hat die URL urlschweden.se
; im CLI mit iax2 reload neu laden
; weitere CLI-Befehle:
; iax2 show peers
; iax2 show users
; Im Router Portforwarding für 4569 UDP vornehmen

[general] ; Dieser Abschnitt bleibt in der Regel immer gleich.
language=de
disallow=lpc10    
jitterbuffer=no
forcejitterbuffer=no
autokill=yes
delayreject=yes
videosupport=yes

register => schweden:passwort@urldeutschland.de

[deutschland]
type=friend
host=dynamic
trunk=yes
secret=passwort
context=default

Damit wären die beiden Server in Deutschland und Schweden verbunden. Für Telefonate fehlen noch die Einträge in der extensions.conf.

Die Erweiterungen in der extensions.conf von „Deutschland“:

; Auszug extensions.conf Deutschland


[default] ; in diesem Context stehen alle extensions der erreichbaren Nummern
include => schweden_iax

[schweden_iax] ; IAX2 auf den schwedischen Server
; pattern matching http://the-asterisk-book.com/1.6/einleitung-regex.html
exten => _8833X.,1,NoOp()
exten => _8833X.,n,Dial(IAX2/schweden/${EXTEN:4},50)
exten => _8833X.,n,Hangup()

; mit der Vorwahl 8833 kommst man über IAX2
; auf sämtliche Nummern des schwedischen Servers
; z.B. 88331000 die Testnummer für den Echotest

Erweiterungen in der extensions.conf von „Schweden“:

; Auszug extensions.conf Schweden


[default] ; in diesem Context stehen alle extensions der erreichbaren Nummern
include => deutschland_iax

[deutschland_iax] ; IAX2 nach Deutschland
; pattern matching http://the-asterisk-book.com/1.6/einleitung-regex.html
exten => _8834X.,1,NoOp()
exten => _8834X.,n,Dial(IAX2/deutschland/${EXTEN:4},50)
exten => _8834X.,n,Hangup()

; mit der Vorwahl 8834 kommst man über IAX2
; auf sämtliche Nummern des deutschen Servers
; z.B. 883415678 die direkte Durchwahl zur Nummer 5678

Selbstverständlich muss man nicht mit Vorwahlen arbeiten. Dann muss man aber aufpassen, dass sich die Nummern der beiden Asterisk-Server nicht überschneiden. Da aber jeder Server-Betreiber gerne sein eigenes Nummern-System hat, ist man mit Vorwahlen auf der sichereren Seite. Jeder Server-Betreiber kann zudem selbst die Vorwahlen festlegen.

Leider ist es uns noch nicht gelungen nach dieser Methode 3 Asterisk-Server über IAX2 zu verbinden. Wir arbeiten daran.

Weiterführenden Links zu IAX2, die mir geholfen haben:
http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/I_sect14_tt670.html
https://das-asterisk-buch.de/1.6/iax.html  (Grundlagen)
https://www.voip-info.org/asterisk-connect-2-servers/ (beschreibt verschiedene Methoden)

Asterisk-Server in einem Mesh-Netzwerk: Sollte im Netzwerk ein Asterisk-Server nicht erreichbar sein, wird er einfach ignoriert.  In einem weiteren Schritt lassen sich Asterisk-Server deshalb zu einem Meshnetz zusammenschalten. Unter https://github.com/ybinzu/asterisk_mesh gibt es bereits einen Ansatz.

In einem vollständig vermaschten Netzwerk ist von jedem Knoten jeder andere Knoten ohne Umwege direkt erreichbar. Sollten eine oder mehrere Verknüpfungen ausfallen, finden sich über andere Knoten alternative Verbindungen. Je mehr Verbindungen bestehen, desto robuster ist das Netzwerk.

Laut https://de.wikipedia.org/wiki/Vermaschtes_Netz hat ein vermaschtes Netz folgende Vorteile und Merkmale: „Vermaschte Netze sind im Regelfall selbstheilend und dadurch sehr zuverlässig: Wenn ein Knoten oder eine Verbindung blockiert ist oder ausfällt, kann sich das Netz darum herum neu stricken. Die Daten werden umgeleitet und das Netzwerk ist nach wie vor betriebsfähig.“. Die Programmierung eines selbstheilenden Meshnetzwerkes ist eine Herausforderung.

Interessant ist das für jene, die gerne mit Asterisk experimentieren und ihr Netzwerk erweitern wollen. Nach dem Gesetz von Metcalfe ist ein Netzwerk um so attraktiver je mehr Teilnehmer es besitzt. Dadurch zieht es immer mehr Teilnehmer an. Der Anfang ist allerdings schwer und setzt bei den wenigen Teilnehmern der ersten Stunde Idealismus voraus.

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter