Voice over IP unter Verwendung von OpenSource
Transcription
Voice over IP unter Verwendung von OpenSource
Voice over IP unter Verwendung von OpenSource-Software Maik Schmitt <[email protected]> <sip:[email protected]> Rainer Jochem <[email protected]> <sip:[email protected]> RSI T IS S UN R VE AS SA nach einem Thema von Prof. Dr.-Ing. Philipp Slusallek Naturwissenschaftlich-Technische Fakultät I Fachrichtung 6.2 – Informatik Universität des Saarlandes, Saarbrücken, 2004 I Fortgeschrittenenpraktikum A V EN I Danksagung: Wir danken Prof. Dr. Philipp Slusallek für das Thema dieser Arbeit, Dipl.-Ing. Edgar Scherer für die Unterstützung, Dipl.-Inf. Georg Demme für die Unterstützung und Betreuung, Mark Spencer für Asterisk und die schnelle Hilfe bei Problemen, Jiri Kuthan und GMD Fokus für SER, Siggi Langauf, sowie dem Rechenzentrum der Universität des Saarlandes und der Firma Snom für die freundliche Leihgabe von Testgeräten Inhaltsverzeichnis 1 Einleitung 5 2 Voice over IP 2.1 Funktionsweise . . . . . . . . . . . . . 2.2 Audiocodecs . . . . . . . . . . . . . . 2.3 SIP - Session Initiation Protocol . . . . 2.3.1 Komponenten . . . . . . . . . . 2.3.2 Aufbau der SIP-Nachrichten . . 2.3.3 SIP-Rufablauf . . . . . . . . . 2.4 RTP . . . . . . . . . . . . . . . . . . . 2.5 Weitere Protokolle . . . . . . . . . . . 2.5.1 H.323 . . . . . . . . . . . . . . 2.5.2 IAX2 - Inter Asterisk eXchange 2.6 NAT und Firewalls . . . . . . . . . . . 2.6.1 Situation . . . . . . . . . . . . 2.6.2 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 8 9 10 11 13 13 15 15 16 16 16 17 3 Ziele 3.1 Anbindung des LS Computergraphik . . . . . . . . . . . . . . 3.2 SIP-Server für Studenten und Mitarbeiter . . . . . . . . . . . 3.3 Erweiterung der TK-Anlage um ENUM . . . . . . . . . . . . 19 19 19 20 4 Verwendete Software 4.1 Überblick . . . . . . . . . . . . . 4.1.1 Bayonne . . . . . . . . . 4.1.2 Vocal . . . . . . . . . . . 4.1.3 SIP Express Router (SER) 4.1.4 Asterisk . . . . . . . . . . 4.2 Erfahrungen . . . . . . . . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 21 22 22 23 Lehrstuhl-Server 5.1 Anforderungen . . . . . . . . . . . . . 5.2 Umsetzung . . . . . . . . . . . . . . . 5.3 Allgemeine Konfiguration von Asterisk 5.4 Einrichten der SIP-Teilnehmer . . . . . 5.4.1 Globale Parameter . . . . . . . 5.4.2 Benutzerspezifische Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 28 30 31 32 . . . . . . . . . . . . 1 INHALTSVERZEICHNIS 5.5 5.6 5.7 5.8 6 7 8 9 2 5.4.3 Zugehöriger Rufnummernplan . . . . . . . Anbindung an das ISDN-Festnetz . . . . . . . . . 5.5.1 Installation . . . . . . . . . . . . . . . . . 5.5.2 Rufnummernplan mit Berechtigungsstufen Voicemail . . . . . . . . . . . . . . . . . . . . . . Sonstige Funktionen im Rufnummernplan . . . . . 5.7.1 Konferenzräume . . . . . . . . . . . . . . 5.7.2 Erreichbarkeit der Teilnehmer . . . . . . . 5.7.3 ENUM . . . . . . . . . . . . . . . . . . . Asterisk-Patches . . . . . . . . . . . . . . . . . . 5.8.1 Verschlüsselte SIP-Passwörter . . . . . . . 5.8.2 Erstellen eines Benutzerinterfaces . . . . . Studentenserver 6.1 Anforderungen 6.2 Umsetzung . . 6.3 Konfiguration . 6.3.1 SER . . 6.3.2 Asterisk 6.3.3 DNS . 6.4 Webinterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 35 35 36 41 42 43 43 44 44 44 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 46 46 48 48 50 51 51 ENUM 7.1 public ENUM . . . . . . . . . . . . . . . 7.2 user ENUM . . . . . . . . . . . . . . . . 7.3 Umsetzung mit Asterisk . . . . . . . . . 7.3.1 Konfiguration des E1-Interfaces . 7.3.2 Rufnummernplan . . . . . . . . . 7.4 Erweiterung von TK-Anlagen um ENUM 7.5 user ENUM mit Bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 52 54 55 55 57 61 62 . . . . . . . . . . . 64 64 64 65 66 67 67 67 68 68 69 69 Zusammenfassung 9.1 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . Endgeräte 8.1 Hardphones . . . . . . 8.1.1 Cisco 7960 . . 8.1.2 Cisco 7905 . . 8.1.3 Snom 100 . . . 8.2 Analog-IP - Wandler . 8.2.1 Cisco ATA-186 8.2.2 Digium IAXy . 8.3 Softphones . . . . . . 8.3.1 KPhone . . . . 8.3.2 X-Lite . . . . . 8.4 Headsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INHALTSVERZEICHNIS A Verwendete Konfigurationsdateien A.1 extensions.conf . . . . . . . . . . . . . . . . . . . . . . . . . A.2 sip.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Skript zum Abgleich der sip.conf mit einer MySQL-Datenbank 74 74 80 81 B Glossar 83 C Verantwortliche C.1 Maik Schmitt . . . . . . . . . . . . . . . . . . . . . . . . . . C.2 Rainer Jochem . . . . . . . . . . . . . . . . . . . . . . . . . 86 86 86 3 INHALTSVERZEICHNIS 4 Kapitel 1 Einleitung VoIP steht für ”Voice over Internet Protocol” und bezeichnet das Versenden von Sprachinformation mit Hilfe von IP-Paketen durch Netzwerke. Grob gesagt also telefonieren über Datennetze, wie z.B. unternehmensinterne Netzwerke oder gar das Internet. Mit zunehmender Zahl breitbandiger Internetanschlüsse, die meist auch in Verbindung mit Pauschaltarifen verfügbar sind, gewinnt Voice over IP immer mehr an Popularität. Dies zeigt sich nicht zuletzt auch darin, dass mittlerweile die Regulierungsbehörde für Telekommunikation und Post damit beginnt, Regeln für die Vergabe von Festnetznummern an Internet-Diensteanbieter aufzustellen [1] und große TK-Diensteanbieter ihre Infrastruktur auf Internet-Übertragungstechniken umstellen wollen [2]. Einsatzzwecke für Voice over IP sind vielfältig: Sei es, um jemanden im Ausland zu günstigen Tarifen erreichen zu können, oder um mehrere Standorte eines Unternehmens über kostengünstigere Datennetze, die heutzutage in der Regel ohnehin vorhanden sind, miteinander zu verbinden. Auch bietet VoIP eine bequeme Art von Rufnummernportabilität: denn überall, wo ein Netzwerkzugang mit ausreichender Bandbreite vorhanden ist, kann man VoIP-Telefone z.B. in Form von Software auf einem Laptop oder PDA benutzen. Darüber hinaus sind auch neue Services wie die Integration von Telefoniefunktionen in den PC (CTI, Unified Messaging, ...), Directory Services (Telefonbücher die z.B. auf LDAP basieren und vom Telefon aus abgerufen werden können), usw. denkbar. Ein weiterer Vorteil in der Verwendung von VoIP-Techniken besteht in der Möglichkeit, die existierende Netzwerkinfrastruktur mitzuverwenden. Hierdurch kann auch eine einfachere Ausstattung mit Telefonendgeräten erreicht werden, wobei hier in der Regel noch nicht einmal zusätzliche Netzwerkports notwendig sind, da die meisten Telefone über integrierte Switches verfügen. 5 KAPITEL 1. Einleitung Verwendet man offene, internationale VoIP-Standards, so besteht auch keine Herstellerabhängigkeit und man kann zwischen den verschiedensten Softund Hardphones wählen. Auch ist der administrative Aufwand, um ein eigenes VoIP-System zu betreiben, relativ gering, da die für Netzwerke üblichen Basistechnologien zum Einsatz kommen. Wenn man von VoIP redet, bedeutet dies allerdings noch lange nicht, dass man dann keinerlei Verbindung mehr zur “alten” Telefonwelt hat. Viele VoIPServer bieten Möglichkeiten, mittels entsprechender Schnittstellenkarten Gespräche auch zum Analog- oder ISDN-Netz zu führen. Dabei reichen die Anschlussmöglichkeiten von einfachen Analoganschlüssen bis hin zu mehrfachISDN-Primärmultiplex-Anschlüssen. Verfügt man über ein solches System, das sowohl an das herkömmliche Telefonnetz angeschlossen, als auch VoIP-fähig ist, so kann man mit Diensten wie ENUM eine Art Least-Cost-Routing (LCR) für abgehende Gespräche durchführen: findet der Server einen VoIP-Eintrag für den angewählten Gesprächspartner im ENUM, so kann er den Anruf kostengünstig über VoIP weiterleiten und sonst das herkömmliche Telefonnetz benutzen. Auch kann man mit solchen Systemen eine bestehende ”klassische” TK-Infrastruktur um VoIPFunktionalität erweitern. Da die verwendeten Protokolle von VoIP die gleichen sind, wie sie auch für Video over IP eingesetzt werden, ist es auch leicht möglich mit der gleichen Technik Videokonferenzen durchzuführen. Für die Zukunft sind natürlich noch viele weitere Dienste über reine Telefonieanwendungen hinaus denkbar. Was kann VoIP noch nicht? Verwendet man VoIP-Komponenten (Server, Endgeräte) hinter einer Firewall und/oder NAT, so kann dies mitunter zu Problemen führen. Allerdings gibt es hierfür bereits Lösungen, wie sie im nächsten Kapitel beschrieben werden. Weiterhin benötigt VoIP eine gewisse Mindestbandbreite, die allerdings auch stark von den verwendeten Audiocodecs abhängt. Wichtig sind hier vor allem auch schnelle Verbindungen ohne hohe Latenzen. Auch sind je nach verwendetem Protokoll und Endgerät derzeit noch nicht alle aus dem Festnetz bekannten Dienstmerkmale vorhanden. Wobei diese Merkmale idR. auch nur in speziellen Anwendungsfällen benötigt werden. Ein weiterer Aspekt ist die Sicherheit von VoIP-Verbindungen. Alle internationalen VoIP-Standards haben zwar zu verwendende Verschlüsselungsverfahren spezifiziert, allerdings mangelt es an der Umsetzung durch die Hersteller der entsprechenden Endgeräte. Zum heutigen Zeitpunkt ist uns lediglich ein SIPTelefon bekannt, das eine Verschlüsselung aller Datenströme anbietet. 6 Kapitel 2 Voice over IP Die Idee, Sprachdaten in digitaler Form zu übertragen, ist nicht neu (siehe ISDN): man wandelt die Sprachdaten von analog zu digital, überträgt sie und wandelt sie am Endpunkt wieder von digital nach analog zurück. Genau das macht VoIP - mit dem Unterschied, dass als Transportmedium IPbasierte Netze mit den dafür üblichen Protokollen verwendet werden: In der ”klassischen” Telefonie kommen sogenannte Circuit-switched Networks zum Einsatz, d.h. es wird eine dedizierte Leitung für ein einzelnes Gespräch über die Dauer der Verbindung benötigt. Bei Packet-Switched Networks wie sie in IP-basierten Netzen üblich sind, werden Datenpakete durch das Netz geroutet. Hierbei handelt es sich um eine verbindungslose Kommunikation im Gegensatz zu einem Circuit-Switched Network. Eine “Verbindung” besteht hier nur für die Dauer des Sendens oder Empfangens eines Datenpaketes. Somit kann ein Netz mit mehreren Benutzern geteilt werden. Weiterhin kann die gleiche Leitung zur Übertragung weiterer Daten (Video, Bilder, ...) verwendet werden und es können – bei Wahl eines geeigneten Kompressionscodecs – mehr Telefonate bei gleicher verfügbarer Bandbreite geführt werden. 2.1 Funktionsweise Hier sei der grobe Ablauf sowie die benötigten Komponenten eines VoIPGesprächs skizziert: 1. Die Teilnehmer sind an ihrem jeweiligen VoIP-Server mit einem VoIPEndgerät angemeldet. Unter Verwendung eines Signalisierungsprotokolls 7 KAPITEL 2. Voice over IP initiiert das Endgerät den Anruf und handelt den zu verwendenden Audiocodec aus. 2. Ist die Verbindung aufgebaut, wird der ausgehandelte Codec verwendet, um die Sprachdaten zu komprimieren. (Selbstverständlich ist auch eine geeignete Vorrichtung für die Aufnahme der Sprachdaten notwendig – d.h. am PC z.B. Soundkarte mit Mikrofon und Lautsprecher oder Headset) 3. Die so erzeugten Audiodaten müssen nun in ein echtzeittaugliches IPTransportprotokoll (idR. RTP über UDP) eingebettet und versendet werden. 4. Auf der Empfängerseite geschieht das ganze nun in umgekehrter Reihenfolge: Zerlegen der RTP-Pakete, dekodieren der Sprachdaten und deren Wiedergabe. 2.2 Audiocodecs Es gibt eine Vielzahl von Codecs [3], die im VoIP-Umfeld verwendet werden, um eine möglichst geringe Bandbreite bei gleichzeitig guter Sprachqualität zu erreichen. Codec G.711 G.729 G.723.1 G.726 (ADPCM) GSM iLBC Speex LPC10 Samplerate 8kHz 8kHz 8kHz 8kHz Bandbreite 64kbps 8kbps 5.6kbps - 6.3bps 16, 24, 32, 40kbit/s 8kHz 8kHz 8kHz/16kHz/32kHz 13kbps 15kbps 2.15kbps - 44.2kbps 8kHz 2.4kbps Ursprung ITU-T ITU-T ITU-T ITU-T ersetzt G.723.1 ETSI IETF-draft [4] OpenSource speex.org [5] US. Gov. Tabelle 2.1: Übersicht verbreiteter Audiocodecs Zu den am weitesten verbreiteten Audiocodecs zählen derzeit G.711, GSM und G.729. G.711 bietet die beste Sprachqualität (es handelt sich im übrigen um den gleichen Codec, wie er auch bei ISDN verwendet wird), benötigt allerdings auch viel Bandbreite. Während G.711 vor allem in breitbandigen Netzen Verwendung findet, sind im Internet häufiger GSM (der auch im Mobilfunk verwendet wird) und G.729 anzutreffen. Bis auf LPC10 bieten alle Codecs gute bis sehr gute Sprachqualität. 8 2.3. SIP - Session Initiation Protocol 2.3 SIP - Session Initiation Protocol SIP wurde mit Blick auf das Internet von der IETF entwickelt (RFC 3261 [6]) und orientiert sich an der Architektur gängiger Internet-Anwendungen. Dabei wurde von Beginn an auf leichte Implementierbarkeit, Skalierbarkeit, Erweiterbarkeit und Flexibilität geachtet. Benutzt werden kann es, um beliebige Sessions mit einem oder mehreren Teilnehmern zu eröffnen, zu modifizieren oder zu beenden. Dabei ist es nicht auf Internet-Telefonie beschränkt, sondern Sessions können beliebige Multimediaströme, Konferenzen, Computerspiele, usw. sein. Um jedoch ein Internet-Telefonat zu führen, braucht man mehr als nur SIP. SIP dient lediglich dazu, die Kommunikation zu ermöglichen – die eigentlichen Daten für die Kommunikation müssen über andere, dafür geeignete Protokolle ausgetauscht werden. Hierzu werden das Session Description Protocol (SDP, RFC 2327 [7]) und das Realtime Transport Protocol (RTP, RFC 1889 [8]) eingesetzt. SDP dient dazu, die zwischen den Endpunkten zu verwendenden Codecs, Transportprotokolle, usw. auszuhandeln. Aufgabe von RTP ist es, den Multimedia-Datenstrom (Audio, Video, Text, ...) zu transportieren – d.h. die Daten zu kodieren, zu paketieren und zu versenden. SIP basiert unter anderem auf dem HTTP-Protokoll – es verwendet eine ähnliche Header-Struktur und ist ebenfalls ein textbasiertes Protokoll. Zur Schreibweise der Teilnehmeradressen wird das bereits von e-mail bekannte Format (sip:user@domain) benutzt. Unterstützung findet SIP bereits in vielen Geräten diverser Hersteller und es scheint sich zum Standard-Protokoll zu entwickeln. SIP wurde auch vom 3rd Generation Partnership Project (3GPP, [9]) als Protokoll für Multimediaunterstützung im 3G-Mobilfunk (UMTS) ausgewählt [10]. Zu den Nachteilen von SIP gehört, dass es zur Übertragung der Sprachdaten auf RTP zurückgreift. Die dafür verwendeten UDP-Ports werden dynamisch vergeben, was die Verwendung von SIP in Verbindung mit Firewalls oder Network Address Translation (NAT, RFC 2663 [11]) schwierig macht, da die meisten Firewalls bzw. NAT-Router die dynamisch vergebenen Ports nicht der Signalisierungsverbindung zuordnen können. Weiterhin sind auch viele Dienstmerkmale die aus dem Festnetz bekannt sind nicht im SIP-Protokoll selbst, sondern in Erweiterungen zum SIP-Protokoll definiert, so dass diese nicht von allen Endgeräten unterstützt werden. Im Gegensatz zu H.323 unterstützt SIP ausschließlich Blockwahl. Dies bedeutet, dass die Rufnummer erst in voller Länge gewählt werden muss und erst dann der Anruf gestartet werden kann – im Gegensatz zu der vom herkömmlichen Telefon bekannten Weise, dass man durch Abnehmen des Hörers schon den Anruf startet und dann erst die Rufnummer wählt. 9 KAPITEL 2. Voice over IP 2.3.1 Komponenten User Agent Als User Agent (UA) werden alle SIP-fähigen Endgeräte (d.h. Softwaretelefon am PC, PDAs, SIP-Telefone, aber auch PSTN-Gateways etc.) bezeichnet. Dabei wird meist noch eine (rein logische) Aufteilung in User Agent Client (UAC) und User Agent Server (UAS) vorgenommen, wobei jedoch jeder UA immer aus einem UAC und einem UAS besteht. Erstere dienen dazu, Anfragen zu stellen und Antworten zu verarbeiten, ein UAS empfängt Anfragen und versendet Antwortnachrichten. Proxy Server Diese spielen eine zentrale Rolle in einem SIP-Netzwerk. Ihre Aufgabe ist es, das Routing der SIP-Nachrichten zum Aufbau einer SIP-Verbindung zu übernehmen. Verbindungsgesuche eines Anrufers können über mehrere Proxies bis zum Aufenthaltsort des Angerufenen geleitet werden. Es wird dabei zwischen Stateless und Stateful Proxies unterschieden. Stateless Proxies leiten empfangene Nachrichten einfach weiter. Sie sind deshalb schneller als Stateful Proxies und finden vor allem Verwendung als Loadbalancer und einfache Router. Allerdings sind sie nicht in der Lage, anspruchvolleres Routing wie z.B. Call Forking (mehrere Endgeräte können gleichzeitig angerufen werden) zu betreiben. Stateful Proxies generieren für eine Anfrage einen Zustand (”State”) und behalten diesen, bis die entsprechende Transaktion beendet ist. Dies kann im Fall einer INVITE-Nachricht relativ lang dauern (nämlich so lange, bis der Angerufene den Anruf annimmt oder abweist). Aufgrund der Tatsache, dass Stateful Proxies diese Zustände für die Dauer der Anfrage aufrecht erhalten müssen, sind an diese höhere Leistungsanforderungen gestellt. Dafür sind sie aber auch in der Lage, weitergehende Dienste anzubieten und können auch von einem Endgerät mehrfach versandte Nachrichten abfangen, da sie ja wissen, ob diese bereits empfangen wurde. Registrar Damit ein Proxy weiss, wo der betreffende Benutzer zu finden ist, muss sich sein UA an einem Registrar angemeldet haben. Dieser speichert dann den derzeitigen Aufenthaltsort (d.h. IP-Adresse, Port und Benutzername) in einer sog. ”location database”. Auf diese kann dann der Proxy-Server des Angerufenen 10 2.3. SIP - Session Initiation Protocol zugreifen, um den Aufenthaltsort herauszufinden. Bei einem Registrar handelt es sich allerdings für gewöhnlich nur um eine logische Einheit – wegen der engen Verzahnung von Registrar und Proxy sind diese meist in einem Gerät (Soft- oder Hardware) zusammengefasst. Redirect Server Aufgabe dieses Servers ist es, bei eingehenden Anfragen den gewünschten Empfänger in der location database nachzuschlagen. Die gefundenen Aufenthaltsorte – es ist bei SIP möglich, dass man sich zur gleichen Zeit mit verschiedenen Endgeräten von verschieden Orten aus mit dem gleichen Benutzer anmelden kann – werden dann dem Sender der Anfrage mit einer entsprechenden Nachricht zurückgesandt. 2.3.2 Aufbau der SIP-Nachrichten Jede Nachricht besteht aus einer ersten Zeile, die den Nachrichtentyp angibt, gefolgt vom Rest des Headers und einem Body. Es gibt dabei zwei Nachrichtentypen: Requests und Responses. Requests dienen dazu, etwas zu initiieren oder den Empfänger über irgendetwas zu benachrichtigen. Durch die Responses wird der Empfang eines Requests bestätigt und der Status der Bearbeitung mitgeteilt. SIP-Requests Einen typischen SIP-Request zeigt Abbildung 2.1. Die erste Zeile beinhaltet den Nachrichtentyp – in diesem Fall ein INVITE-Request. Dieser dient dazu, eine Session zu eröffnen. VIA-Felder geben den Weg an, über den die SIPResponses später geroutet werden sollen. From und To dienen dazu, den Sender und Empfänger der Nachricht zu spezifizieren (vgl. e-mail). Über die Call-ID können die zum gleichen Anruf gehörenden Nachrichten identifiziert werden. Die CSeq gibt die Reihenfolge der Requests an. Mittels des Contact-Feldes gibt der Sender an, wo er die Antworten des Empfängers erwartet. Die übrigen Header sind von untergeordneter Bedeutung. 11 HEADER INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 192.168.1.2 CSeq: 799 INVITE To: <sip:[email protected]> Content-Type: application/sdp From: “Bob” <sip:[email protected]>;tag=64ACEA4F Call-ID: [email protected] Subject: Important Call Content-Length: 183 User-Agent: KPhone/3.11 Contact: “Bob” <sip:[email protected];transport=udp> BODY KAPITEL 2. Voice over IP v=0 o=username 0 0 IN IP4 192.168.1.2 s=The Funky Flow c=IN IP4 192.168.1.2 t=0 0 m=audio 32820 RTP/AVP 0 97 3 a=rtpmap:0 PCMU/8000 a=rtpmap:3 GSM/8000 a=rtpmap:97 iLBC/8000 Abbildung 2.1: SIP-Request Header und Body sind durch eine Leerzeile voneinander getrennt. Der Body eines INVITE-Requests enthält u.a. die in SDP kodierte Beschreibung der vom Sender unterstützen Medientypen. In diesem Beispiel beherrscht das Endgerät z.B. die Audiocodecs PCM law, GSM und iLBC. Alle weiteren Requests sind in ähnlicher Form aufgebaut. Zu diesen zählen ACK, BYE, CANCEL und REGISTER. SIP Responses Jeder Request ausser ACK muss mit einer geeigneten Response beantwortet werden. Bis auf die erste Zeile ist der Aufbau der Response dem eines Requests ähnlich. Im Beispiel von Abbildung 2.2 befindet sich in der ersten Zeile die SIPVersion, ein Reply-Code (die ähnlich wie bei HTTP aufgebaut sind, Tabelle 2.2) und einen Erklärungstext. 12 2.4. RTP SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.1.2;branch=z9hG4bK51604 From: <sip:[email protected]>;tag=as668fc20b CSeq: 102 NOTIFY Call-ID: [email protected] To: ”Bob” <sip:[email protected]>;tag=3DA82C86 Content-Length: 0 User-Agent: kphone/4.0 Contact: ”Bob” <sip:[email protected];transport=udp> Abbildung 2.2: SIP-Response Code 1xx 2xx 3xx 4xx 5xx 6xx Bedeutung Provisional. Der Request wurde empfangen und wird nun verarbeitet Success. Die Anfrage wurde erfolgreich empfangen und verarbeitet Redirection. Der Anruf wird an einen anderen Server weitergeleitet Client Error. Es ist ein Fehler auf der Clientseite aufgetreten Server Error. Es ist ein Fehler auf der Serverseite aufgetreten Global Failure. Die Anfrage kann von keinem Server erfüllt werden Tabelle 2.2: SIP Reply Codes 2.3.3 SIP-Rufablauf Im folgenden Beispiel von Abbildung 2.3 sind zwei Benutzer (Alice und Bob) an einem SIP Proxy angemeldet. Wenn Alice Bob anrufen möchte, schickt der UA von Alice eine INVITE-Nachricht an den Proxy, der diese, da er vom Registrar den gegenwärtigen Aufenthaltsort von Bob kennt, an den UA von Bob weiterschickt. Gleichzeitig informiert er Alice über den versuchten Verbindungsaufbau (TRYING) Der UA von Bob schickt als Antwort auf die INVITE-Nachricht über den Proxy ein RINGING zurück. Hebt Bob nun den Hörer ab, wird eine OK-Nachricht versandt, die von Alice mit ACK bestätigt wird. Ab diesem Zeitpunkt läuft die Verbindung direkt zwischen den UAs von Alice und Bob, die einen RTP-Kanal für die Sprachdaten aushandeln und aufbauen und sich die Nachrichten zum Verbindungsabbau auch direkt zusenden. 2.4 RTP Das Internet Protocol (IP) bietet einen ”best effort”-Service, d.h. Ziel ist es, einzelne Datagramme so schnell wie möglich zum Ziel zu befördern. Allerdings gibt es keine Angaben über die gesamte Verzögerung eines Paketes oder 13 KAPITEL 2. Voice over IP Abbildung 2.3: SIP Rufaufbau zu möglichen Paketverlusten. Um unnötigen Overhead durch Transportprotokolle zu vermeiden, wird für Echtzeitanwendungen das UDP-basierte RTP verwendet. Retransmits (bei Paketverlust), Congestion control (Anpassen der Übertragungsrate an die verfügbare Bandbreite) und zu großer Overhead durch Headerinformationen des Transportprotokolles wie bei TCP würden den Echtzeitcharakter empfindlich stören. Zudem ist Paketverlust bei diesen Anwendungen ohnehin relativ unkritisch (1% - 20% sind tolerierbar je nach Codec). Mittels RTP kann sowohl Audio als auch Video transportiert werden. In beiden Fällen dient RTP dabei allerdings nur zur Kapselung des Medienstromes in einzelne Pakete. Deren Header enthalten Informationen über den verwendeten Codec, Sequenznummer, Zeitstempel, Synchronisation und ggf. Verschlüsselung (sRTP). Somit kann der Empfänger die Pakete wieder in der richtigen Reihenfolge zusammensetzen und eventuell aufgetretene Verluste feststellen – allerdings bietet RTP keine Möglichkeit Paketverlust zu verhindern. Dies ist auch nicht möglich, da UDP als Transportprotokoll verwendet wird. Es kann lediglich durch geschickte Paketierung der Mediendaten und Wiedergabemechanismen versucht werden, Paketverluste zu kompensieren. Zudem ist die Verwendung von TCP-Verbindungen für die Übertragung der Medienströme auch nicht sinnvoll, da aufgrund von Retransmits (wie bei TCP üblich) “zu spät” kommende Pakete ohnehin nicht wiedergegeben werden können – denn dies würde bei menschlicher Kommunikation eher verwirrend bis störend wirken. Derartige Nachzügler müssten also ohnehin verworfen werden. 14 2.5. Weitere Protokolle 2.5 Weitere Protokolle Wenn auch das Thema dieser Arbeit auf der Verwendung des Session Initiation Protocols (SIP) beruht, so wollen wir noch einen kurzen Blick auf andere VoIPProtokolle werfen. Dies sind zum einen das weit verbreitete H.323-Protokoll und das zur OpenSource-PBX Asterisk gehörende IAX2-Protokoll. Proprietäre Protokolle wie z.B. SCCP (Skinny Client Control Protocol) von Cisco werden nicht betrachtet, da dies über den Rahmen dieser Arbeit hinausgehen würde und Informationen zu solchen Protokollen z.T. gar nicht öffentlich zugänglich sind. 2.5.1 H.323 H.323 ist das älteste und zur Zeit am weitesten verbreitete Voice over IPProtokoll. Es wurde 1996 von der International Telecommunication Union (ITU) [12] verabschiedet und ist eine Weiterentwicklung des ISDN-Standards Q.931. Dadurch erlaubt es eine relativ einfache Integration von traditionellen Telefonsystemen. Außerdem werden alle aus den traditionellen Telefonsystemen bekannten Features von H.323 unterstützt. Das Ziel bei der Enwticklung von H.323 war, einen Standard für Multimediakommunikation über Local Area Networks (LANs) zu schaffen. In den folgenden Jahren wurde H.323 stetig weiterentwickelt; die ersten Erweiterungen wurden im Januar 1998 als H.323v2 verabschiedet. Im September 1999 wurde dann H.323v3 veröffentlicht, mit weiteren Ergänzungen, die vor allem auf den Einsatz in der IP-Telefonie gerichtet sind. Genau wie SIP baut H.323 auf den gängigen Internet Protokollen (IP, TCP, UDP) auf. Auch bei H.323 werden die Signalisierungsdaten getrennt von den Mediendaten übertragen, so dass hier wie bei SIP die gleichen Probleme im Zusammenhang mit NAT und Firewalls entstehen können. H.323-Adressen können entweder wie eine gewöhnliche Rufnummer, Emailähnlich oder wie eine generelle URI aufgebaut sein. Anders als bei SIP kann eine Adresse nur an einem Endpunkt registriert sein, so dass ein Anruf an diese Adresse genau an einem Endgerät ankommt. Um mehrere Endgeräte gleichzeitig anrufen zu können, wird ein Gatekeeper benötigt, der in der Lage ist, eine einzige Adresse auf mehrere verschiedene abzubilden und diese dann anzuwählen. Wie bereits erwähnt liegt der Ursprung von H.323 bei Multimediakonferenzen. Daher sind eine Vielzahl von Optionen möglich, die nicht alle notwendigerweise für IP-Telefonie benötigt werden. Neben der Komplexität der H.323Protokollfamilie fehlt ihr zudem die Erweiterbarkeit des Signalisierungsprotokolles. 15 KAPITEL 2. Voice over IP 2.5.2 IAX2 - Inter Asterisk eXchange Das IAX(2)-Protokoll wurde ursprünglich von Mark Spencer zusammen mit Asterisk entwickelt (siehe Kapitel 4.1.4). Es handelt sich hierbei derzeit um keinen offiziellen internationalen Standard, sondern um ein Ergebnis der Zusammenarbeit von OpenSource-Entwicklern. Allerdings wird von diesen bereits eine Einreichung des IAX2-Protokolls bei der IETF diskutiert. IAX benutzt lediglich einen einzelnen UDP-Port (5036 für IAX und 4569 für IAX2) und lässt sich somit hervorragend in NAT-Umgebungen einsetzen. IAX2 kann für Voice- und Video-Telefonie, als auch für die Vernetzung mehrerer AsteriskServer genutzt werden. IAX2 unterstützt weiterhin Authentifizierung über PKI (PKI = Public-Key Infrastructure) und Trunking. Das Public-Key-Verfahren von IAX2 ermöglicht die Authentifizierung zwischen verschiedenen Asterisk-Servern mittels RSAbasierter Schlüsselpaare. Durch Trunking werden mehrere Gespräche zwischen den gleichen Endpunkten über eine logische Verbindung geleitet, so dass weniger Bandbreite benötigt wird. Zu den wenigen Nachteilen von IAX2 gehört, dass es wie H.323 ein Binärprotokoll ist und damit ohne Parser schwer lesbar ist. Allerdings unterstützt Ethereal [13] ab Version 0.10.1 das IAX2 Protokoll. Auch ist die Auswahl an möglichen Endgeräten derzeit noch gering – so sind bis jetzt vorrangig Softphones erhältlich (für Windows, Macintosh und Linux). IAX-Telefone (als Hardware) sind allerdings bereits von einigen Herstellern angekündigt. 2.6 NAT und Firewalls 2.6.1 Situation Aufgrund der Trennung von Signalisierungsprotokoll (H.323 / SIP) und Medienstrom (RTP) sowie auch durch den Aufbau der Protokolle selbst ergeben sich verschiedene Probleme im Zusammenhang mit Firewalls und/oder NAT. Bei VoIP-Anrufen sind die Signalisierungsdaten, Medienströme, IP-Adresse und Portnummer im Payload-Teil des IP-Paketes eingebettet und nicht ausschliesslich im Header der Pakete (Abbildung 2.4 und 2.5). NAT arbeitet üblicherweise auf Layer 3 (IP Layer) und modifiziert dort die Quell- und Zieladressen. Da aber bei VoIP-Anwendungen die IP-Adressen bis in den Application-Layer enthalten sind, stellt dies für (die meisten) NAT-Router ein Problem dar: die angegebenen IP-Adressen/Ports sind aufgrund der NAT nicht mehr erreichbar und die Signalisierung und Medienstöme laufen nur in eine einzige Richtung. 16 2.6. NAT und Firewalls INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 192.168.1.2 CSeq: 799 INVITE To: <sip:[email protected]> Content-Type: application/sdp From: “Rainer” <sip:[email protected]>;tag=64ACEA4F Call-ID: [email protected] Subject: sip:[email protected] Content-Length: 183 User-Agent: KPhone/3.11 Contact: <sip:[email protected];transport=udp> Abbildung 2.4: SIP Signalisierung v=0 o=username 0 0 IN IP4 192.168.1.2 s=The Funky Flow c=IN IP4 192.168.1.2 t=0 0 m=audio 32820 RTP/AVP 0 97 3 a=rtpmap:0 PCMU/8000 Abbildung 2.5: SDP Signalisierung Firewalls blocken im Normalfall jedweden Verbindungsversuch ab, der von aussen zum geschützten Netzwerkbereich hin erfolgt. Pakete von ausserhalb werden idR. nur erlaubt, wenn sie entweder einer bestehenden Verbindung zugeordnet werden können, oder es sich um einen bestimmten erlaubten Host/Port handelt. Zudem sind an einem VoIP-Anruf mehrere Protokolle beteiligt: SIP oder H.323 zur Signalisierung, SDP bzw. H.225 und H.245 zur Bestimmung der Fähigkeiten der Endgeräte, RTP/RTCP zur Übertragung und Kontrolle der Medienströme. Während für die Signalisierung noch ein fester Port verwendet wird (z.B. 5060 bei SIP), werden die RTP-Ports dynamisch ausgehandelt, was dazu führt, dass Firewalls derartige Verbindungen idR. blockieren werden. 2.6.2 Lösungen Firewall öffnen: Die einfachste Lösung bei einer Firewall ist es, die entsprechenden Ports in der Firewall dauerhaft zu öffnen: Signalisierungsport (z.B. 5060 bei SIP) und ein fester Portbereich für die RTP-Stöme. 17 KAPITEL 2. Voice over IP Die meisten Endgeräte sind in der Lage, einen durch den Benutzer definierten Portbereich für die Medienströme zu verwenden. Diese Möglichkeit bietet sich v.a. dann an, wenn sich die VoIP-Endgeräte in einem eigenen Netzbereich befinden. “Fixup-Protokoll”: Eine elegantere Lösung bietet der Einsatz von Firewalls/ NAT-Routern, die die gängigen VoIP-Protokolle kennen. Einige Hersteller bieten ein sog. ”Fixup-Protocol” in ihren Geräten an, mit dem die Firewall oder der Router in der Lage ist, die in den Datenpaketen angegebenen IP-Adressen und Ports bis in Layer 7 zu korrigieren. Somit sind VoIP-Gespräche auch durch Firewalls und NAT möglich. Allerdings versagt auch diese Technik, wenn verschlüsselte Datenströme (z.B. über IPSec oder SSL/TLS) verwendet werden. UPnP: Als weitere Lösungsmöglichkeit bietet sich UPnP (Universal Plug and Play) an. Dabei fragt das Endgerät am NAT-Router nach dem zu verwendenden Mapping von privater und öffentlicher IP-Adresse und Port und verwendet dann dies als Absenderadresse in den entsprechenden Protokollen. Auch bietet z.B. Windows XP die Möglichkeit, dass ein Endgerät die Internetverbindungsfirewall mittels UPnP so umkonfigurieren kann, dass die entsprechenden Pakete die Anwendung erreichen. Das Problem hierbei ist, dass dies nicht bei kaskadierten NATs funktioniert, die wenigsten NAT-Implementierungen UPnP-tauglich sind und Änderungen von Firewallregeln durch Anwendungen ein Sicherheitsrisiko bergen. STUN: (Simple Traversal of UDP Through NATs, RFC3489 [14]) ist eine Möglichkeit mit der Endgeräte, die sich hinter einem NAT-Router befinden, Informationen über die Netzwerkkonfiguration erlangen können. Hierbei sendet das Endgerät eine Nachricht an einen ausserhalb des NATs befindlichen STUN-Server. Dieser antwortet dann mit der Kombination aus IP-Adresse und Port, mit der das Paket abgesendet wurde. Verwendet ein Endgerät z.B. die lokale Adresse 192.168.1.3:12345, so schickt es mit dieser Adresse eine Anfrage an den STUN-Server ausserhalb des NATs. Dieser empfängt das Paket mit der Absendeadresse 134.96.249.10:8899 und antwortet an diese Adresse mit einem Paket, dass diese IP:Port-Kombination enthält. Somit kann das hinter dem NAT befindliche Endgerät dann für alle folgenden Verbindungen diese Adresse in den SIP/SDP-Paketen verwenden, während es selbst weiterhin auf 192.168.1.3:12345 hört. Somit kann das Endgerät herausfinden, ob es Netzwerkzugang hat, ob eine Firewall UDP blockt und ob NAT zum Einsatz kommt. Eine weitere Möglichkeit wäre natürlich noch, das VoIP-Protokoll selbst zu ändern oder zu erweitern, dass derartige Probleme gar nicht erst auftreten (wie es z.B. bei IAX der Fall ist). 18 Kapitel 3 Ziele Im Rahmen dieses Projektes soll in Zusammenarbeit mit dem Rechenzentrum der Universität des Saarlandes eine SIP-basierte VoIP-Lösung geschaffen werden, die Studenten und Mitarbeiter gleichermaßen nutzen können. Die Aufgaben gliedern sich im Wesentlichen in die folgenden drei Bereiche: 3.1 Anbindung des Lehrstuhls für Computergraphik an die bestehende VoIP-Infrastruktur Im Rahmen dieses Teilprojektes soll der Lehrstuhl für Computergraphik mit IP-Telefonen ausgestattet werden und ein lehrstuhleigener VoIP-Server installiert werden. Dieser Server soll die benötigten Dienste wie Voicemail, Konferenzräume, Rufweiterleitung, Fax, ENUM, usw. bereitstellen. Die Anbindung zum Festnetz erfolgt hierbei per IP über den Asterisk-Server im Rechenzentrum und von dort über eine S2M-Leitung zur TK-Anlage. Als Failover / Testkarte dient eine ISDN-Karte im lokalen Server, die direkt mit der TK-Anlage verbunden ist. 3.2 SIP-Server für Studenten und Mitarbeiter Ziel dieses Teilprojektes ist es, jedem Studenten und Mitarbeiter eine gültige SIP-Adresse zuzuweisen. Dabei soll eine möglichst weite Integration in die bestehende Struktur gewährleistet sein. So sollen z.B. die bestehenden EmailAdressen auch gleichzeitig als SIP-Adressen verwendet werden können. Den Studenten und Mitarbeitern soll es zusätzlich zur Erreichbarkeit über VoIP ermöglicht werden, mit ihrer SIP-Adresse auch alle internen Telefonanschlüs- 19 KAPITEL 3. Ziele se der Universität des Saarlandes und Anschlüsse anderer Universitäten, die bereits über das Netzwerk des Deutschen Forschungsnetzes (DFN) erreichbar sind, kostenlos anzurufen. Außerdem sollen die SIP-Teilnehmer auch aus dem Festnetz erreichbar sein. Weiterhin soll jeder SIP-Adresse auch eine Voicemailbox zugeordnet werden, die die aufgenommen Nachrichten an die zur SIP-Adresse gehörende Email-Adresse weiterleitet. 3.3 Erweiterung der bestehenden TK-Anlage um ENUM-Funktionalität Um den Vorteil der Kostenersparnis durch den Einsatz von Voice over IP für alle Anwender nutzen zu können (z.B. um Anschlüsse an anderen Universitäten zu erreichen), ohne dabei die bisherige TK-Infrastruktur ersetzen zu müssen, werden abgehende Gespräche über einen Server geroutet, der durch Prüfung von ENUM-Einträgen versucht, diese kostengünstig über VoIP an den gewünschten Gesprächspartner weiterzuleiten. Auch sind für alle Nebenstellen der Universität des Saarlandes ENUM-Einträge vorhanden, so dass alle Nebenstellen auch über VoIP erreichbar sind. Daher besteht die weitere Aufgabe des Systems darin, eingehende VoIP-Gespräche an die betreffenden Nebenstellen weiterzuleiten. 20 Kapitel 4 Verwendete Software 4.1 Überblick Derzeit gibt es vier größere OpenSource-Projekte im VoIP-Umfeld: Bayonne, Vocal, SER und Asterisk. 4.1.1 Bayonne Bayonne [15] ist eine in C++ geschriebene Interactive Voice Response (IVR) Plattform und unter der GPL erhältlich. Zur Verbindung ins Festnetz unterstützt Bayonne dabei Voicetronix- und Dialogic-Hardware, sowie CAPI-fähige Hardware. Allerdings wurde Bayonne ursprünglich als reine IVR-Lösung geschrieben und später um Telefonanlagenfunktionalität erweitert. Die vorhandenen Anwendungen sind allerdings nicht sehr umfangreich und Bayonne bietet auch keine gute Möglichkeit, eigene Skripte oder Anwendungen einzubinden, wie es beispielsweise bei Asterisk der Fall ist. Auch ist die Konfiguration der Hardware und Treiber umständlich. Zudem wird als VoIP-Protokoll zur Zeit ausschließlich H.323 unterstützt. Da Bayonne schon aus diesen Gründen für unsere Zwecke nicht geeignet ist, wurde auf eine weitere Betrachtung verzichtet. 4.1.2 Vocal Vocal [16] ist ein unter einer BSD-ähnlichen, Vocal-Lizenz frei erhältlicher VoIP-Server, der sowohl SIP als auch H.323 beherrscht. Eine Anbindung zum Festnetz ist nur über zusätzliche Soft- oder Hardware möglich. Vocal zeich- 21 KAPITEL 4. Verwendete Software net sich vor allem über einen sehr umfassenden und redundanten Aufbau aus, der es erlaubt verschiedene Dienste auf separate Rechner zu verteilen. Allerdings lässt sich Vocal nur sehr kompliziert installieren, was unter anderem daran liegt, dass es Bibliotheken benötigt, die ebenfalls recht umständlich zu installieren sind. Weiterhin kann Vocal nur mittels einer (etwas trägen) und unübersichtlichen JAVA-GUI konfiguriert werden und bietet keinen Zugriff auf etwaige Textkonfigurationsdateien mit denen z.B. eine automatisierbare Konfiguration möglich wäre. 4.1.3 SIP Express Router (SER) SER ist ein OpenSource SIP-Server (GPL), der als Registrar-, Proxy- oder Redirectserver betrieben werden kann. Gegenwärtig wird SER von iptel.org [17] in Berlin entwickelt, einer Arbeitsgruppe der FhG FOKUS [18]. Zu den Vorteilen von SER gehört, dass es sich sehr einfach installieren lässt und auch bei geringen Systemanforderungen sehr gut skalierbar und leistungsfähig ist. Weiterhin verfügt SER über die Möglichkeit, Benutzer nicht nur über eine eigene SQL-Datenbank, sondern auch mittels RADIUS zu authentifizieren. Neben der Authentifizierung gibt es auch ein Abrechnungsmodul für RADIUS. Die Konfiguration erfolgt über Textdateien, die eine C-ähnliche Syntax verwenden. SER wird derzeit relativ aktiv entwickelt und findet auch bereits bei vielen VoIP-Diensteanbietern wie z.B. Free World Dialup [19] Verwendung. Allerdings ist SER lediglich ein reiner SIP-Server, d.h. eine Anbindung zu anderen VoIP-Protokollen oder zum Festnetz muss über zusätzliche Soft- oder Hardware erfolgen. Mittlerweile wird an einer Nachfolgeversion “Application Agent (AA)” [20] von SER gearbeitet, die allerdings nicht mehr unter der GPL steht. 4.1.4 Asterisk Asterisk [21] ist eine OpenSource-PBX (GPL). Maßgeblich an der Entwicklung von Asterisk beteiligt ist Digium [22], ein mittelständisches, US-amerikanisches Unternehmen, das zusätzlich auch kommerziellen Support und kommerzielle Lösungen für Asterisk anbietet und Telefonhardware zur Verwendung mit Asterisk herstellt. Zudem gibt es auch eine äußerst aktive und große weltweite Entwicklergemeinde, die an und mit Asterisk arbeitet. Die zentrale Verwaltung (Releases, CVS, Bugtracker, Mailinglisten, usw.) geschieht hierbei durch Mark Spencer/Digium. 22 4.2. Erfahrungen Asterisk bietet eine Vielzahl an Funktionen und Erweiterungsmöglichkeiten. Neben der Unterstützung zahlreicher Voice over IP-Protokolle (SIP, H.323, IAX, MGCP, Skinny) bietet Asterisk auch die Möglichkeit der Festnetzanbindung. Hierbei können prinzipiell alle Analog- als auch ISDN-Karten verwendet werden, die unter Linux Unterstützung finden. Digium selbst bietet auch eigene Hardware (E1-Karten, uvm.) zur Verwendung mit Asterisk an. Darüber hinaus verfügt Asterisk über viele weitere in der Telefonie übliche Funktionen wie CTI, IVR, ACD und DISA, sowie ENUM und eine Schnittstelle zum Einbinden eigener Skripte/Programme (AGI). Durch die recht grosse Zahl an Benutzern und Entwicklern findet desweiteren eine stetige Weiter- und Neuentwicklung verschiedenster Features statt: Datenbanksupport, GUIs zur Konfiguration, Faxempfang- und Versand, uvm. Weitere Vorteile von Asterisk sind u.a. dass es übersichtliche, textbasierte Konfigurationsdateien verwendet, Schnittstellen zum Einbinden eigener Skripte bietet und einen leicht erweiterbaren modularen Aufbau besitzt. Natürlich hat auch Asterisk noch einige Schwächen: So sind die Implementierungen der einzelnen VoIP-Module (z.B. SIP) nicht vollständig im Vergleich zum RFC (wobei die wichtigsten Funktionen durchaus bereits implementiert sind) und eine native Datenbankunterstützung und grafische Benutzeroberflächen befinden sich erst in der Entwicklung. Eine Einführung zu Asterisk kann bei O’Reilly [23] nachgelesen werden. Auch ist eine Aufzeichnung des Vortrags von Mark Spencer zu Asterisk, der anlässlich des 10. Linuxkongress 2003 in Saarbrücken stattfand, auf den Seiten des VCORE-Projektes [24] verfügbar. 4.2 Erfahrungen Um eine geeignete Software zu finden, wurden verschiedene Kombinationen getestet. Da das SIP-Protokoll verwendet werden sollte, haben wir zunächst einen SER-Server aufgesetzt. Dabei erwies sich SER als recht gut zu administrierende Software, so dass es schnell möglich war, SIP-Telefonate zu führen. Da SER allerdings über keinerlei Möglichkeiten verfügt, eine Verbindung zum ISDN herzustellen, war weitere Software erforderlich. Hier gab es nun mehrere Möglichkeiten: Es existiert ein isdn2h323-Gateway [25], mit dessen Hilfe Verbindungen zwischen ISDN und einem H.323-Gatekeeper möglich sind. Weiterhin verfügt Vocal über ein sip-h323-Gateway, das auch getrennt von Vocal betrieben werden kann. 23 KAPITEL 4. Verwendete Software Aus diesem Grund wurden zunächst die Kombinationen aus SER + sip2h323 + isdn2h323 Vocal + isdn2h323 einer näheren Betrachtung unterzogen. Keine dieser Varianten hat sich jedoch als praxistauglich herausgestellt - einerseits weil es schlichtweg nicht oder nur sehr umständlich und nicht mit dem vollen, benötigten Funktionsumfang funktioniert. Auch hätte es teilweise eine Kombination vieler unterschiedlicher Programme bedeutet. Deshalb wurde auf einem weiteren Rechner ein Asterisk-Testsystem installiert. Zunächst verwendeten wir eine ISDN-Karte mit den ISDN4Linux-Treibern, was auch sehr schnell den gewünschten Erfolg brachte. Um allerdings eine bessere Sprachqualität zu erreichen, benutzten wir im folgenden jedoch die CAPI-Treiber. Da sich auch eine Anbindung von SER an Asterisk reibungslos gestaltete, wurden für die Umsetzung der Projekte (Studentenserver, Lehrstuhlserver, ENUMLookup) somit SER und Asterisk verwendet. 24 Kapitel 5 Lehrstuhl-Server 5.1 Anforderungen Zu den Funktionen und Möglichkeiten, die ein VoIP-System bietet, sollen für den Lehrstuhl auch weiterhin alle benötigten Merkmale der bekannten Telefonwelt zur Verfügung stehen und eine Anbindung zum bestehenden Telefonnetz über ISDN erfolgen: Berechtigungsstufen für abgehende Gespräche Jedem Telefonanschluss an der Universität ist eine bestimmte Berechtigungsstufe zugeordnet, d.h. je nach Anschluss können z.B. nur Teilnehmer aus Saarbrücken oder dem Saarland erreicht werden. Diese Rufnummernbeschränkungen sollen auch für ins Festnetz abgehende Gespräche der VoIP-Teilnehmer übernommen werden. Voicemailbox für jeden Teilnehmer Jeder VoIP-Teilnehmer soll eine eigene Voicemailbox (“Anrufbeantworter”) erhalten. Konferenzräume Das System soll auch Telefonkonferenzen mit mehreren Teilnehmern, d.h. mehr als die vom ISDN her bekannte Dreierkonferenz, bieten. Fax Weiterhin soll das System Faxempfang und -versand ermöglichen. Idealerweise sogar mit direkter Weiterleitung des empfangenen Faxes an den betreffenden Teilnehmer per Email. Erreichbarkeit von Teilnehmern anderer Protokollwelten (H.323) Da derzeit zwei große internationale VoIP-Standards existieren, soll auch eine Kommunikation mit Nutzern dieser Technik ermöglicht werden. ENUM Bei abgehenden Gesprächen ins Festnetz soll durch Prüfung von ENUMEinträgen ein kostengünstigeres Vermitteln der Gespräche über VoIP versucht werden. 25 KAPITEL 5. Lehrstuhl-Server Erweiterbarkeit Das verwendete System sollte so aufgebaut sein, dass es leicht um weitere Funktionen oder Protokolle ergänzt werden kann. Einfache und flexible Administration Selbstverständlich soll der VoIP-Server auch leicht zu installieren und gut zu warten sein. 5.2 Umsetzung Die einzige Software, die die benötigten Anforderungen erfüllt, ist Asterisk. Um sich mit Asterisk vertraut zu machen, haben wir zuerst ein Testsystem zusammengestellt: Hierzu dient ein PentiumII 350MHz, 384MB RAM, 40GB Festplatte, Kernel 2.4.21 und Debian Linux. Da mit diesem Rechner auch eine Verbindung ins Festnetz hergestellt werden soll, ist desweiteren eine PCIISDN-Karte vom Typ Fritz!Card PCI eingebaut. Abbildung 5.1: Ursprüngliche Installation 26 5.2. Umsetzung Abbildung 5.1 zeigt die ursprünglich vorhandene Infrastruktur mit den an der TK-Anlage angeschlossenen ISDN-Telefonen sowie die vorhandene Netzwerkinfrastruktur. Ausgehend von diesem Aufbau wurden alle nachfolgend beschriebenen Installationen durchgeführt. Zunächst geschah die Anbindung des Asteriskservers zum ISDN unter Verwendung von ISDN4Linux (I4L). Allerdings hat sich dies aufgrund der auftretenden Echos in den Gesprächen als weniger brauchbar herausgestellt. Auch gibt es bei I4L einen Kernel-Bug der zur Fehlerkennung von DTMF-Tönen führt, die sich ebenfalls störend im Gespräch bemerkbar machen. Daher wurde beschlossen, Linux mit CAPI-Unterstützung und den CAPI-Treibern des Kartenherstellers (AVM) [26] zu verwenden. Dies hat erwartungsgemäß die mit I4L auftretenden Fehler behoben und sich auch als stabile Lösung erwiesen. Nach der Anbindung ans Festnetz wurden auf dem Server Testbenutzer für SIP eingerichtet, mit denen Anrufe von und zur TK-Anlage der Universität geführt werden konnten. Da sich dies als funktionstüchtig erwiesen hat, wurde dem Lehrstuhl durch das Rechenzentrum ein vorläufiger Rufnummernblock von 20 Rufnummern für weitere Tests zur Verfügung gestellt. Diese Rufnummern sind von allen Nebenstellenanschlüssen der TK-Anlage erreichbar und werden von dieser über eine E1-Leitung zum Rechenzentrum geleitet, wo die Anrufe durch einen Cisco-Router aus dem ISDN-Netz in das VoIP-Netz ausgekoppelt wurden. Dieser Router leitete die Gespräche mittels SIP an den Asterisk-Server des Lehrstuhls weiter. Auch war es in umgekehrter Richtung möglich, vom Asterisk-Server unter Verwendung von SIP Anrufe über den Cisco-Router ins ISDN-Netz zu leiten. Mittlerweile geschieht die Auskopplung der ISDN-Anrufe in das VoIP-Netz über einen im Rechenzentrum installierten Asterisk-Server (siehe Kapitel 7), der die Gespräche ebenfalls direkt per VoIP mittels IAX2 zum Lehrstuhl weiterleitet. Die oben erwähnten Rufnummern wurden im weiteren Verlauf den Mitarbeitern des Lehrstuhls für weitere Testzwecke zur Verfügung gestellt: jeder ISDN-Rufnummer wurde eine SIP-Rufnummer mit einer entsprechenden Berechtigungsstufe zugewiesen. Auf diese Weise ist es nun möglich, jede dieser Rufnummern sowohl über IP (SIP) als auch über ISDN – durch die TK-Anlage der Universität über das Rechenzentrum zum Lehrstuhl – anzurufen. Weiterhin können die am Asterisk-Server angemeldeten SIP-Benutzer andere Teilnehmer entweder per VoIP als auch über ISDN erreichen. In letzterem Fall wird der abgehende Anruf über die ISDN-Karte im Asterisk-Server des Lehrstuhls zur TK-Anlage der Universität geleitet, um eventuell entstehende Kosten eindeutig dem Lehrstuhl Computergraphik zuordnen zu können (siehe Abb. 5.2). Im weiteren Verlauf wurden dann die VoIP-Verbindungen des Servers erweitert: So verfügen die Universität Stuttgart und die Universität Ulm ebenfalls über Asterisk-Server, zu denen eine Verbindung unter Verwendung des IAX2- 27 KAPITEL 5. Lehrstuhl-Server Abbildung 5.2: Testaufbau Protokolls hergestellt wurde. Durch entsprechende Einträge im Rufnummernplan des lokalen Asterisk-Servers ist es somit möglich, abgehende Gespräche der hier am Lehrstuhl angemeldeten Teilnehmer zu diesen beiden Universitäten kostengünstig über VoIP zu leiten. Zudem wurden für abgehende Gespräche ENUM-Anfragen aktiviert (siehe Kapitel 7). Für Asterisk ist auch ein Software-Fax-Plugin erhältlich [27]. Allerdings befindet sich dieses Modul noch in der Entwicklung und bereitet noch mit einigen “echten” Faxgeräten Probleme, so dass ein Einsatz in produktiver Umgebung derzeit noch nicht sinnvoll erscheint. 5.3 Allgemeine Konfiguration von Asterisk Im folgenden wollen wir die genaue Konfiguration der umgesetzten Funktionen betrachten. Zunächst jedoch ein kurzer Überblick der allgemeinen Kon- 28 5.3. Allgemeine Konfiguration von Asterisk figuration. Die Konfiguration von Asterisk geschieht mit Hilfe von Textdateien, die sich bei einer Standardinstallation in /etc/asterisk befinden. Die Konfigurationsdateien von Asterisk sind der Datei win.ini von Windows sehr ähnlich. ; ; Beispiel-Konfigurationsdatei ; [abschnitt1] Variable = Wert [abschnitt2] Variable = Wert Objekt => Wert Abbildung 5.3: Format der Konfigurationsdatei Sie sind in Abschnitte unterteilt, die jeweils mit einem in eckigen Klammern eingeschlossenen Namen beginnen. Der Name dient zur späteren Referenzierung des Inhaltes dieses Abschnittes. Die erste Zeile in einer Datei (die keine Leer- oder Kommentarzeile ist) muss einen Abschnitt einleiten. In den einzelnen Abschnitten stehen Zeilen mit Paaren aus Schlüsselwort und Wert, die durch = oder => getrennt werden. Beide Schreibweisen haben die gleiche Bedeutung. Es ist lediglich eine verbreitete Gewohnheit einfache Variablenzuweisungen in den Konfigurationsdateien mit = und die Logik des Rufnummernplanes mit => zu kennzeichnen. Kommentare werden mit ; eingeleitet und erstrecken sich bis zum Ende der jeweiligen Zeile. Obwohl das Format bei allen Konfigurationsdateien gleich ist, gibt es drei verschiedene Grammatiken, die typischerweise verwendet werden. Simple Groups: Hier werden Objekte mit allen Argumenten in einer einzigen Zeile definiert. Dieses Format ist sinnvoll bei Objekten, die nur wenige Optionen haben. [mysection] object1 => option1a,option1b,option1c object2 => option2a,option2b Abbildung 5.4: Simple Groups Dieses Format wird z.B. in den Dateien extensions.conf, meetme.conf und voicemail.conf verwendet. 29 KAPITEL 5. Lehrstuhl-Server Inherited Option Object: Dieses Format ist sinnvoll bei Objekten, die viele Optionen haben, welche bei den meisten Objekten gleich sind. Hier werden die Optionen vor dem Objekt definiert und sind, sofern sie nicht geändert werden, auch für alle folgenden Objekte gültig. [mysection] option1 = foo option2 = bar object => 1 option2 = baz object => 2 Abbildung 5.5: Inherited Option Object Dieses Format wird u.a. in den Dateien capi.conf und zapata.conf verwendet. Complex Entity Object: Diese Grammatik ist sinnvoll bei Objekten, die viele Optionen haben, von denen nur wenige für alle Objekte gleich sind. Hier wird jedem Objekt ein eigener Abschnitt zugeteilt. Oft gibt es bei diesen Dateien auch einen Abschnitt mit dem festen Namen general, in dem globale Parameter definiert werden. [general] globaloption1 = globalvalue1 globaloption2 = globalvalue2 [object1] option1 = value1 Abbildung 5.6: Complex Entity Object Dieses Format wird vor allem in den Konfigurationsdateien der VoIP Channel-driver verwendet. 5.4 Einrichten der SIP-Teilnehmer Zunächst einmal wollen wir die einzelnen SIP-Teilnehmer im System einrichten und den Server soweit konfigurieren, dass VoIP-Gespräche mittels SIP möglich sind. 30 5.4. Einrichten der SIP-Teilnehmer 5.4.1 Globale Parameter Am Beginn der Datei sip.conf werden die allgemeinen Parameter für den SIP Channel-Treiber im Abschnitt [general] eingestellt. Dies dient zum einen dazu Parameter, die für alle Teilnehmer gleich sind zu definieren, als auch Default-Werte für eingehende Gespräche aus dem Internet zu setzen. [general] port = 5060 bindaddr = 0.0.0.0 context = default maxexpirey = 3600 defaultexpirey = 120 disallow = all allow = alaw allow = ulaw allow = gsm srvlookup = yes dtmfmode = inband Abbildung 5.7: Globale Parameter in sip.conf Abbildung 5.7 zeigt einen typischen Aufbau für diesen Abschnitt. Die Variablen port und bindaddr bestimmen den Port und das Netzwerkinterface auf dem SIP-Anfragen entgegengenommen werden sollen. Der Wert 0.0.0.0 steht hierbei für alle im Server vorhandenen Netzwerkinterfaces. Mit context wird ein sog. Kontext – dies ist ein Abschnitt des Rufnummernplanes, der die entsprechenden Berechtigungen für diesen Teilnehmer regelt – festgelegt. Der hier angegebene Kontext wird für alle Teilnehmer verwendet, denen kein eigener Kontext zugewiesen wurde. Dies sind z.B. auch alle von außerhalb eingehenden SIP-Telefonate. maxexpiry und defaultexpiry regeln die maximale bzw. standardmäßige Dauer einer Registrierung der SIP-Teilnehmer. Nach Ablauf dieser Dauer muss sich der Teilnehmer erneut am Server anmelden. Mit den Variablen disallow und allow werden die vom Server erlaubten Audiocodecs angegeben. In diesem Fall also G.711 alaw vor G.711 ulaw und dies vor GSM. Üblicherweise verbietet man an dieser Stelle zunächst alle vorhandenen Codecs, um dann explizit die gewünschten Codecs freizugeben. Um Verständigungsprobleme wegen Codecs mit schlechter Sprachqualität zu vermeiden, sollte man nur bestimmte Codecs zulassen. Die Variable srvlookup weist Asterisk an, bei abgehenden Gesprächen nach SRV-Records (Service Records) zu suchen. Diese sind Teil des DNS und dienen dazu, zusätzliche Informationen über verfügbare Dienste zu geben. Siehe hierzu auch Kapitel 6.3.3. dtmfmode gibt an, ob das Endgerät des Teilnehmers DTMF-Töne als Ton im Medienstrom (inband), in speziellen RTP-Paketen 31 KAPITEL 5. Lehrstuhl-Server (rfc2833) oder als SIP INFO-Nachrichten (info) versendet. 5.4.2 Benutzerspezifische Parameter Nachdem nun die allgemeinen Parameter für eingehende und abgehende SIPGespräche gesetzt sind, wollen wir nun Benutzer anlegen. Diese werden in allen anderen Abschnitten der Datei angelegt, wobei der Name des Abschnitts gleichzeitig der Name der Benutzerkennung ist. Bei jeder Kennung können die globalen Variablen context, disallow, allow und dtmfmode mit lokalen Werten überschrieben werden. Die lokalen Werte sind nur für den jeweiligen Benutzer gültig. Ein Beispiel für einen Benutzer könnte wie folgt aussehen: [1234] type = friend username = 1234 secret = xxxx host = dynamic defaultip = 192.168.12.34 dtmfmode = rfc2833 mailbox = 1234 callgroup = 1 pickupgroup = 1 qualify = 200 canreinvite = no context = default accountcode = 1234 amaflags = documentation Abbildung 5.8: SIP-Benutzer Von allen möglichen Parametern sind nur die ersten vier zwingend notwendig, um einen gültigen Benutzer anzulegen. Die übrigen Werte sind optional und können bei Bedarf gesetzt werden. type Gibt an, ob der Benutzer nur angerufen werden kann (user), nur abgehende Gespräche führen kann (peer) oder in beide Richtungen telefonieren kann (friend). username Benutzername des Teilnehmers. Um Probleme mit diversen Clients zu vermeiden, sollte dieser Wert immer dem Namen der Kennung entsprechen. 32 5.4. Einrichten der SIP-Teilnehmer secret Klartext-Passwort des Teilnehmers. Alternativ kann das Passwort verschlüsselt in der Variable md5secret abgelegt werden. host IP-Adresse des Teilnehmers oder dynamic md5secret Verschlüsseltes Passwort des Teilnehmers (s. auch Kapitel 5.8.1). defaultip Falls das Endgerät des Teilnehmers nicht angemeldet ist, wird versucht, ankommende Anrufe an diese IP-Adresse zu verbinden. dtmfmode Gibt an, ob das Endgerät des Teilnehmers DTMF-Töne als Ton im Medienstrom (inband), in speziellen RTP-Paketen (rfc2833) oder als SIP INFO-Nachrichten (info) versendet. mailbox Die Voicemailboxnummer des Teilnehmers. Diese Nummer wird benötigt, um dem Endgerät des Teilnehmers signalisieren zu können, dass neue Nachrichten in der Voicemailbox vorhanden sind. callgroup Ordnet dem Teilnehmer eine oder mehrere callgroups zu. Anrufe zu Teilnehmern, die der callgroup x angehören, können von Teilnehmern, die sich in der pickupgroup x befinden mit der PickUp-Funktion angenommen werden. pickupgroup Ordnet dem Teilnehmer eine oder mehrere pickupgroups zu. qualify Hier kann die maximal zulässige Latenzzeit in Millisekunden eingestellt werden. Wird diese Zeit überschritten, so wird ein Verbindungsaufbau abgelehnt. Sinnvolle Werte liegen zwischen 200 und 300. Größere Latenzen werden i.d.R. als störend empfunden. canreinvite Gibt an, ob das Endgerät des Teilnehmers REINVITE-Nachrichten korrekt bearbeiten kann. Falls hier no gesetzt wird, so werden alle Medienströme des Teilnehmers über den Server geleitet. Falls yes gesetzt wird, wird versucht, die Medienströme direkt zwischen den Clients zu übertragen. accountcode Gibt das Konto an, dem abgehende Anrufe des Teilnehmers zugeordnet werden. amaflags Gibt an, wie die Gesprächsdaten für Gespräche zum Teilnehmer in den Abrechnungsdatensätzen markiert werden bzw. ob diese überhaupt erstellt werden. Relevante Werte sind: billing — Datensätze als abrechnungsrelevant markieren documentation — Datensätze als nicht abrechnungsrelevant markieren nat Gibt an, ob sich der Teilnehmer evtl. in einem privaten Subnetz befindet. fromuser Dieser String wird bei Anrufen zu diesem Teilnehmer anstatt der CallerID als Absenderadresse verwendet. 33 KAPITEL 5. Lehrstuhl-Server callerid CallerID des Teilnehmers. restrictid Gibt an, ob die CallerID des Teilnehmers bei abgehenden Gesprächen übermittelt werden soll. language Gibt die Sprache an, die bei von diesem Teilnehmer ausgehenden Gesprächen für Ansagen bevorzugt verwendet werden soll. Dieser Wert wird außerdem dazu verwendet spezielle Signaltöne im für das angegebene Land typischen Format wiederzugeben. incominglimit Dieser Wert gibt an, wieviele ankommende Gespräche der Teilnehmer maximal gleichzeitig erhalten darf. outgoinglimit Dieser Wert gibt an, wieviele abgehende Gespräche der Teilnehmer maximal gleichzeitig führen darf. 5.4.3 Zugehöriger Rufnummernplan Damit die jetzt eingerichteten Teilnehmer auch Anrufe tätigen können und vor allem auch angerufen werden können ist noch ein entsprechender Rufnummernplan notwendig. Dieser wird in der Datei extensions.conf definiert. Der Rufnummernplan (auch Dialplan genannt) stellt die zentrale Stelle von Asterisk dar, da hier die einzelnen Teilkomponenten wie VoIP-Teilnehmer, Voicemail, Festnetzanbindung usw. miteinander verknüpft werden und das komplette Verhalten der Telefonanlage für ein- und ausgehende Gespräche definiert wird. Die Abschnitte der Datei extensions.conf werden als Kontexte bezeichnet, die jeweils Definitionen von Variablen und Rufnummern (sog. extensions) enthalten können. Außerdem kann der Inhalt eines Kontextes mit der includeAnweisung in einen anderen eingebunden werden. Jeder Teilnehmer kann nur die extensions in den Kontexten anrufen, die ihm mittels context zugeordnet sind. Damit kann man z.B. unterschiedliche Berechtigungsstufen für abgehende Gespräche einrichten. Nehmen wir an, dass wir neben dem Teilnehmer 1234 auch einen Teilnehmer 2345 angelegt haben und beiden der Kontext “default” zugeordnet wurde. Dies ist auch der Kontext, wie wir ihn im Abschnitt [general] verwendet haben. [default] exten => 1234,1,Dial(SIP/${EXTEN}) exten => 2345,1,Dial(SIP/${EXTEN}) Abbildung 5.9: Einfache extensions.conf 34 5.5. Anbindung an das ISDN-Festnetz Folglich benötigen wir auch in extensions.conf einen Kontext mit dem Namen “default” (Abb. 5.9). Die Bedeutung der einzelnen Parameter ist hierbei wie folgt: exten gibt an, dass hier eine Rufnummer definiert wird. Danach wird die betreffende Rufnummer, also hier die Benutzerkennung des SIP-Teilnehmers, angegeben. Auf die Rufnummer folgt eine Zahl, welche die Priorität der Anweisung angibt. Es ist durchaus möglich und üblich, dass zu einer Rufnummer nacheinander verschiedene Dinge durchgeführt werden, wie z.B. Aktivieren einer Voicemailbox wenn der Anruf nicht beantwortet wird. In diesem Fall hätte die Voicemailbox eine höhere Priorität, da diese erst nach dem Anwahlversuch aufgerufen wird. Zuletzt wird die auszuführende Anwendung angegeben. Hier wird mittels Dial direkt der Teilnehmer angewählt. Dabei wird Dial über Parameter mitgeteilt, mit welchem Protokoll (hier SIP) und zu welchem Teilnehmer eine Verbindung hergestellt werden soll. Die Variable ${EXTEN} speichert automatisch immer die aktuelle gewählte Rufnummer. Weitere Funktionen des Dialplans werden in den nachfolgenden Abschnitten und Kapiteln anhand der jeweiligen Szenarien erläutert. 5.5 Anbindung an das ISDN-Festnetz Den nun eingerichteten VoIP-Teilnehmern soll auch der Zugang zum Festnetz gewährt werden. Dabei ist auch auf die entsprechenden Berechtigungen für abgehende Gespräche zu achten. 5.5.1 Installation Zur ISDN-Anbindung wird wie bereits erwähnt eine Fritz!CardPCI verwendet, die unter Linux mit den CAPI-Treibern des Herstellers AVM betrieben wird. Neben der CAPI-Unterstützung im System wird auch ein CAPI-Modul (chan_capi) für Asterisk benötigt. Dieses wird von Klaus-Peter Junghanns entwickelt [28] und ist – wie Asterisk – unter GPL erhältlich. Mit diesem Modul ist es möglich, aktive und passive ISDN BRI-Karten die CAPI 2.0-fähig sind, zu betreiben. Chan_capi wird nach erfolgter Asterisk-Installation kompilieret und installiert. Anschliessend kann die CAPI-Unterstützung in der Datei capi.conf konfiguriert werden (Abb. 5.10). Auch hier gibt es wie bereits in sip.conf gesehen einen [general]-Abschnitt, der die globalen Parameter konfiguriert. Mit den ersten beiden Variablen wird eine ggf. zu wählende Vorwahl zur Amtsholung (üblicherweise ’0’) konfiguriert. rxgain und txgain können dazu verwendet werden, um mögliche auftretende Echos zu kompensieren. 35 KAPITEL 5. Lehrstuhl-Server [general] nationalprefix = 00 internationalprefix = 000 rxgain = 0.8 txgain = 0.8 [interfaces] msn = 3841 incomingmsn = 3841 context = default softdtmf = 0 controller = 1 devices = 2 Abbildung 5.10: capi.conf Die eigentliche Konfiguration des Anschlusses geschieht im Abschnitt [interfaces]. Um die auf der ISDN-Leitung zu verwendende MSN bei abgehenden Gesprächen zu setzen, wird die Variable msn verwendet. Dabei können auch mehrere durch Kommata getrennte MSNs angegeben werden. Die eigentliche Rufnummer (MSN) auf der eingehende Gespräche signalisiert werden und die Asterisk auch entgegennehmen soll wird mittels incomingmsn definiert. Es können hier ebenfalls wieder eine oder mehrere MSNs angegeben werden oder mittels * alle MSNs entgegengenommen werden. Wie auch in sip.conf wird mittels context der Defaultkontext für eingehende Gespräche gesetzt. Ob DTMF-Töne von Asterisk (softdtmf=1) oder von der ISDNKarte selbst (softdtmf=0) generiert werden sollen hängt von der verwendeten ISDN-Karte ab. Zuletzt muss noch die zu verwendende ISDN-Karte (controller) angegeben werden. Da eine ISDN-Karte üblicherweise zwei B-Kanäle hat, ist devices auf ’2’ gesetzt. 5.5.2 Rufnummernplan mit Berechtigungsstufen Bevor wir uns mit dem Einrichten der Berechtigungsstufen beschäftigen, werfen wir zuerst einen genaueren Blick auf die Arbeitsweise des Rufnummernplanes. Die Funktionsweise der extensions Extensions (d.h. Rufnummern) werden wie bereits gesehen mit der exten-Anweisung definiert. Damit kann einer Extension eine oder mehrere Anwendungen zugeordnet werden, die in einer bestimmten Reihenfolge abgearbeitet wer- 36 5.5. Anbindung an das ISDN-Festnetz den. Die Reihenfolge wird dabei durch sog. Prioritäten festgelegt. Die Syntax einer exten-Anweisung sieht wie folgt aus: exten => Extension, Priorität, Anwendung, Argumente oder exten => Extension, Priorität, Anwendung (Argumente) Es müssen jedoch nicht alle Extensions explizit angegeben werden. Statt dessen kann man sog. Patterns verwenden, die mit dem Zeichen ’_’ eingeleitet werden. Mit diesen Pattern können z.B. festgelegte Ziffernbereiche gebildet werden, beispielsweise mit [14-6], was eine der Ziffern 1, 4, 5, 6 ergibt. Weiterhin haben folgende Zeichen besondere Bedeutungen: X N Z . Kurzschreibweise für [0-9] Kurzschreibweise für [2-9] Kurzschreibweise für [1-9] beliebig viele weitere Zeichen (nur am Ende eines Patterns) Die aktuelle Extension wird in der Variable ${EXTEN} gespeichert und kann wie bereits gesehen als Argument für eine Anwendung verwendet werden. Sollten mehrere Patterns mit einer bestimmten Nummer übereinstimmen, wird immer die exakteste Übereinstimmung verwendet. Abbildung 5.11 zeigt einen Ausschnitt eines Rufnummernplanes, der Pattern und mehrere Anwendungen mit verschiedenen Prioritäten verwendet. [ankommend] exten => _302123X,1,Busy exten => _302XXXX,1,Dial(SIP/${EXTEN:3},20) exten => _302XXXX,2,Voicemail(u${EXTEN:3}) exten => _302XXXX,102,Voicemail(b${EXTEN:3}) exten => 3023830,1,Dial(CAPI/@3841:${EXTEN:3}) Abbildung 5.11: Funktion der Extensions Hier wurde nun ein Kontext “ankommend” definiert, der Rufnummern behandelt, die mit 302 beginnen und von weiteren vier Stellen gefolgt werden. Bei ankommenden Anrufen zu Nummern, die dem Pattern 302XXXX entsprechen und nicht dem Pattern 302123X oder 3023830, wird zuerst versucht den Teilnehmer per SIP zu erreichen. 37 KAPITEL 5. Lehrstuhl-Server exten => _302XXXX,1,Dial(SIP/${EXTEN:3},20) Die Dial-Anwendung versucht einen bestimmten Teilnehmer anzuwählen. Das erste Argument gibt an, mit welchem Protokoll der Teilnehmer zu erreichen ist. Dabei können auch mehrere Möglichkeiten angegeben werden. Dial versucht dann alle gleichzeitig anzuwählen. In diesem Beispiel soll ${EXTEN:3} über SIP angerufen werden. ${EXTEN:3} entspricht dem Inhalt der Variable ${EXTEN}, wobei die ersten drei Zeichen abgeschnitten werden. Verwendet wird dies beispielsweise, wenn die angewählte Rufnummer ankommend mit voller Länge (wie einer Rufnummer mit Durchwahl) signalisiert wird, man selbst aber intern nur die Durchwahlen verwendet. Das zweite Argument ist optional. Es gibt an, nach wie vielen Sekunden Dial den Anwahlversuch abbricht. Dial beendet sich entweder, wenn das angegebene Timeout abgelaufen ist oder wenn der Anschluss des angerufenen Teilnehmers besetzt ist. Im ersten Fall wird die Priorität n+1 angesprungen, bei Besetzt die Priorität n+101. exten => _302XXXX,2,Voicemail(u${EXTEN:3}) Diese Priorität wird also dann ausgeführt, wenn das Timeout von 20 Sekunden abgelaufen ist. In diesem Beispiel wird der Anrufer an die Voicemailbox des Teilnehmers weitergeleitet. Das “u” im Argument von Voicemail gibt hier an, dass eine Ansage des Typs “unavailable” abgespielt werden soll. exten => _302XXXX,102,Voicemail(b${EXTEN:3}) Analog funktioniert dies bei Besetzt (Priorität 102), mit dem einzigen Unterschied, dass hier eine andere Ansage vom Typ “b” (“busy”) abgespielt wird. exten => _302123X,1,Busy Bei Anrufen zu Nummern, die dem Pattern 302123X entsprechen, wird dem Anrufer direkt ein Besetzt signalisiert. exten => 3023830,1,Dial(CAPI/@3841:${EXTEN:3} Diese Dial-Anweisung wählt über das CAPI-Interface (d.h. ISDN-Karte) aus dem Server heraus. Wie auch in dem obigen Beispiel ist das erste Argument das zu verwendende Protokoll, wobei die Syntax bei CAPI etwas unterschiedlich zu den anderen Protokollen ist. Hier kann wie im ISDN üblich noch die auf der ISDN-Leitung zu verwendende MSN mit angegeben werden, in diesem 38 5.5. Anbindung an das ISDN-Festnetz Beispiel die 3841. Anschliessend folgt wie gewohnt die zu wählende Rufnummer. Weiterhin gibt es noch einige Extensions mit besonderer Bedeutung (Tabelle 5.1). Extension s Name start t timeout i invalid o operator h hangup Erklärung Wird ausgeführt, wenn keine Extension bekannt ist (z.B. bei Analogleitungen). Wird ausgeführt, wenn beim Versuch eine Extension zu erhalten ein Timeout eingetreten ist. Wird ausgeführt, wenn die erhaltene Extension unbekannt ist. Wird ausgeführt, wenn der Anrufer beim Voicemail-System die 0 wählt. Wird ausgeführt nachdem ein Gespräch beendet wurde. Tabelle 5.1: Besondere Extensions Berechtigungsstufen Je nach Teilnehmer will man diesen unterschiedliche Berechtigungen für abgehende Gespräche zuweisen. Wie bereits gesehen besteht die Möglichkeit, jedem Teilnehmer einen eigenen context zuzuweisen. Mit deren Hilfe besteht nun die Möglichkeit durch eine Aufteilung verschiedener Rufnummernbereiche auf verschiedene Kontexte derartige Abstufungen zu erreichen. Angenommen, wir wollen einige Benutzer nur auf saarländische Vorwahlen beschränken und anderen deutschlandweite Anrufe gestatten. Hierzu legen wir zwei Kontexte [saar] und [dland] an. Um die Arbeit ein wenig zu erleichtern und auch den Rufnummernplan übersichtlicher zu gestalten, gibt es die Möglichkeit include-Anweisungen zu verwenden. Die einfachste Form dieser Anweisung besteht z.B. in [dland] include => saar include => trunk-dland include-Anweisungen können aber auch so verwendet werden, dass sie nur zu bestimmten Uhrzeiten gültig sind. Das Format sieht dann wie folgt aus: include => Kontext | Wochentage | Uhrzeiten | Tage des Monats | Monate 39 KAPITEL 5. Lehrstuhl-Server Hierbei müssen alle Bedingungen erfüllt sein, damit die include-Anweisung wirksam wird. Die einzelnen Werte können entweder numerisch oder als Abkürzung der entsprechenden englischen Wörter angegeben werden. Mehrere Werte können entweder durch Kommata getrennt aufgelistet werden oder als Bereiche angegeben werden (z.B. 1-4). Außerdem kann das Zeichen ’*’ als Platzhalter für alle Werte verwendet werden. [ankommend] include => geschlossen | Sat-Sun | * | * include => geschlossen | Mon-Fri | 4pm-8am | * | * include => betriebsferien | * | * | 24-31 | Dec include => offen | Mon-Fri | 8am-4pm | * | * Abbildung 5.12: Das Include-Statement Diese Funktion kann dazu genutzt werden um z.B. außerhalb der Geschäftszeiten eine Ansage abzuspielen, anstatt Anrufer an Telefone durchzustellen. Außerdem wird es dadurch möglich, abgehende Gespräche nur zu bestimmten Zeiten zu erlauben bzw. zu bestimmten Zeiten nur nach Eingabe einer PINNummer zu erlauben. Die Berechtigungsstufen selbst sind nun recht einfach zu erstellen: für jede benötigte Abstufung erstellt man einen eigenen Kontext der nur Rufnummern nach bestimmtem Muster akzeptiert. Diese können dann nach Bedarf in weitere Kontexte inkludiert werden. [trunk-saar] exten => _0004968.,1,SetAccount(capi-saar) exten => _0004968.,2,Dial(CAPI/@42:00${EXTEN:5}) exten => _0004968.,3,Congestion exten => _0004968.,103,Congestion Abbildung 5.13: Berechtigungsstufen Damit bei einer ggf. später stattfindenden Abrechnung anhand der Logdateien von Asterisk nachvollzogen werden kann, unter welcher Berechtigung der Anruf getätigt wurde, wird mit SetAccount ein Bezeichner für den Logeintrag gesetzt. Im Anschluss wird der Anruf über das CAPI-Interface initiiert, wobei @42 die auf dem ISDN-Bus zu verwendende MSN angibt. 40 5.6. Voicemail 5.6 Voicemail Unsere VoIP-Teilnehmer sind nun auch aus dem Festnetz erreichbar – sofern der Teilnehmer auch angemeldet ist und Anrufe beantwortet. Sollte dies einmal nicht der Fall sein, so soll jedem Teilnehmer eine Voicemailbox zur Verfügung stehen, die dann die eingehenden Gespräche entgegennimmt. Die Verwaltung der Voicemailboxen geschieht in der Datei voicemail.conf. Asterisk bietet die Möglichkeit, Voicemails entweder nur über eine Mailbox (d.h. am Telefon) abzurufen oder sie zusätzlich per Email (im .wav oder .gsmFormat) an den betreffenden Benutzer zuzustellen. Auch hier gibt es wieder einen globalen Konfigurationsabschnitt der die allgemeinen Parameter regelt. [general] format = wav maxmessage = 180 serveremail = [email protected] attach = yes fromstring = Voicemail emailbody = Sie haben eine neue Voicemail. Abbildung 5.14: Allgemeine Parameter in voicemail.conf format Dies definiert das zu verwendende Dateiformat, in dem Voicemails aufgezeichnet werden sollen. Möglich sind wav, gsm und wav49. Es können auch mehrere durch | (“oder”) getrennte Formate angegeben werden. maxmessage Um die maximal mögliche Länge (in Sekunden) einer Nachricht zu beschränken, kann dieser Parameter verwendet werden. serveremail Absenderadresse für die Benachrichtigung per Email attach Gibt an, ob der Benachrichtigung auch die betreffende Nachricht als Anhang beigefügt werden soll. fromstring Betreff der Benachrichtigungsemail. emailbody Body der Email. Hier stehen noch weitere Variablen durch Asterisk zur Verfügung, mit denen z.B. die Uhrzeit, Dauer der Nachricht, Telefonnummer des Anrufers usw. eingefügt werden kann. Die Definition der einzelnen Mailboxen geschieht in Voicemailkontexten im Anschluss an diesen Abschnitt. Hierbei wird folgende Syntax verwendet: 41 KAPITEL 5. Lehrstuhl-Server <Mailbox> => <Passwort>,<Name>,<Email>,<pager_email>, <Optionen> Mailbox bezeichnet die Nummer der entsprechenden Mailbox. Diese muss nicht mit der eigentlichen Rufnummer übereinstimmen, es empfiehlt sich aber aus Gründen der Übersichtlichkeit hier die gleiche Nummer zu verwenden. Passwort ist eine numerische PIN zur jeweiligen Voicemailbox und kann auch später vom Benutzer im Voicemenu der Mailbox jederzeit geändert werden. Name ist der Name des Besitzers der Voicemailbox. Email An diese Adresse werden Benachrichtigungen über neue Voicemails versandt. pager_email Asterisk kann auch Benachrichtigungen über neue Voicemails an einen Pager versenden. Benötigt man diese Funktion nicht, so kann man das Feld leer lassen. Optionen Hier können nun weitere Optionen für den jeweiligen Benutzer gesetzt werden. An dieser Stelle können z.B. auch wieder global gesetzte Werte für spezielle Benutzer mit neuen Werten überschrieben werden. Konkret sehen dann die Benutzereinträge wie in Abb. 5.15 aus. Es sind hier zwei Voicemailboxen für zwei Benutzer angelegt, wobei Mailbox 1234 in der Benachrichtigungsemail kein Anhang mit der aufgezeichneten Nachricht beigefügt wird. [default] 1234 => 4242,Maik Schmitt,maik@localhost„attach=no 2345 => 2323,Rainer Jochem,rainer@localhost Abbildung 5.15: Einrichten der Voicemailboxen Zu guter letzt werden noch Einträge in der extensions.conf benötigt, die Anrufe auf die Voicemailbox weiterleiten, sobald der Anschluss des Angerufenen besetzt ist oder der Anruf nicht beantwortet wird. Wie derartige Konfigurationen aussehen wurde bereits in Abbildung 5.11 gezeigt. 5.7 Sonstige Funktionen im Rufnummernplan Wir verfügen jetzt also über ein System, das mehrere SIP-Benutzer besitzt und ihnen mit verschiedenen Berechtigungsstufen Zugang zum Festnetz gewährt. 42 5.7. Sonstige Funktionen im Rufnummernplan Desweiteren hat jeder Teilnehmer eine eigene Voicemailbox und kann Faxe empfangen. Zu den verbleibenden Funktionen gehören Konferenzräume, Erreichbarkeit der Teilnehmer sowie ENUM-Anfragen bei abgehenden Gesprächen. Diesen Funktionen wollen wir uns nun in diesem Abschnitt widmen. 5.7.1 Konferenzräume Asterisk bietet die Möglichkeit relativ einfache Konferenzräume einzurichten. Die Konferenzräume werden in der Datei meetme.conf verwaltet (s. Abb. 5.16) Dabei gibt die erste Zahl die Nummer der Konferenz an und die zweite eine optionale PIN für die entsprechende Konferenz. [rooms] conf => 6589 ; Konferenz ohne PIN conf => 1234,4321 ; Konferenz mit PIN Abbildung 5.16: Konferenzräume Die so generierten Konferenzräume können dann im Rufnummernplan mittels exten => 4242,1,MeetMe(6589) einer Rufnummer zugewiesen werden. 5.7.2 Erreichbarkeit der Teilnehmer Bisher wurde nur beschrieben, wie die SIP-Teilnehmer in das Festnetz anrufen können, eingehende Anrufe aus dem Festnetz wurden jedoch noch nicht betrachtet. Jeder Teilnehmer ist über eine gültige Nebenstellenrufnummer der Telefonanlage erreichbar, welche von dieser über eine E1-Leitung zu einem Asterisk-Server im Rechenzentrum signalisiert wird. Dieser Server setzt die eingehenden ISDN-Anrufe in VoIP-Gespräche um und leitet diese an den Asterisk-Server des Lehrstuhls weiter (vgl. Abb. 5.2). Die Anbindung zur Telefonanlage über die E1-Schnittstelle wird später eingehend in Kapitel 7 beschrieben. Somit laufen alle eingehenden Gespräche als VoIP-Verbindungen auf dem Server auf und sind dadurch sehr leicht zu verwalten, da sie direkt zu den betreffenden Teilnehmern signalisiert werden können. 43 KAPITEL 5. Lehrstuhl-Server 5.7.3 ENUM An dieser Stelle sei auf Kapitel 7 verwiesen, da die dort verwendete Konfiguration im wesentlichen auch hier zutrifft. Allerdings bedarf es für das Thema ENUM eines eigenen Kapitels, weswegen hier auf eine Betrachtung verzichtet wird. 5.8 Asterisk-Patches Im Verlauf der Nutzung von Asterisk wurden von uns auch Patches und Erweiterungen erstellt, die im folgenden beschrieben werden. Dies ist zum einen die Verwendung MD5-verschlüsselter SIP-Passwörter in sip.conf, sowie das Erstellen eines Webinterfaces, das SIP-Teilnehmern ermöglicht ihr Passwort zu ändern. 5.8.1 Verschlüsselte SIP-Passwörter Asterisk hatte bisher in der SIP-Konfiguration noch eine sicherheitskritische Schwachstelle: Die Konfigurationsdatei für die SIP-Benutzer liegt in Form einer Text-Datei (/etc/asterisk/sip.conf) vor. Hierin werden zum einen die Benutzerpasswörter im Klartext in der Variablen secret abgelegt und sind weiterhin auch nicht durch die Benutzer selbst veränderbar. Eine Lösung für dieses Problem besteht darin, aus MD5-Hashes (bestehend aus benutzername:asterisk:passwort) gebildete Passwörter (md5secret) zu verwenden. Dies ist aufgrund des im SIP-Protkoll verwendeten Algorithmus (Digest-Authentication, ähnlich zu HTTP) die einzige Möglichkeit, das Passwort zu verschlüsseln. [1234] type = friend username = 1234 md5secret = 3d8c8fed907f666bg8a226d0f7f53a42 host = dynamic dtmfmode = rfc2833 mailbox = 1234 canreinvite = no context = international Abbildung 5.17: Beispiel für die Verwendung von md5secret Um nun diese verschlüsselten Passwörter mit Asterisk zu verwenden, wurde 44 5.8. Asterisk-Patches ein patch für chan_sip.c geschrieben, der eine neue Variable md5secret in der sip.conf einführt (siehe Abb. 5.17). Die Funktionsweise ist hierbei wie folgt: Ist lediglich die Variable secret, d.h. ein Klartextpasswort, definiert, so verhält sich Asterisk wie üblich, ist md5secret definiert, so wird stets dieses benutzt. Der Patch wurde zwischenzeitlich in das offizielle CVS aufgenommen und ist somit Bestandteil von Asterisk. 5.8.2 Erstellen eines Benutzerinterfaces Um schliesslich den Benutzern eine Möglichkeit der Passwortänderung zu geben, wurde ein Webinterface (Abb. 5.18) entwickelt, auf das per https zugegriffen werden kann. Hier kann jeder Benutzer sein Passwort ändern, welches vom Webinterface als MD5-Hash in einer MySQL-Datenbank gespeichert wird. Die Verwendung der Datenbank wurde gewählt, um mögliche Kollisionen beim gleichzeitigen Zugriff mehrerer Benutzer auf das Webinterface zu vermeiden. Desweiteren wird somit gewährleistet, dass der Webserver (in diesem Fall apache) keinen direkten Zugriff auf die SIP-Konfigurationsdateien von Asterisk benötigt. Der durch die Verwendung der MySQL-Datenbank notwenige Datenabgleich mit Asterisk wird durch ein Perl-Skript gewährleistet, das minütlich von Cron ausgeführt wird. Wird von diesem Skript eine Passwortänderung in der Datenbank festgestellt, erfolgt eine automatische Änderung der Konfigurationsdatei und es wird ein Reload von Asterisk initiiert. Ein direkter Datenbankzugriff durch Asterisk selbst befindet sich derzeit erst in der Entwicklung. Abbildung 5.18: Benutzerinterface 45 Kapitel 6 Studentenserver 6.1 Anforderungen Ziel ist es, den Studenten als zusätzlichen Service (neben Email, Internetzugang, usw.) auch Voice over IP anzubieten. Hierzu soll jedem Student/-in eine SIP-Adresse zugeordnet werden mit der VoIP-Gespräche geführt werden können und weiterhin jeder beliebige Uni-interne Telefonapparat angewählt werden kann. Zusätzlich soll es auch möglich sein, den VoIP-Anschluss eines Studenten aus dem Festnetz zu erreichen. Zur vereinfachten Nutzbarkeit soll die bestehende Benutzerkennung, die jeder Student bei der Immatrikulation erhält, als SIP-Kennung verwendet werden. Da es sich um eine grosse Anzahl an Studenten handelt und weiterhin keine besonderen Dienste (Konferenzen, Fax, etc.) benötigt werden, ist zu diesem Zweck zusammen mit dem Rechenzentrum der SIPExpress-Router von iptel.org ausgewählt worden. 6.2 Umsetzung Um die am SER-Server angemeldeten Benutzer aus dem Festnetz erreichen zu können, müssen diese über eine ”Telefonnummer” verfügen. Da es derzeit nicht möglich ist, echte Telefonnummern zu vergeben, bietet sich hier die folgende Lösung an: Um für jeden Benutzer eine eindeutige ”Rufnummer” zu erhalten, wird die Alias-Funktion von SER verwendet. Dies bedeutet, dass zu jeder SIP-Adresse der Form sip:[email protected] ein entsprechender numerischer Eintrag der Form sip:[email protected] existiert. 46 6.2. Umsetzung Diese numerischen Aliase (z.B. 1234) können nun auch an einem gewöhnlichen Telefonapparat gewählt werden. Benötigt wird aber immer noch eine Verbindung zwischen dem Festnetz und dem SER-Server, die zum einen den Festnetzanschluss an sich und die Umsetzung des per Telefon gewählten Alias zu einer gültigen SIP-Adresse (sip:[email protected]) vornimmt. Hierzu wird ein an die TK-Anlage der Universität angeschlossener AsteriskServer verwendet. Dieser ist über eine öffentliche Durchwahl (68698) aus dem ISDN erreichbar. Wählt man diese Rufnummer an, so baut man eine Verbindung zu einem IVR-System im Asterisk-Server auf und kann hier nun den Alias des gewünschten Gesprächpartners am Telefon eingeben. Der AsteriskServer baut dann eine VoIP-Verbindung (über SIP) zum SER-Server auf und verbindet dann (sofern der Gesprächspartner erreichbar ist) die beiden Teilnehmer miteinander. Abbildung 6.1: Testaufbau Ähnlich kann so auch ermöglicht werden, dass am SER-Server angemeldete Benutzer Nebenstellen der universitären TK-Anlage erreichen können: Die 47 KAPITEL 6. Studentenserver Benutzer brauchen lediglich die Nummer der gewünschten Nebenstelle zu wählen (z.B. 3841) und der Anruf wird über den Asterisk-Server in die TKAnlage weitergeleitet. Zuvor findet natürlich eine Überprüfung statt, ob es sich auch um eine gültige Nebenstellenrufnummer handelt, so dass ausschliesslich diese Anschlüsse erreicht werden können. Zuletzt wird noch für die Benutzerverwaltung, d.h. Anmelden neuer Benutzer, Ändern des Passwortes, ein geeignetes Webinterface für den SER-Server benötigt. 6.3 Konfiguration Um den Studentenserver nutzen zu können, müssen im wesentlichen drei Dinge konfiguriert werden. Zum einen SER selbst, dann der Asterisk-Server der die ISDN-Anbindung übernimmt und es müssen noch bestimmte Einträge im Domain-Name-System (DNS) gesetzt werden, damit der Studentenserver erreichbar ist. 6.3.1 SER Für den Betrieb des Studentenservers wurde ein Debian-basierter Linux-Server eingerichtet, auf dem neben SER auch MySQL für die Benutzerverwaltung und Apache-SSL für das Webinterface installiert wurden. Nach der Installation von SER wurden die benötigten Datenbankbenutzer sowie die Datenbank und Tabellen angelegt. Hierfür müssen die einzelnen Parameter im mitgelieferten Skript (/usr/sbin/ser_mysql.sh) gesetzt werden. Anschliessend kann mit der eigentlichen Konfiguration von SER begonnen werden. Zunächst sei eine grobe Übersicht über den Aufbau der Konfigurationsdatei gegeben. SER verwendet eine einzige Datei (ser.cfg), die eine C-ähnliche Syntax verwendet und im wesentlichen aus vier Abschnitten besteht. Globale Parameter: Diese bestimmen das allgemeine Verhalten der Servers wie z.B. Portnummer oder Loglevel. Module: Hier werden externe Module wie z.B. ENUM oder MySQL eingebunden. Sollten Module voneinander abhängen, so müssen die Module in der Reihenfolge aufgelistet werden, wie die Abhängigkeiten bestehen. Modulspezifische Parameter: An dieser Stelle können einzelne Module genauer konfiguriert werden (wie z.B. Datenbankparameter, ENUM-Domain, ...) 48 6.3. Konfiguration Routing-Blocks: Es können ein oder mehrere Routing-Blocks angegeben werden, die die Logik für ein- und ausgehende Nachrichten beschreiben. Gegenüber der Default-Konfiguration musste lediglich die Routing-Logik wie folgt den eigenen Bedürfnissen angepasst werden. Alle übrigen Parameter wurden unverändert übernommen und werden daher hier nicht betrachtet. Da dieser Server für verschiedene Realms (derzeit stud.uni-saarland.de, rz.unisaarland.de) zuständig ist, muss dies SER mittels des alias-Parameters (alias="rz.uni-saarland.de") mitgeteilt werden. Weiterhin muss die Verwendung der Benutzeraliase aktiviert werden. (lookup("aliases");). Die zweite Änderung betrifft das Wählen von Festnetzrufnummern von SER aus. Damit dies vom Endgerät (SIP-Telefon) des Benutzers aus möglichst einfach funktioniert (d.h. lediglich die Festnetzrufnummer der Nebenstelle eingegeben werden muss), wird hierzu das ENUM-Modul von SER verwendet. if (method=="INVITE" or method=="CANCEL" or method=="BYE") { if (uri=˜"^sip:\+.*" or uri=˜"^sip:\*.*") { if (enum query("")) { if (!t relay()) { sl reply error(); }; break; }; }; 10 if (uri=˜"^sip:[2-5]. . .@.*uni-saarland\.de" or uri=˜"^sip:7[1-2]. .@.*uni-saarland\.de" or uri=˜"^sip:6. . .@.*uni-saarland\.de" or uri=˜"^sip:6. . . .@.*uni-saarland\.de" or uri=˜"^sip:19@.*uni-saarland\.de" or uri=˜"^sip:0@.*uni-saarland\.de") { forward(134.96.6.9); break; }; }; 20 Abbildung 6.2: ENUM-Routing in ser.cfg Dabei geschieht folgendes: Wird eine SIP-URI gewählt, die mit + oder * beginnt, so findet eine ENUM-Anfrage statt. Wenn diese erfolgreich ist ( if (enum_query(“”)) ), so wird versucht diese URI direkt anzuwählen. Falls diese Vermittlung fehlschlägt, wird dem Client eine entsprechende Fehlermeldung signalisiert. Andernfalls wird geprüft, ob es sich bei der gewählten SIP-URI 49 KAPITEL 6. Studentenserver um eine lokale Rufnummer der TK-Anlage handelt. Ist dies der Fall, so wird ein SIP-Anruf mit dieser Adresse an den Asterisk-Server (134.96.6.9) eingeleitet. Ansonsten wird versucht, die gewählte URI direkt anzurufen. Zur genauen Funktionsweise von ENUM sei auf Kapitel 7 verwiesen. Sonstige Änderungen der Konfigurationsdatei waren nicht erforderlich. 6.3.2 Asterisk Bei dem hier verwendeten Asterisk-Server handelt es sich um das gleiche System, das auch die ENUM-Anbindung übernimmt. Aus diesem Grund sei für die Konfiguration der Anbindung zur TK-Anlage auf Kapitel 7 verwiesen. An dieser Stelle sei lediglich auf den Abschintt des Rufnummernplanes von Asterisk eingegangen, der für die Verbindung von ISDN und SER dient. exten exten exten exten exten => => => => => s,1,Answer s,2,Wait(1) s,3,DigitTimeout(5) s,4,ResponseTimeout(10) s,5,BackGround(durchwahl) exten exten exten exten exten => => => => => _XXXXX,1,Dial(SIP/[email protected]) _XXXXX,2,PlayBack(nichterreichbar) _XXXXX,3,Hangup _XXXXX,102,PlayBack(nichterreichbar) _XXXXX,103,Hangup Abbildung 6.3: Einwahl ISDN - SER Abbildung 6.3 zeigt den entsprechenden Ausschnitt der extensions.conf. Zunächst wird der vom ISDN eingehende Anruf mit Answer angenommen. Während im Hintergrund eine Ansage (”durchwahl”) vorgespielt wird, die den Benutzer auffordert den gewünschten Alias einzugeben, wartet Asterisk auf die Eingabe der Rufnummer. Dabei gibt DigitTimeout an, wie viele Sekunden zwischen den einzelnen Ziffern zu warten ist, bis die eingegebene Rufnummer interpretiert wird. Ist nach 10 Sekunden noch keine Eingabe erfolgt (ResponseTimout), wird die Verbindung beendet. Wurden vom Benutzer fünf Ziffern eingegeben, tritt das Pattern _XXXXX in Kraft und Asterisk versucht diese als SIP-Rufnummer am SER-Server anzuwählen. Schlägt dies fehl, weil z.B. der Teilnehmer nicht online ist oder der Anschluss besetzt ist, so wird eine Fehleransage (”nichterreichbar”) abgespielt und das Gespräch beendet. 50 6.4. Webinterface Verbindungen in die ”andere” Richtung, d.h. von SER zur TK-Anlage funktionieren hier wie alle anderen per VoIP vom Inter-/Intranet eingehenden Gespräche auch und sind in Kapitel 7 beschrieben. 6.3.3 DNS Damit die Benutzer ihre bestehende Email-Adresse auch als SIP-Adresse verwenden können, wurden im SER bereits Server-Aliase für die einzelnen EmailDomains (stud.uni-saarland.de, usw.) eingerichtet. Allerdings ist der eigentliche Server unter einer völlig anderen Domain im Netzwerk sichtbar. Um zu ermöglichen, dass sich die Benutzer mit ihren Email-Domains trotzdem an diesem anders lautenden Server anmelden können, werden sog. SRV-Records im DNS benötigt. _sip._udp SRV 0 0 5060 iptel.rz.uni-saarland.de. Abbildung 6.4: SRV-Record Diese müssen im Nameserver der betreffenden Domain eingetragen werden und enthalten den Dienst (in diesem Falle SIP), die Portnummer (5060) und verweisen auf den eigentlichen Server, der für diesen Dienst zuständig ist. 6.4 Webinterface Iptel.org stellt zwar ein Webinterface für SER zur Verfügung, allerdings hat sich dies für diesen Einsatzzweck als nicht geeignet herausgestellt. Wie bereits erwähnt, sollen die bestehenden Email-Adressen als SIP-Adressen verwendet werden, was zur Folge hat, dass viele unterschiedliche Domains (z.B. stud.uni-saarland.de oder rz.uni-saarland.de usw.) zu beachten sind. Dies ist insofern von Bedeutung, da diese Domains als sog. SIP-Realms Verwendung finden (entspricht der Funktion der Domain bei den Email-Adressen). Leider ist aber das von Iptel.org verfügbare Webinterface nicht in der Lage mehrere unterschiedliche Realms zu verarbeiten. Auch lässt sich das Webinterface nur sehr schlecht konfigurieren. Aus diesen Gründen wurde ein eigenes Webinterface geschrieben, das alle grundlegenden Funktionen bereitstellt: Anmelden, Passwort ändern sowie Anzeigen der Daten des eigenen Accounts. Es handelt sich hierbei um eine Reihe von PHP-Skripten, die – wie auch das Webinterface von Iptel – auf die SERMySQL-Datenbank zugreifen und dort die Benutzerverwaltung durchführen. 51 Kapitel 7 ENUM ENUM ist die Abkürzung für tElephone NUmber Mapping (RFC 2916 [29]). Es definiert eine Vorschrift, mit der einer Telefonnummer in eindeutiger Weise eine DNS-Domain zugeordnet wird. Anhand dieser Domain kann man mittels DNS-Anfragen ermitteln, auf welchen Wegen der gewünschte Teilnehmer erreichbar ist. Dies ist insbesondere für den Bereich der Telefonie interessant, da man hiermit eine Art Least-Cost-Routing (LCR) betreiben kann, bei der der Teilnehmer statt über Festnetz alternativ per VoIP zu wesentlich günstigeren Tarifen erreicht werden kann. 7.1 public ENUM Als public ENUM bezeichnet man das in RFC 2916 definierte öffentliche ENUM-System, das unterhalb der Domain e164.arpa angeboten wird. Dieses System wird oft auch einfach nur als ENUM bezeichnet. Zuständig für die Vergabe dieser offiziellen ENUM-Einträge sind die NICs des jeweiligen Landes, für Deutschland also das DENIC [30]. Um eine Telefonnummer in eine public ENUM-Domain umzuwandeln, muss die Telefonnummer im sogenannten E.164-Format vorliegen, bestehend aus Vorwahl Rufnummer . + Ländercode +49 681 3023830 Die Ziffern der Rufnummer werden der Endung .e164.arpa in umgekehrter Reihenfolge vorangestellt und jeweils durch Punkte getrennt. 0.3.8.3.2.0.3.1.8.6.9.4.e164.arpa 52 7.1. public ENUM Über DNS-Anfragen kann die so gebildete Domain zu mehreren Naming Authority Pointer Records (NAPTR) aufgelöst werden. Diese Records enthalten URIs zu den Services, die mit dieser Rufnummer verknüpft sind, sowie eine Abarbeitungsreihenfolge. Die URIs können unter anderem folgende Typen haben: mailto - Email Adresse an die z.B. Voicemails gesendet werden können. http - Adresse einer Homepage, unter der weitere Informationen zu finden sind, wie der gewünschten Teilnehmer erreichbar ist. sip/h323/iax2 - SIP-/H.323-/IAX2-Adresse, unter der der gewünschte Teilnehmer direkt erreichbar ist. tel - E.164-Rufnummer, unter der der gewünschte Teilnehmer erreichbar ist. Die URIs, die in den NAPTR-Records enthalten sind, müssen dabei nicht statisch sein. Mit Hilfe von regularären Ausdrücken kann die E.164-Rufnummer teilweise oder komplett in der URI verwendet werden. Die Universität des Saarlandes nimmt am ENUM-Testbetrieb des DENIC teil und hat in diesem Rahmen vom DENIC für alle Rufnummern die mit +49 681 302 beginnen, d.h. alle Nebenstellen der Universität, NAPTR-Records mit folgendem Inhalt erhalten: ! ! ! +49681302(.*)$!iax2:guest @enum.rz.uni-saarland.de/ 1! +49681302(.*)$!sip: 1 @enum.rz.uni-saarland.de! +49681302(.*)$!h323: 1 @h323server.rz.uni-saarland.de! ! .*$!http://www.rz.uni-saarland.de/projekte/! Bei den hier verwendeten regulären Ausdrücken werden die einzelnen Bestandteile durch Ausrufezeichen voneinander getrennt. Zwischen den ersten beiden Ausrufezeichen steht der zu bearbeitende Rufnummernteil. 53 KAPITEL 7. ENUM +49681302(.*)$ Dies betrifft also alle Rufnummern, die auf +49681302 beginnen und mit beliebig vielen weiteren Stellen enden. Zwischen den nächsten beiden Ausrufezeichen wird die Ersetzungsregel angegeben. sip: [email protected] Hier wird die mit 1 gekennzeichnete Stelle durch den Teil der Rufnummer ersetzt, der von (.*) erfüllt wird. Für die Rufnummer +49 681 302 1234 würden sich daraus folgende URIs ergeben: iax2:[email protected]/1234 sip:[email protected] h323:[email protected] http://www.rz.uni-saarland.de/projekte/ 7.2 user ENUM Als user ENUM bezeichnet man alle ENUM-Systeme die nicht unterhalb der Domain e164.arpa angeboten werden. Es handelt sich hierbei also um keine offiziellen, international gültigen ENUM-Einträge. Solche Systeme sind idR. nur lokal zugänglich und werden hauptsächlich zum Least-Cost-Routing eingesetzt. So kann z.B. zu einer Telefonnummer eine tel-URI zurückliefert werden, die die gleiche Telefonnummer mit vorangestellter Netzbetreibervorwahl enthält. User ENUM kann außerdem dazu verwendet werden, Durchwahlen dynamisch auf mehrere Server zu verteilen. Hier wird z.B. zu einer Anfrage eine sip-URI zurückgegeben aus der der Server, der für die Durchwahl zuständig ist, hervorgeht. Ein solches System ist vor allem bei größeren Installationen sinnvoll, da man damit die Rufnummernpläne nur an einer Stelle verwalten muss. Um eine Telefonnummer in eine user ENUM Domain umzuwandeln geht man genau so vor wie bei public ENUM. Allerdings muss hier die Nummer nicht im E.164-Format vorliegen und es wird üblicherweise eine andere Endung als e164.arpa verwendet um Kollisionen mit dem public ENUM System zu vermeiden. 54 7.3. Umsetzung mit Asterisk 7.3 Umsetzung mit Asterisk Um die Vorzüge von ENUM nutzen zu können wurde eine ENUM-fähige, VoIP-taugliche Software benötigt, die außerdem in der Lage ist, eine Anbindung zum öffentlichen Telefonnetz möglichst mit E1-Interface herzustellen. Die einzige Software, die diese Anforderungen derzeit erfüllen kann, ist Asterisk. Aus diesem Grund wurde ein weiteres Asterisk-System im Rechenzentrum installiert, das über eine TE410P-Karte [31] an die universitäre TK-Anlage angeschlossen ist. Diese Karte verfügt über vier E1-Schnittstellen und wurde von Digium speziell für die Verwendung mit Asterisk entwickelt. 7.3.1 Konfiguration des E1-Interfaces Zunächst muss die Hardware im System eingerichtet und konfiguriert werden. Hierzu werden die entsprechenden Kartentreiber benötigt, die separat aus dem Asterisk-CVS (Modul zaptel) ausgecheckt werden müssen. Ist zaptel installiert, kann mit der Kartenkonfiguration begonnen werden. Die Konfigurationsdatei für die Karte lautet /etc/zaptel.conf und dient dazu, die Einstellungen für die einzelnen Ports der Karte zu setzen. Die Syntax zur Definiton der einzelnen Ports lautet hierbei wie folgt: span = <span num>,<timing>,<line build out (LBO)>, <framing>,<coding>[,yellow] <span num> bezeichnet die Portnummer und <timing> beschreibt, ob dieser Port eine Timingquelle für Asterisk darstellt und, falls ja, mit welcher Priorität diese verwendet werden soll. Timingquellen dienen zur Synchronisation der Kommunikation auf dem PRI-Interface. Mit <LBO> wird die Leitungsdistanz zum Übergabepunkt der PRI-Leitung in Schritten von ca. 40m angegeben. <framing> gibt die Einteilung der vorhandenen Kanäle auf die einzelnen Zeitschlitze vor – für europäische PRI-Anschlüsse wird fast ausschliesslich ccs verwendet. Das Übertragungsprotokoll für die jeweilige Leitung wird mit <coding> definiert und ist für E1-Leitungen üblicherweise hdb3,crc4. yellow weist Asterisk an, bei festgestellten Fehlern auf der PRI-Leitung dies der Gegenstelle mittels eines sogenannten “Yellow-Alerts” zu signalisieren. Eine vollständige Zeile für ein E1-Interface sieht dann wie folgt aus: span = 1,1,0,ccs,hdb3,crc4,yellow 55 KAPITEL 7. ENUM Danach müssen die B- und D-Kanäle der einzelnen Ports definiert werden. Bei europäischen E1-Leitungen befindet sich der D-Kanal normalerweise auf Port 16. bchan=1-15 dchan=16 bchan=17-31 Anschliessend kann das Treibermodul für die E1-Karte geladen werden. Die Zuordnung der einzelnen in /etc/zaptel.conf konfigurierten Kanälen zu verschiedenen Kontexten und die auf der Leitung zu verwendende Signalisierungsmethode wird in /etc/asterisk/zapata.conf festgelegt. [channels] pridialplan = unknown overlapdial = yes switchtype = euroisdn usecallerid = yes echocancel = yes callerid = asreceived signalling = pri_cpe group = 1 context = vonpri accountcode = pri channel => 1-15,17-31 Abbildung 7.1: zapata.conf pridialplan Bezeichnet die Art der Rufnummernübermittlung. overlapdial Gibt an, ob Nachwahl von Ziffern auf dem Interface zugelassen wird. switchtype ist das zu verwendende Signalisierungsprotokoll. usecallerid Gibt an, ob Informationen über die CallerID zu übertragen sind. echocancel Aktiviert oder deaktiviert die Echounterdrückung. callerid Legt die bei abgehenden Gesprächen zu verwendende CallerID fest. signalling Art der Signalisierung, u.a. Netzwerk- oder Kundenseite. 56 7.3. Umsetzung mit Asterisk group Gruppe, in der die folgenden Kanäle gebündelt werden. channel Kanäle der Gruppe. 7.3.2 Rufnummernplan Abgehende Gespräche Um ENUM mit Asterisk zu verwenden, muss eine entsprechende Logik im Dialplan implementiert werden (siehe Abb. 7.2). Abbildung 7.2: Rufablauf bei ENUM-Anfragen In diesem Beispiel wird vorausgesetzt, dass die Teilnehmer die Ziffer 0 vorwählen müssen, um eine Rufnummer im Festnetz anzurufen. 57 KAPITEL 7. ENUM [deutschland] ignorepat => 0 exten => _0Z.,1,Goto(00049681${EXTEN:1},1) exten => _00Z.,1,Goto(00049${EXTEN:2},1) exten => _00049.,1,EnumLookup(${EXTEN:3}) Abbildung 7.3: Umformatieren der Rufnummer für ENUM-Anfrage ignorepat bewirkt, dass weiterhin ein Wählton signalisert wird, wenn der Benutzer eine 0 wählt. Falls der Benutzer eine Nummer im gleichen Ortsnetz ohne Vorwahl bzw. eine Nummer mit nationaler Vorwahl anwählt, wird die Nummer ins internationale Format umgewandelt, um später eine gültige ENUMAnfrage stellen zu können. EnumLookup sucht zu einer E.164-Rufnummer die passenden NAPTR-Records und prüft, ob eine verwertbare URI enthalten ist. Falls eine tel-URI gefunden wird, wird die Priorität n+51 angesprungen. Wird eine sip-, h323-, iax- oder iax2-URI gefunden, so wird die Priorität n+1 angesprungen. In beiden Fällen wird die URI in der Variable ${ENUM} gespeichert. Wenn keine verwertbare URI gefunden werden kann, wird die Priorität n+101 angesprungen. exten => _00049.,1,EnumLookup(${EXTEN:3}) exten => _00049.,2,Goto(1000) exten => _00049.,1000,SetCIDNum (+49681302${CALLERIDNUM}|a) exten => _00049.,1001,Dial(${ENUM}) Abbildung 7.4: ENUM-Anfrage EnumLookup hat eine verwertbare URI gefunden (Abb. 7.4). Um den Dialplan übersichtlicher zu gestalten und Kollisionen bei den Prioritäten zu vermeiden wird zuerst die Priorität 1000 angesprungen. Nun sollte die CallerID auf die vollständige Rufnummer inkl. Ländercode gesetzt werden. Ansonsten würde das angerufene Telefon nur die Durchwahl des Anrufers anzeigen (z.B. 1234 statt +496813021234). Anschliessend kann die gefundene URI angewählt werden. 58 7.3. Umsetzung mit Asterisk exten => _00049.,1002,SetCIDNum (${CALLERIDNUM:9}|a) exten => _00049.,1003,Goto(2000) exten => _00049.,1102,Busy Abbildung 7.5: Nicht erfolgreicher VoIP-Anruf Sollte die URI nicht erreichbar sein (z.B. wegen einer Störung im Netzwerk oder einer falsch formatierten URI), wird die CallerID wieder auf den alten Wert zurückgesetzt und es wird versucht, die Nummer direkt über das Festnetz anzurufen (Goto(2000), siehe Abb. 7.6). Sollte der angerufene Anschluss besetzt sein, so wird dies entsprechend dem Anrufer signalisiert. exten => _00049.,52,Goto(000${ENUM},2000) EnumLookup hat eine tel-URI gefunden. Hier könnte man versuchen, einen ENUM-Eintrag für die neue Rufnummer zu finden. Allerdings würde dies den Rufaufbau erneut verzögern und es besteht die Möglichkeit, dass so eine Endlosschleife entsteht. Deshalb wird hier die neue Rufnummer direkt über das Festnetz angerufen, wobei mit der Goto-Anweisung sichergestellt wird, dass der Anrufer die benötige Berechtigung hat, um die neue Rufnummer anzurufen. exten => _00049.,102,Goto(2000) exten => _00049.,2000,Macro(dialout,0${EXTEN:5}) Abbildung 7.6: Anruf über das Festnetz Hier wird ein Makro aufgerufen, dass die Telefonnummer über das Festnetz anruft. Die Telefonnummer wird dabei so übergeben, wie sie auf der abgehenden Telefonleitung gewählt wird. Die Nummer enthält also nicht die zusätzliche 0, die der Anrufer wählen muss und außerdem wurde die Ländervorwahl entfernt, da man deutsche Telefonnummern idR. nicht mit Ländervorwahl erreichen kann. 59 KAPITEL 7. ENUM [macro-dialout] exten exten exten exten exten = = = = = s,1,Dial(Zap/g1/${ARG1}) s,2,Dial(Capi/${ARG1}) s,3,Congestion s,102,Busy s,103,Busy Abbildung 7.7: Wahl von Festnetzrufnummern Dieses Makro versucht zunächst die Nummer über ein Zaptel-Interface anzurufen (dies könnte z.B. eine S2M-Leitung sein). Sollte diese Leitung gestört sein oder alle Kanäle belegt sein, wird versucht den Anruf über ein Capi-Interface durchzustellen. Ist dieser Anschluss ebenfalls gestört bzw. alle Kanäle belegt, so wird dem Anrufer ein sog. Gassenbesetzt signalisiert. Bei manchen Verbindungen ist es evtl. nicht erwünscht, dass eine ENUMAnfrage gestellt wird (z.B. bei Störungen im Netz oder bei fehlerhaften ENUMEinträgen). Daher sollte man auch eine Möglichkeit vorsehen, diese zu umgehen. exten = _*00*.,1,Goto(${EXTEN:4},2000) Abbildung 7.8: Vorwahl, um ENUM-Anfrage zu umgehen Alle Rufnummern, denen *00* vorangestellt wurde, werden direkt über das Festnetz angewählt, wobei durch die Goto-Anweisung sichergestellt ist, dass die Rufnummer im korrekten Format gewählt wird. Ankommende Gespräche Weiterhin dient dieser Server auch als Anlaufstelle für Gespräche, die über ENUM per VoIP eingehen – sei es aus dem internen Netz der Universität oder aus dem Internet. In diesen Fällen muss der Server die Gespräche zu den entsprechenden Teilnehmern, beispielsweise über ISDN in die TK-Anlage, weiterleiten. Auch hier werden wieder Berechtigungsstufen verwendet über die sichergestellt wird, dass ausschließlich gültige Nebenstellen der Universität erreichbar sind. Anschließend können diese Anrufe direkt an die TK-Anlage weitergeleitet werden. 60 7.4. Erweiterung von TK-Anlagen um ENUM 7.4 Erweiterung von TK-Anlagen um ENUM Bestehende TK-Anlagen haben meist kein Netzwerkinterface und sind daher auch nicht Voice over IP-fähig. Folglich kann man mit diesen Systemen auch keine Dienste wie ENUM nutzen. Abbildung 7.9: Erweiterung einer bestehenden TK-Anlage um ENUMFunktionalität Um diese Anlagen um ENUM-Funktionalität zu erweitern, muss man ein getrenntes System über die von der Anlage bereitgestellten Interfaces anbinden. Da für ENUM nur die Anrufe von Interesse sind, die die bestehende Anlage nicht Intern vermitteln kann, verwendet man am besten die Interfaces, die mit dem öffentlichen Telefonnetz verbunden sind (idR. S2M-Interfaces). Diese Interfaces verbindet man, wie in Abbildung 7.9 gezeigt, mit einem AsteriskServer und verbindet diesen mit dem öffentlichen Telefonnetz. Um unnötige Ausfälle des Systems durch Reparatur- und Wartungsarbeiten zu vermeiden, sollte man mindestens zwei Asterisk-Server verwenden. Die Asterisk-Server versuchen, abgehende Gespräche per VoIP zu vermitteln. Dazu können feste Einträge im Dialplan sowie public- und user ENUM verwendet werden. Ankommende Gespräche werden entweder direkt an die TKAnlage weitergeleitet oder per IP vermittelt (auch hierfür kann man feste Einträge im Dialplan und user ENUM verwenden). Sollten bei ankommenden oder abgehenden Rufen auf der zugehörigen Leitung eines Servers zur TK-Anlage bzw. zum Festnetz keine Kanäle mehr frei sein und das Gespräch kann nicht per IP vermittelt werden, so kann das Gespräch zu einem anderen AsteriskServer weitergeleitet werden und von dort aus zur TK-Anlage bzw. zum Festnetz durchgereicht werden. 61 KAPITEL 7. ENUM 7.5 user ENUM mit Bind Um einen eigenen ENUM-Server einzurichten, benötigt man eine geeignete Nameserver-Software die in der Lage ist, ENUM-Anfragen zu bearbeiten. Hier bietet sich z.B. Bind ab Version 9 an. Zunächst muss die Konfigurationsdatei (named.conf, Abb. 7.10) von Bind angepasst werden. Hier definiert man seine eigene ENUM-Zone (in diesem Fall ”myenum”) zu der Bind ENUM-Anfragen beantworten soll. zone ”myenum” { type master; file ”/etc/bind/db.myenum”; allow-query { 127.0.0.1; asterisk1; asterisk2; } ; allow-transfer { 127.0.0.1; dns1; dns2; } ; } ; Abbildung 7.10: named.conf Die eigentlichen Daten für die ENUM-Anfragen befinden sich in der Datei ”db.myenum” (Abb. 7.11). Zu Beginn werden die allgemeinen Parameter für das DNS definiert. Im Anschluss daran können dann die einzelnen ENUMEinträge in der Form aufgelistet werden wie sie auch vom DNS bei einer ENUM-Anfrage zurückgeliefert werden. Nun kann man an diesen Server ENUM-Anfragen der Form 4.3.2.1.2.0.3.1.8.6.9.4.myenum stellen, die in diesem Fall die folgende VoIP-Adresse zurückliefern würde. IAX2/[email protected]/1234 62 7.5. user ENUM mit Bind $TTL 3600 @ IN SOA localhost. root.localhost. ( 1 ; Serial 3600 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL NS myenumserver NS dns1 NS dns2 ;uni-sb *.2.0.3.1.8.6.9.4.myenum. IN NAPTR 1 1 ”u” ”E2U+IAX2” ”! +49681302(.*)$! IAX2/[email protected]/ 1!” . Abbildung 7.11: db.myenum 63 Kapitel 8 Endgeräte Zum Betrieb eines VoIP-Systemes gehören natürlich auch die entsprechenden IP-Telefone. Hier gilt unser besonderer Dank dem Rechenzentrum der Universität des Saarlandes und der Firma Snom, die so freundlich waren uns Testgeräte zur Verfügung zu stellen. Die folgende Übersicht beschränkt sich dabei auf eine allgemeine Beschreibung der Besonderheiten der einzelnen uns verfügbaren Telefone. Die genauen technischen Daten sind auf den Websites der jeweiligen Hersteller ersichtlich. Darüber hinaus gibt es noch eine Vielzahl weiterer Telefone, deren Betrachtung allerdings den Rahmen dieser Ausarbeitung sprengen würde. Auch hier sei auf das Internet verwiesen, wo technische Daten und Erfahrungsberichte vorzufinden sind. 8.1 Hardphones Als Hardphones werden alle Hardware-Telefone bezeichnet, d.h. “echte” Telefone, die unabhängig von einem PC funktionieren. 8.1.1 Cisco 7960 Dies ist ein derzeit weit verbreitetes VoIP-Telefon (Abb. 8.1). Es verfügt über sechs sog. Lines, d.h. man kann damit bis zu sechs verschiedene Rufnummern auf das Telefon schalten. Zudem verfügt es über ein grosses LCD-Display, das auch XML-Seiten (die in Cisco-XML geschrieben sind) darstellen kann. Jedoch werden diese XML-Services in der SIP-Firmware nicht in dem Maße unterstützt, wie in der Skinny-Firware. Die Verarbeitung des Telefons ist sehr gut und auch die Sprachqualität ist sehr gut. Zu den unterstützten Codecs gehören G.711 und G.729. Desweiteren ist ein 10/100Mbit-Switch integriert, so dass das Telefon in eine bereits bestehende Arbeitsplatzvernetzung eingeschleift werden kann. Allerdings ist der Preis relativ hoch (ca. 460 EUR). 64 8.1. Hardphones Abbildung 8.1: Cisco 7960 8.1.2 Cisco 7905 Dieses Telefon ist relativ neu (Abb. 8.2). Im Vergleich zum 7960 verfügt es derzeit lediglich über eine einzige Line und kann auch keine XML-Services darstellen. Zu den unterstützten Codecs gehören wie beim 7960 G.711 und G.729. Auch hier sind Verarbeitung und Sprachqualität sehr gut. Verfügbare Firmwares sind Skinny, H.323 und SIP. Benötigt man jedoch ein anderes Protokoll, so muss man das Telefon mit der jeweiligen Firmware neu flashen, was im übrigen bei allen Cisco-Telefonen der Fall ist. Als weiteres Feature kann es durch ein Webinterface (Abb. 8.3) konfiguriert werden - allerdings ist dieses recht kryptisch zu bedienen - ohne Handbuch ist hier kaum eine Konfiguration möglich. Auch verfügt es über keine echte Freisprecheinrichtung, sondern lediglich über einen Lautsprecher. Dafür ist der Preis allerdings mit ca. 150 EUR recht günstig. Abbildung 8.2: Cisco 7905 65 KAPITEL 8. Endgeräte Abbildung 8.3: Cisco 7905 Webinterface 8.1.3 Snom 100 Das von der Berliner Firma Snom entwickelte Telefon unterstützt G.711, G.729 und GSM (Abb. 8.4). Es zeichnet sich vor allem durch ein sehr übersichtliches und gut bedienbares Webinterface aus (Abb. 8.5). Weiterhin unterstützt es sowohl H.323 als auch SIP mit der gleichen Firmware. Vom Funktionsumfang reicht es fast an ein 7960 heran, wenn es auch wie das 7905 keine XMLServices (o.ä.) bietet. Das Design mag Geschmackssache sein - allerdings würden wir den Telefonhörer doch zumindest als “ungewöhnlich” bezeichnen. Der Preis liegt mit ca. 300 EUR im Mittelfeld. Abbildung 8.4: Snom 100 66 8.2. Analog-IP - Wandler Abbildung 8.5: Snom 100 Webinterface 8.2 Analog-IP - Wandler Hierbei handelt es sich um Geräte, die es ermöglichen ein oder mehrere herkömmliche Analogtelefone an ein VoIP-System anzubinden. 8.2.1 Cisco ATA-186 Mit dem ATA-186 können zwei Analogtelefone an ein VoIP-System angeschlossen werden (Abb. 8.7). Von Cisco sind Firwares für Skinny und MGCP oder H.323 und SIP erhältlich. Auch hier ist wie beim 7905 ein Webinterface vorhanden (Abb. 8.6), das sich allerdings ebenfalls sehr kryptisch und nur mit Hilfe des Handbuches bedienen lässt. Der Neupreis liegt bei ca. 130 EUR. 8.2.2 Digium IAXy Digium bietet mit dem IAXy (Abb. 8.8) einen weiteren Adapter für Analogtelefone an, an den sich allerdings nur ein einziges Gerät anschliessen lässt. Dafür ist er von der Größe handlicher als ein ATA-186. Wie der Name schon vermuten lässt, spricht dieses Gerät das Asterisk-eigene IAX-Protokoll. Der Preis liegt bei ca. 99USD. 67 KAPITEL 8. Endgeräte Abbildung 8.6: Cisco ATA-186 Webinterface Abbildung 8.7: Cisco ATA-186 8.3 Softphones Dies sind Software-Clients die auf einem PC/Laptop/PDA betrieben werden. 8.3.1 KPhone KPhone [32] ist ein SIP-Softphone für Linux (Abb. 8.9), das seit der Version 4.0.0 auch DTMF-Töne versenden kann um z.B. Voicemail abzufragen oder durch IVR-Menüs zu navigieren. Verfügbare Audiocodecs sind G.711, GSM und iLBC. Ferner unterstützt Kphone das STUN-Protokoll, womit der Betrieb hinter den meisten Firewalls und NATs möglich ist. Einziger Nachteil ist die nicht funktionierende Videotelefonie - Kphone sieht zwar Videotelefonie mittels VIC [33] vor, allerdings ließ sich bei allen bisherigen Versuchen kein Video übertragen. 68 8.4. Headsets Abbildung 8.8: Digium IAXy Abbildung 8.9: Kphone 8.3.2 X-Lite Bei X-Lite handelt es sich um die Gratisversion eines kommerziellen Produktes (X-Pro), das von der Firma Xten Networks [34] hergestellt wird (Abb. 8.10). X-Lite ist z.Z. für Windows und MacOS X erhältlich und soll demnächst auch in einer Linux-Version verfügbar sein. Auch X-Lite unterstützt STUN um hinter Firewalls/NATs benutzt zu werden. Zu den unterstützten Codecs zählen G.711, GSM, Speex und iLBC. Leider hat auch X-Lite einige Nachteile, die allerdings durch den kommerziellen Hintergrund begründet sind: So ist es z.B. mit dieser Version der Software nicht möglich Anrufe weiterzuvermitteln. 8.4 Headsets Will man mit einem Softphone ein Gespräch führen, benötigt man zusätzlich noch ein am PC angeschlossenes Headset, d.h. Kopfhörer mit Mikrofonbügel. Hier gibt es verschiedene Alternativen: zum einen recht preisgünstige Headsets zum Anschluss an die (meist vorhandene) Soundkarte des Rechners. Dies 69 KAPITEL 8. Endgeräte Abbildung 8.10: X-Lite setzt eine Full-Duplex-fähige Soundkarte (idR. alle neueren Modelle), sowie eine Unterstützung der Soundkarte durch das Betriebssystem voraus. Letzteres kann bei einigen Soundkarten unter Linux Probleme bereiten. Zudem hat man meist bereits ein Lautsprechersystem an den Rechner angeschlossen und somit keinen Platz für die zusätzlichen Steckverbindungen eines Headsets. Aus diesem Grund bieten sich USB-Headsets an, die einfach an einen freien USB-Port des Rechners angeschlossen werden können und ihre eigene Soundkarte mitbringen. Leider gibt es auch hier wieder mit manchen Produkten Probleme unter Linux: So werden je nach Headset und verwendetem Soundtreiber (OSS oder Alsa) nicht alle benötigten Samplerates ungerstützt. Weiterhin gibt es bei Verwendung eines Plantronics USB-Headset (DSP 100) zusammen mit dem USB-UHCI-Treiber (auf Intel- und VIA-Boards verbreitet) und allen Alsa-Versionen bis 1.0 das Problem, dass nach wenigen Sekunden die Audioübertragung zusammenbricht. Eine dritte Möglichkeit stellt die Verwendung von Bluetooth-Headsets dar: Der Hauptvorteil hierbei ist, dass man keinen ”Kabelsalat” mehr hat und mehr Bewegungsfreiheit und Komfort geniesst. Leider hat auch dies (zumindest unter Linux) einen Haken: Alle Softphones erwarten ein Linux-Sounddevice (/dev/dsp) für den Audio-IO. Für Bluetooth gibt es derzeit erst einen einzigen, noch im alpha-Stadium befindlichen, Alsa-Treiber, der ein solches Device zur Verfügung stellt. Weiterhin erfordert die Verwendung dieses Treibers Patches an Alsa und dem Kernel, was zumindest für Produktivsysteme (wie einen Lehrstuhl) inakzeptabel ist. Die Sprachqualität der von uns getesteten Headsets lässt sich generell als gut bis sehr gut zu bezeichnen. Die Qualität ist dabei unabhängig von der verwendeten Anschlussart (Klinke, USB oder Bluetooth). Will man sein Headset unter verschiedenen Betriebssystemen verwenden, ist derzeit ein Headset zum direkten Anschluss an die Soundkarte zu empfehlen, welche zudem auch meist recht günstig erhältlich sind. 70 Kapitel 9 Zusammenfassung Inhalt dieser Arbeit ist der Aufbau einer VoIP-Infrastruktur unter Verwendung von OpenSource-Komponenten. Zunächst wurde ein Überblick der Funktionsweise von VoIP, sowie der verfügbaren Protokolle gegeben, welche anschliessend auch verglichen und bewertet wurden. Nach der Schilderung der einzelnen Ziele wurden die derzeit verfügbaren OpenSource-Server vorgestellt und evaluiert, wobei sich zwei Projekte als geeignet herausgestellt haben. Im Anschluss wurde dann die Umsetzung der Ziele mit der ausgewählten Software und der verwendeten Konfiguration genau erläutert. Dabei aufgetretene Probleme wurden beschrieben und soweit möglich auch durch eigene Implementierungen/Patches gelöst. Die Server wurden sowohl in das LAN als auch in das ISDN-Netz der Universität integriert und so konfiguriert, dass die Teilnehmer aller Netze (ISDN und VoIP) erreichbar sind. Weiterhin wurden auch VoIP-basierte Verbindungen zu anderen Universitäten eingerichtet und die Erreichbarkeit der Universität des Saarlandes über VoIP mittels ENUM hergestellt. Darüber hinaus wurden auch verschiedene Endgeräte (sowohl Hardware als auch Software) von uns getestet und bewertet. Abbildung 9.1 zeigt noch einmal den gesamten Testaufbau wie er derzeit vorhanden ist: Neben den bereits vorgestellten Asterisk-Installationen am Lehrstuhl für Computergraphik und im Rechenzentrum der Universität befindet sich dort weiterhin ein Cisco CallManager (CCM). Diese Installation versorgt den Lehrstuhl Bioinformatik und befand sich bereits im Rechenzentrum, wo sie direkt über eine S2M-Schnittstelle mit der TK-Anlage verbunden war. In diese Leitung wurde dann der Asterisk-Server transparent eingeschleift, so dass die bisherige Funktionalität weiterhin gewährleistet ist. 71 KAPITEL 9. Zusammenfassung Abschliessend kann gesagt werden, dass sich die gewählten Komponenten als überaus tauglich erwiesen haben und auch genügend Potential für weitere, zukünftige Ausbauten und Erweiterungen bieten. Abbildung 9.1: Gesamter Testaufbau 9.1 Ausblick Neben den bereits erwähnten Möglichkeiten von VoIP sind für die Zukunft noch weitere Dienste denkbar. So ließe sich die reine Sprachtelefonie relativ leicht um Videotelefonie erweitern, da dies schon in den verwendeten Protokollen definiert ist. Allerdings müssten noch geeignete Endgeräte evaluiert und/oder entwickelt werden. Ein weiteres Thema, welches zusätzliche Beachtung verdient, ist eine Absicherung der VoIP-Kommunikation – vor allem die Verschlüsselung der Me- 72 9.1. Ausblick dienströme selbst. Auch hier ist dies zwar schon in den Protokollen definiert, allerdings mangelt es an geeigneten Implementierungen. Dieser Punkt wird insofern interessant, wenn man eine flächendeckende Einführung von VoIP anstreben möchte. Für diese Problemstellung sind mehrere Lösungen denkbar, diese müssten dann unter den gegebenen Bedingungen evaluiert und getestet werden. Davon unbenommen sind auch noch weitere Services wie Unified Messaging und CTI denkbar, die eine komfortable Integration von Telefoniefunktionen in den Desktop bieten können. Weiterhin sollten die bisherigen Bestrebungen der Anbindung zu anderen Universitäten über das DFN fortgesetzt werden und die so möglichen Kostenvorteile allen Nutzern der Telefonanlage wie in Kapitel 7.4 beschrieben mittels ENUM ermöglicht werden. 73 Anhang A Verwendete Konfigurationsdateien A.1 extensions.conf [general] static=yes writeprotect=yes [globals] exten = h,1,Hangup [trunk international] exten = 000Z.,1,EnumLookup(${EXTEN:3}) exten = 000Z.,2,Goto(1000) exten = 000Z.,52,Goto(000${ENUM},2000) exten = 000Z.,102,Goto(2000) exten = 000Z.,1000,SetCIDNum(+49681302${CALLERIDNUM} a) exten = 000Z.,1001,Dial(${ENUM}) exten = 000Z.,1002,SetCIDNum(${CALLERIDNUM:9 a}) exten = 000Z.,1003,Goto(2000) exten = 000Z.,1102,Busy exten = 000Z.,2000,Macro(dialout,${EXTEN}) 10 [trunk dland] exten = 00049Z.,1,EnumLookup(${EXTEN:3}) exten = 00049Z.,2,Goto(1000) exten = 00049Z.,52,Goto(000${ENUM},2000) exten = 00049Z.,102,Goto(2000) exten = 00049Z.,1000,SetCIDNum(+49681302${CALLERIDNUM} a) exten = 00049Z.,1001,Dial(${ENUM}) exten = 00049Z.,1002,SetCIDNum(${CALLERIDNUM:9 a}) 74 20 A.1. extensions.conf exten = exten = exten = 00049Z.,1003,Goto(2000) 00049Z.,1102,Busy 00049Z.,2000,Macro(dialout,00${EXTEN:5}) 30 [trunk saar] exten = 0004968.,1,EnumLookup(${EXTEN:3}) exten = 0004968.,2,Goto(1000) exten = 0004968.,52,Goto(000${ENUM},2000) exten = 0004968.,102,Goto(2000) exten = 0004968.,1000,SetCIDNum(+49681302${CALLERIDNUM} a) 0004968.,1001,Dial(${ENUM}) exten = exten = 0004968.,1002,SetCIDNum(${CALLERIDNUM:9 a}) exten = 0004968.,1003,Goto(2000) 40 exten = 0004968.,1102,Busy 0004968.,2000,Macro(dialout,00${EXTEN:5}) exten = [macro dialout] exten = s,1,Dial(Capi/@3841:${ARG1}) exten = s,2,Congestion exten = s,102,Busy [trunk kostenlos] ;Nationale und internationale 800 Nummern exten = 00800ZXXXXXX,1,SetAccount(capi kostenlos) exten = 00800ZXXXXXX,2,Macro(dialout,${EXTEN}) exten = 000800ZXXXXXX,1,SetAccount(capi kostenlos) exten = 000800ZXXXXXX,2,Macro(dialout,${EXTEN}) 50 ;Statisches Routing zur Uni Ulm (mit Public Key Verfahren) ;mit Fallback ueber ISDN falls der Teilnehmer die entsprechende ;Berechtigung hat exten = 0004973150XXXXX,1,SetAccount(iax2ulm) exten = 0004973150XXXXX,2,SetCIDNum(0681302${CALLERIDNUM} a) 60 exten = 0004973150XXXXX,3,Dial(IAX2/uni sb:[reyes]@uni ulm/${EXTEN:10}) exten = 0004973150XXXXX,4,SetCIDNum(${CALLERIDNUM:7} a) 0004973150XXXXX,5,Goto(${EXTEN},2000) exten = exten = 0004973150XXXXX,104,Busy [trunk uni] ;Zentrale (von extern 0, von intern 19) exten = 19,1,SetAccount(iax2 uni) exten = 19,2,Dial(IAX2/cogra@rz out/19) exten = 19,3,Congestion exten = 19,103,Busy 70 75 ANHANG A. Verwendete Konfigurationsdateien ;Nebenstellen der Uni exten = [2 57]XXX,1,SetAccount(iax2 uni) [2 57]XXX,2,Dial(IAX2/cogra@rz out/${EXTEN}) exten = exten = [2 57]XXX,3,Congestion exten = [2 57]XXX,103,Busy exten = [69]XXXX,1,SetAccount(iax2 uni) exten = [69]XXXX,2,Dial(IAX2/cogra@rz out/${EXTEN}) exten = [69]XXXX,3,Congestion exten = [69]XXXX,103,Busy 80 [trunk univonextern] ;Zentrale (von extern 0, von intern 19) exten = 0,1,SetAccount(iax2 univonextern) exten = 0,2,Dial(IAX2/cogra@rz out/19) exten = 0,3,Congestion exten = 0,103,Busy exten = 19,1,SetAccount(iax2 univonextern) exten = 19,2,Dial(IAX2/cogra@rz out/19) exten = 19,3,Congestion exten = 19,103,Busy 90 ;Nebenstellen der Uni [2 57]XXX,1,SetAccount(iax2 univonextern) exten = exten = [2 57]XXX,2,Dial(IAX2/cogra@rz out/${EXTEN}) exten = [2 57]XXX,3,Congestion exten = [2 57]XXX,103,Busy exten = [69]XXXX,1,SetAccount(iax2 univonextern) exten = [69]XXXX,2,Dial(IAX2/cogra@rz out/${EXTEN}) [69]XXXX,3,Congestion exten = exten = [69]XXXX,103,Busy 100 [international] ignorepat = 0 include = dland include = trunk international [dland] ignorepat = 0 include = saar include = trunk dland [saar] ignorepat = 0 include = kostenlos include = trunk saar 76 110 A.1. extensions.conf [kostenlos] ignorepat = include = include = include = include = [uni] include = include = include = 120 0 uni parkedcalls trunk kostenlos trunk iaxtel700 default intern default trunk uni [univonextern] exten = .,1,SetCallerID("*ext*${CALLERIDNAME}" .,2,Goto(univonextern2,${EXTEN},1) exten = 130 ***${CALLERIDNUM}*** ) [univonextern2] include = default include = trunk univonextern [macro stdexten] ;Rufumleitung gesetzt? exten = s,1,DBget(TARGET=CF/${MACRO EXTEN}) exten = s,2,Goto(1000) ;CallerID aus der internen DB auslesen exten = s,102,LookupCIDName exten = s,103,Dial(${ARG1},20) 140 exten = s,104,Answer exten = s,105,Wait(1) Voicemail ;Keine Antwort exten = s,106,Voicemail2(u${MACRO EXTEN}) exten = s,107,Hangup 150 exten = exten = ;Besetzt exten = exten = exten = s,204,Answer s,205,Wait(1) Voicemail s,206,Voicemail2(b${MACRO EXTEN}) s,207,Hangup s,1000,Dial(Local/${TARGET}@default) 160 [default intern] ;Notrufe exten = 110,1,Dial(${TRUNK}/@3841:0110) exten = 110,2,Congestion 77 ANHANG A. Verwendete Konfigurationsdateien exten exten exten exten exten exten exten exten exten exten exten exten exten exten exten exten = = = = = = = = = = = = = = = = 110,102,Congestion 112,1,Dial(${TRUNK}/@3841:0112) 112,2,Congestion 112,102,Congestion 0110,1,Dial(${TRUNK}/@3841:0110) 0110,2,Congestion 0110,102,Congestion 0112,1,Dial(${TRUNK}/@3841:0112) 0112,2,Congestion 0112,102,Congestion 19222,1,Dial(${TRUNK}/@3841:019222) 19222,2,Congestion 19222,102,Congestion 019222,1,Dial(${TRUNK}/@3841:019222) 019222,2,Congestion 019222,102,Congestion 170 180 ;Umwandlung ins E.164 Format 00Z.,1,Goto(00049${EXTEN:2},1) exten = exten = 0068.,1,Goto(0004968${EXTEN:4},1) 0Z.,1,Goto(00049681${EXTEN:1},1) exten = ;Rufumleitung setzen exten = *21*.,1,DBput(CF/${CALLERIDNUM}=${EXTEN:4}) exten = *21*.,2,Wait(1) exten = *21*.,3,SayDigits(${EXTEN:4}) exten = *21*.,4,Playback(vm goodbye) exten = *21*.,5,Wait(1) *21*.,6,Hangup exten = 190 ;Rufumleitung loeschen exten = *21*,1,DBdel(CF/${CALLERIDNUM}) exten = *21*,2,Wait(1) exten = *21*,3,Playback(vm goodbye) exten = *21*,4,Wait(1) exten = *21*,5,Hangup 200 ;VoiceMail Abfrage von einem fremden Anschluss exten = 9998,1,Answer exten = 9998,2,Wait(1) exten = 9998,3,VoicemailMain2 exten = 9998,4,Hangup ;VoiceMail Abfrage ohne CallerID exten = 9999/,1,Answer exten = 9999/,2,Wait(1) 78 210 A.1. extensions.conf exten = exten = 9999/,3,VoicemailMain2 9999/,4,Hangup ;VoiceMail Abfrage vom eigenen Anschluss mit CallerID exten = 9999/ Z.,1,Answer exten = 9999/ Z.,2,Wait(1) exten = 9999/ Z.,3,VoicemailMain2(s${CALLERIDNUM}) exten = 9999/ Z.,4,Hangup 220 ;Workaround fuer Cisco 7905 exten = *9999*.,1,Answer *9999*.,2,Wait(1) exten = exten = *9999*.,3,SetVar(MAILBOX=${EXTEN:6}) exten = *9999*.,4,VoiceMail2(b${MAILBOX}) exten = *9999*.,5,Hangup exten = o,1,VoiceMailMain2(${MAILBOX}) exten = o,2,Hangup ;Direkte Anwahl von iptel.org Teilnehmern **478.,1,Dial(SIP/${EXTEN:5}@iptel.org) exten = 230 [default] ;Rufnummern des Lehrstuhls ;Standardmaessig alle Nummern ueber SIP anrufen exten = 685[7 8]X,1,Macro(stdexten,SIP/${EXTEN}) ;Diese Nummer ueber Skinny anrufen exten = 68587,1,Macro(stdexten,SCCP/${EXTEN}) 240 ;Konferenz exten = 68589,1,Answer exten = 68589,2,Wait(1) exten = 68589,3,MeetMe ;Konferenz mit Angabe der Raumnummer ;(kann in dieser Form nich von der TK Anlage aus ;oder von extern gewaehlt werden) exten = 68589.,1,Answer exten = 68589.,2,Wait(1) exten = 68589.,3,MeetMe(${EXTEN:5}) 250 79 ANHANG A. Verwendete Konfigurationsdateien A.2 sip.conf [general] port = 5060 bindaddr = 0.0.0.0 context = univonextern maxexpirey=3600 defaultexpirey=120 disallow=all allow=alaw allow=ulaw allow=gsm srvlookup=yes ;dtmfmode=rfc2833 dtmfmode=inband language=de canreinvite=no 10 ; ; Lehrstuhl (6857x + 6858x) ; [68588] type=friend username=68588 mailbox=68588 md5secret=524a1f666a24d42f6ba23da1f58a6e71;68588 host=dynamic canreinvite=no dtmfmode=rfc2833 context=international callgroup=1 callerid="JOCHEM Rainer" 68588 qualify=yes accountcode=rainer amaflags=documentation language=de 80 20 30 A.3. Skript zum Abgleich der sip.conf mit einer MySQL-Datenbank A.3 Skript zum Abgleich der sip.conf mit einer MySQLDatenbank #!/usr/bin/perl # # # # # # # # # # # # # # # # Copyright (C) 2003 Maik Schmitt [email protected] sb.de This script is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 1307 USA use DBI qw(:sql types); 20 ( e ’/var/lock/md5pws’) and die "Lock file found!"; system("touch /var/lock/md5pws"); $databaseName = "DBI:mysql:asterisk"; $databaseUser = ""; $databasePw = ""; $dbh = DBI connect($databaseName, $databaseUser, $databasePw) die "Connect failed: $DBI::errstr n"; unless (open SOURCE, " ", "/etc/asterisk/sip.conf") { die "Couldn’t open sip.conf"; } unless (open DEST, " ", "/tmp/md5pws") { die "Couldn’t open tempfile"; } 30 $changed = false; 40 while ( SOURCE ) { if(/^md5secret=.*;.*$/) { $ ine = $ ; 81 ANHANG A. Verwendete Konfigurationsdateien ($a, $b) = split /=/, $ ine; ($hash, $user) = split /;/, $b; chomp($user); $stmt = "SELECT hash FROM sipusers WHERE (user=’$user’)"; die "prepare: $$stmt: $DBI::errstr"; $sth = $dbh prepare($stmt) $sth execute die "execute: $$stmt: $DBI::errstr"; @record = $sth fetchrow(); 50 $newhash = $record[0]; $sth finish(); if ( $newhash ) { if ( $newhash =˜ $hash ) { print DEST $ ; } else { $changed = true; print DEST "md5secret=$newhash;$user n"; } } else { print DEST $ ; } 60 } else { print DEST $ ; } } $dbh 70 disconnect(); if ( $changed =˜ true ) { system("mv /tmp/md5pws /etc/asterisk/sip.conf"); system("/usr/sbin/asterisk rx reload /dev/null 2 &1"); } unlink("/var/lock/md5pws"); 82 Anhang B Glossar ACD Automatic Call Distribution. Wird meist in Callcentren eingesetzt, um eine große Anzahl eingehender Anrufe gleichmäßig auf eine Anzahl von ”Agenten” zu verteilen. BRI Basic Rate Interface. Endkunden ISDN-Anschluss, bestehend aus zwei 64K Übertragungskanälen und einem 16K Kontrollkanal. CAPI Common Application Programming Interface. Internationale, standardisierte Schnittstelle mit der Anwendungen direkt mit ISDN-Hardware kommunizieren können. CTI Computer Telephony Integration. Begriff für Computerunterstütztes Telefonieren. CVS Concurrent Versioning System, dient zum Zugriff auf Quellcodeverzeichnisse. DISA Direct Inward System Access. Bietet externen Anrufern die Möglichkeit von aussen mit den Berechtigungen eines internen Benutzers auf das System zuzugreifen. DTMF Dual Tone Multi-Frequency. Findet Verwendung im Tonwahlverfahren. Hierbei werden gleichzeitig zwei Töne übertragen, einer für die Spalte und der andere für die Zeile des Rufnummernblocks des Telefons. Somit kann die gedrückte Taste eindeutig bestimmt werden. E1 Europäischer Standard für schnelle Digitalübertragungen, definiert mit 2,048 Mbit/s. Eine E1-Leitung besteht aus 31 Kanälen mit jeweils 64k Übertragunsrate. ENUM Telephone Number Mapping (RFC 2916[29], s. Kapitel 7) GPL GNU General Public License erlaubt freien Zugriff auf Software, die unter den Bedingungen der GPL veröffentlicht wurde. Sie erlaubt Nutzern, GPL Software zu kopieren, verändern und weiterzugeben. 83 ANHANG B. Glossar GUI Graphical User Interface. H.323 ITU-T Standard zur Übertragung von Multimediainhalten über paketbasierte Netze wie z.B. TCP/IP IAX / IAX2 Inter Asterisk Exchange. Asterisk-eigenes VoIP-Protokoll. Wurde speziell dazu entwickelt, um Probleme mit Firewalls und NAT zu vermeiden: verwendet lediglich einen einzigen UDP-Port für Signalisierung und Nutzdaten. ISDN Integrated Services Digital Network ist ein Standard für digitale Telefonverbindungen. Es gibt zwei Arten von ISDN: BRI und PRI. IVR Interactive Voice Response. Beschreibt ein automatisches System zur Anrufbearbeitung, bei dem der Anrufer mit einer vom Computer gesteuerten Stimme interagiert – entweder durch aufgezeichnete Sprache, oder durch vom Computer generierte Sprache. Die Interaktion findet dabei meist durch Tastendrücke auf dem Telefon statt. (siehe DTMF) LCR Least-Cost-Routing. Begriff für das Routing eines Telefonanrufs über den preiswertesten Weg. Wird üblicherweise durch eine automatisch vor die gewählte Rufnummer gesetzte Vorwahl eines günstigerern Anbieters bewerkstelligt. MD5 Message Digest Algorithm 5. Einweg Hashing-Algoritmus, der zur Eingabe einen eindeutigen 128bit-langen Hash erzeugt. MSN Multiple Subscriber Numbering. Ein ISDN-Feature das es erlaubt mehrere Rufnummern auf einer ISDN-Leitung zu vergeben so dass die auf diesem Bus angeschlossenen Geräte einzeln angerufen werden können. PBX Private Branch Exchange. Die Telefonanlage des Endkunden. PRI Primary Rate Interface. ISDN-Anschluss für Grossverbraucher. Besteht in den USA und in Japan aus 23 64K Übertragungskanälen und einem 64K Kontrollkanal. In Europa besteht ein PRI aus 30 Übertragunskanälen und einem Kontrollkanal. PSTN Public Switched Telephony Network. Das herkömmliche Telefonnetz. S2M siehe E1 SCCP Skinny Client Control Protocol. Von Cisco entwickeltes Protokoll, das in den VoIP-Produkten von Cisco Verwendung findet. SIP Session Initiation Protocol [6] T1 Nordamerikanischer Standard für schnelle Digitalverbindungen, definiert mit 1,544Mbit/s. Besteht aus 24 Kanälen mit je 64k Übertragungsrate. TK TeleKommunikation 84 TCP/IP Transmission Control Protocol/Internet Protocol. Eine Protokollsuite die zur Vernetzung von Computern dient. Findet z.B. im Internet verwendung. URI Uniform Resource Identifier. Standardbezeichnung für Ressourcen im Internet. Unified Messaging Beschreibt die Kommunikation über verschiedenste Medien unter Verwendung einer einzigen Applikation. z.B. Verwenden einer Rufnummer für ISDN, VoIP, Fax o.ä. Zaptel Zapata Telephony [35] Auch Zaptel-Devices. Bezeichnung für die von Digium produzierte Telefonhardware. 85 Anhang C Verantwortliche C.1 Maik Schmitt Installieren und Testen von openh323gk mit isdn2h323 SER versucht über sip2h323 und isdn2h323 anzubinden Installieren und testen von VOCAL Umstellung von ISDN4Linux zu CAPI Testen von Endgeräten: Cisco 7960, Cisco ATA-186 und kphone Benutzerverwaltung mit RADIUS für SER getestet Asterisk-Patch für md5secret WWW-GUI für Lehrstuhlserver (Backend) Rufnummernpläne erstellt DNS-Server für ENUM-Test installiert Installation und Konfiguration des ENUM-Servers im Rechenzentrum WWW-GUI für Studentenserver (Backend) C.2 Rainer Jochem Installieren und testen von SER Installieren und testen von Asterisk Lehrstuhlrechner zum Testsystem umgebaut mit ISDN-Karte zur Aussenanbindung 86 C.2. Rainer Jochem Anbindung von SER an Asterisk getestet Testen von Endgeräten: Cisco 7905, Snom 100 und X-Lite Testen verschiedener Headsets (USB und Bluetooth) WWW-GUI für Lehrstuhlserver (Frontend) Software-FAX mit Asterisk getestet Installation und Konfiguration des Studentenservers im Rechenzentrum WWW-GUI für Studentenserver (Frontend) Projektwebseite erstellt 87 Tabellenverzeichnis 88 2.1 Übersicht verbreiteter Audiocodecs . . . . . . . . . . . . . . 8 2.2 SIP Reply Codes . . . . . . . . . . . . . . . . . . . . . . . . 13 5.1 Besondere Extensions . . . . . . . . . . . . . . . . . . . . . . 39 Abbildungsverzeichnis 2.1 SIP-Request . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 SIP-Response . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3 SIP Rufaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 SIP Signalisierung . . . . . . . . . . . . . . . . . . . . . . . 17 2.5 SDP Signalisierung . . . . . . . . . . . . . . . . . . . . . . . 17 5.1 Ursprüngliche Installation . . . . . . . . . . . . . . . . . . . 26 5.2 Testaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.3 Format der Konfigurationsdatei . . . . . . . . . . . . . . . . . 29 5.4 Simple Groups . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.5 Inherited Option Object . . . . . . . . . . . . . . . . . . . . . 30 5.6 Complex Entity Object . . . . . . . . . . . . . . . . . . . . . 30 5.7 Globale Parameter in sip.conf . . . . . . . . . . . . . . . . . . 31 5.8 SIP-Benutzer . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.9 Einfache extensions.conf . . . . . . . . . . . . . . . . . . . . 34 5.10 capi.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.11 Funktion der Extensions . . . . . . . . . . . . . . . . . . . . 37 5.12 Das Include-Statement . . . . . . . . . . . . . . . . . . . . . 40 5.13 Berechtigungsstufen . . . . . . . . . . . . . . . . . . . . . . 40 5.14 Allgemeine Parameter in voicemail.conf . . . . . . . . . . . . 41 89 ABBILDUNGSVERZEICHNIS 90 5.15 Einrichten der Voicemailboxen . . . . . . . . . . . . . . . . . 42 5.16 Konferenzräume . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.17 Beispiel für die Verwendung von md5secret . . . . . . . . . . 44 5.18 Screenshot SIP-UI . . . . . . . . . . . . . . . . . . . . . . . 45 6.1 Testaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.2 Modifiktion der ser.cfg . . . . . . . . . . . . . . . . . . . . . 49 6.3 Dialplan zur Einwahl ISDN - SER . . . . . . . . . . . . . . . 50 6.4 SRV-Record . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.1 zapata.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.2 Rufablauf bei ENUM-Anfragen . . . . . . . . . . . . . . . . 57 7.3 Umformatieren der Rufnummer für ENUM-Anfrage . . . . . 58 7.4 ENUM-Anfrage . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.5 Nicht erfolgreicher VoIP-Anruf . . . . . . . . . . . . . . . . . 59 7.6 Anruf über das Festnetz . . . . . . . . . . . . . . . . . . . . . 59 7.7 Wahl von Festnetzrufnummern . . . . . . . . . . . . . . . . . 60 7.8 Vorwahl, um ENUM-Anfrage zu umgehen . . . . . . . . . . . 60 7.9 Erweiterung einer TK-Anlage um ENUM-Funktionalität . . . 61 7.10 named.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.11 db.myenum . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.1 Cisco 7960 IP-Telefon . . . . . . . . . . . . . . . . . . . . . 65 8.2 Cisco 7905 IP-Telefon . . . . . . . . . . . . . . . . . . . . . 65 8.3 Cisco 7905 Webinterface . . . . . . . . . . . . . . . . . . . . 66 8.4 Snom 100 IP-Telefon . . . . . . . . . . . . . . . . . . . . . . 66 8.5 Snom 100 Webinterface . . . . . . . . . . . . . . . . . . . . . 67 ABBILDUNGSVERZEICHNIS 8.6 Cisco ATA-186 Webinterface . . . . . . . . . . . . . . . . . . 68 8.7 Cisco ATA-186 . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.8 Digium IAXy . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.9 Kphone Softphone . . . . . . . . . . . . . . . . . . . . . . . 69 8.10 X-Lite Softphone . . . . . . . . . . . . . . . . . . . . . . . . 70 9.1 72 Gesamter Testaufbau . . . . . . . . . . . . . . . . . . . . . . 91 Literaturverzeichnis [1] Regulierer bereitet das Feld für Internet-Telefonie Aus: Heise-Newsticker vom 17.01.2004 Autor: Sascha Mattke http://www.heise.de/newsticker/data/psz-17.01.04-002/ [2] T-Com will Telefon-Festnetz komplett auf Internet umstellen Aus: Heise-Newsticker vom 17.01.2004 Autor: Sascha Mattke http://www.heise.de/newsticker/data/psz-17.01.04-003/ [3] Audio Codecs http://www.cs.columbia.edu/˜hgs/audio/codecs.html [4] IETF iLBC draft http://www.ietf.org/internet-drafts/draft-ietf-avt-ilbc-codec-04.txt [5] Speex Codec Homepage http://www.speex.org/ [6] RFC 3261, SIP http://www.ietf.org/rfc/rfc3261.txt?number=3261 [7] RFC 2327, SDP http://www.ietf.org/rfc/rfc2327.txt?number=2327 [8] RFC 2327, RTP http://www.ietf.org/rfc/rfc1889.txt?number=1889 [9] 3rd Generation Partnership Project (3GPP) http://www.3gpp.org/ [10] 3GPP TS 24.228 V5.0.0, “Signalling flows for the IP multimedia call control based on SIP and SDP; Stage 3 (Release 5)”, March 2002. http://www.3gpp.org/ftp/Specs/archive/24_series/24.228/ [11] RFC 2663 , NAT http://www.ietf.org/rfc/rfc2663.txt?number=2663 [12] International Telecommunication Union (ITU) http://www.itu.int/ 92 LITERATURVERZEICHNIS [13] Ethereal Packet Sniffer http://www.ethereal.com [14] RFC 3489, STUN http://www.ietf.org/rfc/rfc3489.txt?number=3489 [15] GNU Bayonne http://www.gnu.org/software/bayonne/bayonne.html [16] Vovida Open Communication Application Library (VOCAL) http://www.vovida.org/ [17] iptel.org http://www.iptel.org [18] FhG Fokus http://www.fokus.fraunhofer.de/ [19] Free World Dialup http://www.fwd.pulver.com/ [20] Application Agent http://www.iptel.org/aa/ [21] Asterisk PBX http://www.asterisk.org/ [22] Digium Inc. http://www.digium.com/ [23] Asterisk: A Bare-Bones VoIP Example Aus: O’Reilly, ONLamp.com vom 03.07.2003 Autor: John Todd http://www.onlamp.com/pub/a/onlamp/2003/07/03/asterisk.html?page=1 [24] VCORE – Virtual Courseroom Environment http://graphics.cs.uni-sb.de/VCORE/recordings.html [25] ISDN2H.323 http://www.telos.de/linux/H323/default_e.htm [26] AVM Linux-Portal http://www.avm.de/de/Service/AVM_Service_Portale/Linux/index.php3 [27] Asterisk Software-Fax Modul http://www.opencall.org [28] CAPI-Unterstützung für Asterisk http://www.junghanns.net/asterisk/ [29] RFC 2916, ENUM http://www.ietf.org/rfc/rfc2916.txt?number=2916 93 LITERATURVERZEICHNIS [30] ENUM-Pilotprojekt des DENIC http://www.denic.de/de/enum/index.html [31] TE410P – Vierfach E1-Karte http://www.digium.com/index.php?menu=wildcard_te410p [32] KPhone – A voice over internet phone http://www.wirlab.net/kphone/ [33] VIC - Video Conferencing Tool http://www-nrg.ee.lbl.gov/vic/ [34] Xten Networks http://www.xten.com/ [35] Zapata Telephony http://www.zapatatelephony.org/ [36] IP Telephony Cookbook Verschiedene Autoren http://www.informatik.uni-bremen.de/˜prelle/terena/cookbook/main/ [37] VoIP-Info.org Wiki verschiedener Autoren http://www.voip-info.org 94