Wireguard-VPN-Tunnel für IAX2-Vernetzungen zwischen Asterisk-Servern

16. Februar 2026

Das Beispiel: Zwei Asterisk-Server sind bereits erfolgreich über eine IAX2-Verbindung miteinander verbunden. Diese IAX2-Verbindung soll nun in beiden Richtungen durch einen VPN-Tunnel geschickt werden. Dazu kommt die VPN-Software  Wireguard zum Einsatz. Beide Asterisk-Server laufen auf Linux Debian (z.B. Ubuntu oder Raspian). Das Vorgehen  und Einrichten wird an einem Beispiel zwischen den beiden fiktiven Asterisk-Servern Michael und Volker erklärt, da man sonst alles vermischt. Zum Schluss erklärt der Artikel, wie man mehrere Asterik-Server mit IAX2 und Wireguard abhörsicher vernetzen kann.

Bei der Einrichtung hat mir der Chatbot Claude.ai sehr geholfen. Am besten richtet man an ihn  Rückfragen und sendet Claude die Fehlermeldungen zu, falls etwas nicht klappt. Oft liegt es an Aktualisierungsproblemen. Claude hilft dann mit den richtigen Linuxbefehlen weiter. Getestet habe ich die Verbindung zwischen einem Strato-Server mit Asterisk 18 und einem Raspberry Pi und Asterisk 16.

ChatGPT Image 16. Feb. 2026, 12 05
Im ersten Schritt werden zwei Asterisk-Server mit IAX2 verbunden. Wenn sie funktioniert, kann sie mit der VPN-Software Wireguard getunnelt und somit verschlüsselt werden.

Voraussetzung ist, dass bereits erfolgreich eine IAX2-Verbindung zwischen den beiden Servern besteht. Dies wurde bereits auf https://elektronikbasteln.pl7.de/mehrere-asterisk-server-ueber-das-iax2-protokoll-verbinden erklärt.

Die bereits vorhandenen iax.conf als fiktives Beispiel: Auf Michael befindet sich bereits folgende iax.conf:

; iax.conf auf Server von Michael

[general]
disallow=all
allow=alaw
allow=ulaw
allow=gsm  
allow=g722

jitterbuffer=no
forcejitterbuffer=no
autokill=yes
delayreject=yes
requirecalltoken=no
qualify=yes


; ++ Volker mit Vorwahl 8842 erreichbar laut extensions.conf ++

[outgoing-volker]
type=peer
username=incoming-michael
context=telefone
host=volker.dyndns.org
secret=123abc
auth=md5
trunk=no
qualify=yes
requirecalltoken=no
calltokenoptional=yes
authdebug=yes


[incoming-volker]
type=user
username=outgoing-michael
context=telefone
host=volker.dyndns.org
secret=123abc
auth=md5
trunk=no
qualify=yes
requirecalltoken=no
calltokenoptional=yes
authdebug=yes

Auf Michaels Server könnte in der dortigen extensions.conf unter [telefone] folgender Eintrag stehen:

; IAX2-Verbindung zu Volkers Server mit Vorwahl 8842
exten => _8842X.,1,NoOp(IAX2 - Michael ruft Volker an mit Vorwahl 8842)
same => n,Dial(IAX2/outgoing-volker/${EXTEN:4})

Mit der Vorwahl 8842 lassen sich die Nummern auf Volkers Server erreichen.

Entsprechend befindet sich auf Volkers Server bereits folgende iax.conf:

; iax.conf auf Server von Volker

[general]
disallow=all
allow=alaw
allow=ulaw
allow=gsm  
allow=g722

jitterbuffer=no
forcejitterbuffer=no
autokill=yes
delayreject=yes
requirecalltoken=no
qualify=yes


; ++ Michael mit Vorwahl 8845 erreichbar laut extensions.conf ++

[outgoing-michael]
type=peer
username=incoming-volker
context=telefone
host=michael.dyndns.org
secret=123abc
auth=md5
trunk=no
qualify=yes
requirecalltoken=no
calltokenoptional=yes
authdebug=yes


[incoming-michael]
type=user
username=outgoing-volker
context=telefone
host=michael.dyndns.org
secret=123abc
auth=md5
trunk=no
qualify=yes
requirecalltoken=no
calltokenoptional=yes
authdebug=yes

Auf Volkers Server könnte in der dortigen extensions.conf unter [telefone] folgender Eintrag stehen:

; IAX2-Verbindung zu Michaels Server mit Vorwahl 8845
exten => _8845X.,1,NoOp(IAX2 - Volker ruft Michael an mit Vorwahl 8845)
same => n,Dial(IAX2/outgoing-michael/${EXTEN:4})

Die Angaben sind fiktiv und die Passwörter sind der Übersichtlichkeit wegen schwach gewählt. Falls es die michael.dyndns.org und die volker.dyndns.org bereits gibt, ist das rein zufällig. Hier am Beispiel hat Michaels Server die URL michael.dyndns.org und Volkers Server die volker.dyndns.org, damit man sich das ganz einfach merken kann.

