LINUXMAKER, OpenSource, Tutorials

Vorbereiten der Firewall für den Einsatz von Asterisk

Szenario

Hier ein kleines Szenario für Hardware, IT-Architektur, Telefon-Rufnummern und Software, wie sie dieser Anleitung zu Grunde liegt.

Asterisk-Server (Raspberry Pi): 192.168.10.200  

Allnet ALL-BM100VDSL2v

WAN-IP  
LinkSys-Router (OpenWRT) hinter DLS-Modem 192.168.10.1  
SIP-Telefon (OpenStage, Snom, Zoiper-Client) 192.168.10.11 +49 211 562 152 01
  192.168.10.12 +49 211 562 152 02
  192.168.10.13 +49 211 562 152 03

Da der Asterisk-Server im Normalfall geschützt im eigenen Netzwerk, abgetrennt von eigentlichen Datennetzwerk 192.168.0.0/24, hinter einer Firewall (z.B. LinkSys mit OpenWRT) stehen sollte, um vor externen Zugriffen geschützt zu sein, muss die Firewall entsprechend mit NAT konfiguriert werden.

Der LinkSys-Router wurde wie hier dokumentiert mit Virtuellen LANs konfiguriert, um das Telefonie-Netzwerk explizit vom eigentlichen Datennetzwerk im Intranet abgrenzen zu können.

SIP/RTP

PBX-Server kommunizieren miteinander über zwei wesentliche Protokolle. Zum Einen ist das das SIP-Protokoll (Session Initiation Protocol) zum Aushandeln und Aufrechterhalten der Telefonverbindung. Zum Anderen wird das RTP-Protokoll (Real-Time Transport Protocol) zur kontinuierlichen Übertragung von audiovisuellen Daten (Streams) benötigt.

Die Telekom nimmt über den Server tel.t-online.de den ausgehenden Datenverkehr an und das ist auch die Adresse, über die man sich als Teilnehmer registriert. Die IP-Adresse, die für den eingehenden Datenverkehr steht, liegt in dem Adressbereich 217.0.0.0/13, denn die Telekom wechselt hier öfters die zuständigen Server. Somit macht es Sinn auf der Firewall folgendes Port Forwarding anzulegen:

SIP-Signalisierung:

IPv4-UDP, IPv4 UDP, Source 217.0.0.0/13 Source-Port any Destination eigene-WAN-IP Destination-Port 5060 ? Destination 192.168.10.200 Destination-Port 5060

RTP-Gesprächsdaten:

IPv4 UDP, Source 217.0.0.0/13 Source-Port any Destination eigene-WAN-IP Destination-Port 30000-30100 ? Destination 192.168.10.200 Destination-Port 30000-30100

Analog erfolgt folgender Eintrag in der Datei /etc/asterisk/rtp.conf:

[general]
rtpstart=30000
rtpend=31000

Das Adressenumschreiben via NAT reicht bei VOIP allerdings nicht aus. Während bei NAT in dem Header der TCP/IP-Pakete die IP-Adresse des Senders gegen die des internen Empfängers, und umgekehrt, ausgetauscht wird, geht das bei den SIP-Paketen nicht direkt mittels des herkömmlichen NAT. Anders ausgedrückt die Adressen auf dem Envelope werden ausgetauscht. Denn Asterisk und auf der anderen Seite der PBX-Server des Providers schreiben in den Header des SIP-Protokolls die eigene IP-Adresse rein. Die kann in einem Intranet nie die öffentliche IP-Adresse sein. Hier kann NAT auf der Firewall des Routers so nicht direkt die private gegen die öffentliche IP-Adresse austauschen. Oder anders, die Adresse innerhalb des Envelope lassen sich nicht von NAT austauschen, muss aber geschehen, weil sonst die PBX-Server nicht wissen, von wem die Sprachnachrichten kommen. Das erledigen dann auf dem Router die beiden Kernelmodule „nf_conntrack_sip“ und „nf_nat_sip“, die auf OpenWRT und dem LinkSys-Router entsprechend zu installieren und zu laden sind. Man findet sie in dem Netfilter-Verzeichnis der Kernel-Module. Zum Beispiel wie hier dargestellt:

/lib/modules/5.15.134/nf_conntrack_sip.ko
/lib/modules/5.15.134/nf_nat_sip.ko

Installiert wird das Paket kmod-nf-nathelper-extra mit

opkg install kmod-nf-nathelper-extra

Geladen werden sie über

modprobe -v nf_conntrack_sip nf_nat_sip

Strenggenommen benötigen die Kaufgeräte wie Speedport, Fritzbox etc. das nicht, weil sie mit der externen Schnittstelle und dem eingebauten DSL-Modem irgendwie auch im Internet an der öffentlichen IP Adresse hängen.

Damit wäre der Kommunikationsweg über die Firewall geebnet. Bei der kommenden Konfiguration interessieren uns neben der bereits erwähnten rtp.conf auch noch die drei Dateien pjsip.conf, extension.conf und voicemail.conf unterhalb des Asterisk-Konfigurationsverzeichnisses /etc/asterisk/.