Abändern der beiden iax.conf: Damit wir eine VPN-Verbindung aufbauen können, müssen die beiden URLs durch andere IP-Adressen ersetzen, die der VPN-Tunnel verwendet. Im Beispiel ersetzen wir

auf Volkers Server die beiden Zeilen
host=michael.dyndns.org durch host=10.99.99.1

auf Michaels Server die beiden Zeilen
host=volker.dyndns.org durch host=10.99.99.2

Mehr müssen wir an den beiden iax.conf nicht verändern.

Firewall und Portforwarding:  Wireguard verwendet den UDP-Port 51820. Auf beiden Servern eventuell die Firewall öffnen:

sudo ufw allow 51820/udp

Falls ein  Server (zum Beispiel ein Raspberry Pi) hinter einem  Router ist, dann im Router Portweiterleitung für 51820 UDP einrichten.

Wireguard installieren: Auf beiden Servern müssen wir Wireguard installieren:

sudo apt-get update
sudo apt-get install wireguard

Dann auf beiden Servern die Schlüssel generieren:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

Die Schlüssel anzeigen lassen: Auf jeden Server wurde ein privat key und ein public key erzeugt. Der privat key bleibt auf dem Server und den geben wir nicht aus der Hand. Den public key müssen wir dem anderen Server mitteilen.

Private Key anzeigen lassen:

cat /etc/wireguard/privatekey

Public Key anzeigen lassen:

cat /etc/wireguard/publickey

Den public und private key, der auf auf  Volkers Server erzeugt wurde, nennen wir zur besseren Unterscheidung hier im  Beispiel volkerpublickey und volkerprivatekey. Entsprechend wurden auf Michaels server michaelpublickey und michaelprivatekey erzeugt.

Die wg0.conf auf etc/wireguard: Wir erzeugen nun eine Textdatei namens wg0.conf für Volkers Server mit folgendem Inhalt:

[Interface]
PrivateKey = volkerprivatekey
Address = 10.99.99.2/24
ListenPort = 51820

[Peer]
PublicKey = michaelpublickey
AllowedIPs = 10.99.99.1/32
Endpoint = michael.dyndns.org:51820
PersistentKeepalive = 25

Damit wir diese erstellen können, müssen wir von Michael die michaelpublickey per E-Mail, mündlich, per Post oder sonst wie erhalten haben. Unseren private key geben wir niemals her. Die puplic keys müssen wir uns gegenseitig austauschen.

Die Dateiberechtigung sollte eine Leseberechtigung für root sein, um die Schlüssel zu schützen. Vorsicht, wenn die Datei auf Windows erzeugt wurde. Sie muss dann eventuell entsprechend für Linux konvertiert werden.

Diese Datei kopieren wir in den Ordner etc/wireguard auf Volkers Server.

Entsprechend sieht dann etc/wireguard/wg0.conf auf Michaels Server aus:

[Interface]
PrivateKey = michaelprivatekey
Address = 10.99.99.1/24
ListenPort = 51820

[Peer]
PublicKey = volkerpublickey
AllowedIPs = 10.99.99.2/32
Endpoint = volker.dyndns.org:51820
PersistentKeepalive = 25

Beachte, dass 10.99.99.2 und 10.99.99.1 vertauscht wurden. Die URL volker.dyndns.org und michael.dyndns.org können wir auch durch entsprechenden statischen öffentlichen IP-Adressen der Server ersetzen. Die Eingabe einer statischen öffentlichen IP wäre die bessere Lösung.

Initialisierungen und Aktualisierungen: Wir nun alles erfolgreich eingerichtet. Nun müssen wir höchstwahrscheinlich Wireguard und Asterisk auf beiden Servern aktualisieren.

IAX2 von Asterisk neu starten:

# IAX2 komplett neu starten
sudo asterisk -rx "module unload chan_iax2.so"
sudo asterisk -rx "module load chan_iax2.so"

# Status prüfen
sudo asterisk -rx "iax2 show peers"
```

**Jetzt sollte stehen:**
```
Host: 10.99.99.2 oder 10.99.99.1

Wireguard neu starten:

sudo systemctl restart wg-quick@wg0

Oder noch sicherer:

# Komplett stoppen
sudo wg-quick down wg0

# Neu starten
sudo wg-quick up wg0

Nun kannst du die getunnelte IAX2-Verbindung in beiden Richtungen mit Testanrufen ausprobieren!

Testen der VPN-Verbindung:

sudo wg show

in Asterisk:

iax2 show peers

Falls dir die Meldungen verdächtig vorkommen, dann teile sie Claude.ai einfach mit und erkläre den Sachverhalt.

Regelmäßiger DNS-Lookup: Falls der andere Server eine dynamische öffentlich IP hat, könnte es laut https://elektronikbasteln.pl7.de/mehrere-asterisk-server-ueber-das-iax2-protokoll-verbinden sinnvoll sein eine dnsmgr.conf wie folgt in Asterisk einzurichten:

; Einträge in der dnsmgr.conf für einen regelmäßigen DNS-Lookup
;
[general]
enable=yes              ; enable creation of managed DNS lookups
                        ; default is 'no'
refreshinterval=120     ; refresh managed DNS lookups every <n> seconds
                        ; default is 300 (5 minutes)

Claude konnte mir keine Antwort darauf geben. Deshalb schadet diese Einrichtung nicht, falls sich die öffentliche dynamische IP ändert, damit sich ein DynDNS-Dienst aktualisieren kann.

Weitere IAX2-Verbindungen mit Wireguard zu mehreren Asterisk-Servern aufbauen: Siehe https://claude.ai/share/b96c6135-4733-4d68-812d-5314a3d7c2ba.

Telefoni servrar och VPN nätverk
Es lassen sich auch mehr als zwei Asterisk-Server mit IAX2 und Wireguard vernetzen.

Wie abhörsicher ist Wireguard? WireGuard-Verbindungen sind sehr abhörsicher und gehören zu den sichersten VPN-Lösungen, die derzeit verfügbar sind.

Kryptographische Sicherheit: WireGuard verwendet moderne, bewährte Kryptographie:

ChaCha20 für Verschlüsselung (sehr schnell und sicher)
Poly1305 für Authentifizierung
Curve25519 für Schlüsselaustausch
BLAKE2s für Hashing
HKDF für Schlüsselableitung

Diese Algorithmen sind State-of-the-Art und werden auch von Kryptographie-Experten empfohlen.

Praktische Abhörsicherheit: Sehr hoch geschützt gegen:

Passives Abhören des Netzwerkverkehrs (z.B. durch ISPs, Behörden)
Man-in-the-Middle-Angriffe
Replay-Angriffe
Unberechtigten Zugriff ohne Private Key

Was WireGuard bietet:

Ende-zu-Ende-Verschlüsselung zwischen den Servern
Perfect Forward Secrecy – selbst wenn ein Schlüssel kompromittiert wird, bleiben alte Verbindungen sicher
Authentifizierung – nur Server mit dem richtigen Key können sich verbinden
Minimaler Code (ca. 4.000 Zeilen) = weniger Angriffsfläche als komplexe VPNs wie OpenVPN

Wichtige Einschränkungen: WireGuard schützt NICHT gegen:

Kompromittierung eines Servers – wenn jemand Zugriff auf einen Server und den Private Key hat, kann er den Verkehr entschlüsseln
Metadaten – WireGuard verschlüsselt den Inhalt, aber IP-Adressen und Verbindungszeiten bleiben sichtbar
Fehlerhafte Konfiguration – z.B. wenn Private Keys unsicher gespeichert werden

Best Practices für maximale Sicherheit

Private Keys schützen: Nur Root-Zugriff, Dateiberechtigungen 600
Regelmäßige Updates der WireGuard-Software
Firewall konfigurieren – nur notwendige Ports öffnen
Schlüsselrotation bei Verdacht auf Kompromittierung

Fazit: Für deine IAX2-Verbindungen zwischen Asterisk-Servern ist WireGuard eine ausgezeichnete Wahl. Die Verbindung ist praktisch abhörsicher, solange die Server selbst nicht kompromittiert sind. Das ist deutlich sicherer als unverschlüsseltes IAX2 über das Internet.

Wie viele Telefongespräche gehen durch den  IAX2-Wireguard-Tunnel? Das hängt von mehreren Faktoren ab, aber hier sind die wichtigen Aspekte:

Theoretische Kapazität

WireGuard selbst setzt hier praktisch keine Grenzen – es kann Gigabit-Geschwindigkeiten erreichen. Die Begrenzung kommt von anderen Faktoren:

Praktische Begrenzungsfaktoren

1. Bandbreite deiner Internetverbindung

Ein typisches Telefongespräch mit IAX2 benötigt:

G.711 Codec: ca. 80-90 kbit/s pro Gespräch (hohe Qualität)
G.729 Codec: ca. 25-30 kbit/s pro Gespräch (komprimiert)
GSM Codec: ca. 13-20 kbit/s pro Gespräch (stark komprimiert)

Beispielrechnung mit G.711:

10 Mbit/s Upload = ca. 100-120 gleichzeitige Gespräche
50 Mbit/s Upload = ca. 500-600 gleichzeitige Gespräche
100 Mbit/s Upload = ca. 1000+ gleichzeitige Gespräche

2. CPU-Last

WireGuard ist sehr effizient, aber Verschlüsselung kostet CPU
Asterisk selbst braucht auch CPU für Transcoding (falls nötig)
Moderne Server können typisch hunderte bis tausende Gespräche verarbeiten

3. IAX2-Trunking (wichtig!)

IAX2 kann mehrere Gespräche bündeln (Trunking):

Reduziert Overhead
Effizienter bei vielen gleichzeitigen Gesprächen
Solltest du aktivieren bei höherer Last