Benutzer-Werkzeuge

Webseiten-Werkzeuge

voipworkshop:voip-slides

Dies ist eine alte Version des Dokuments!


View page as slide show

KNF-Workshop: VoIP mit Asterisk

  • Klaus Franken
    • Site: klaus, mail@klaus.franken.de
    • Klaus.Franken@StrukturPunkt.de
    • IT
    • Web
    • VoIP

Links / Doku

Was ist Telefonie ?

  • Punkt-zu-Punkt Audio-Übertragung
    • bidirektional
    • in Echtzeit
  • weltweite Vermittlung
  • weltweit einheitliches Nummernsystem

Wer sagt, dass es was mit ISDN, GSM, UMTS oder Analogleitungen zu tun haben muss?

Was ist VoIP ?

  • „Voice over IP“
  • Telefonie, aber über „Internet-Technik“
  • ⇒ „Internet-Telefonie“

Vorteile von VoIP

Vorteile von VoIP

  • Konvergenz der Netze
  • nur noch eine Verkabelung
  • Standortunabhängig
  • Providerunabhängig(er)
  • mit eigener TK-Anlage: volle Kontrolle was, wann, wo, bei wem, wie klingelt
  • offen / OpenSource
  • integriert sich in „normale“ IT
  • Kosten ?

Nachteile von VoIP

  • geht nicht ohne Strom
  • geht nicht ohne Internet (LAN)
  • bei LAN/WAN-Einschränkung ⇒ Störung bei VoIP
  • Rufnummerportierung nötig?
  • bei Störungen viele potentielle Quellen
  • Teilnehmer akzeptieren keine Einschränkung :!:

Wie kommt man zu VoIP ?

  • grösstes Hemmnis:
    • beide Welten parallel
    • Übergang in klassisches Telefonnetz
  • „Black-Box-Lösungen“
    • Fritz-Box
    • Angebote einiger (Internet)-Provider
  • eigener Server mit ISDN-Karte
  • ⇒ VoIP-Provider:
    • stellt Telefonnummer (Ortsnummer)
    • stellt Übergang in klassisches Telefonnetz
    • rechnet Kosten ab

Wie kommt man zu VoIP ? (2)

Hardware:

  • PC/Laptop mit VoIP-Software (Softphone, siehe softphone)
    • kann leicht Störungen, z.B. Echo geben
  • VoIP-Telefon
  • VoIP-Telefonanlage
  • Übergang ins öffentliche Netz
    • oder nur lokales Telefonnetz ⇐ für ersten Test

VoIP Netzanforderungen

Bandbreite:

  • je nach Codec
  • gut: 64 kbit/sec
  • mit allen drum&dran: ca. 100 kbit/sec bidirektional pro Gespräch
  • Flaschenhals bei A-DSL: Upload

VoIP Netzanforderungen 2

Qualität:

  • Latenzzeit (Paketverzögerung): max 100ms (theoretisch 300ms)
  • nur wenig Paketverluste: 2-5%
  • QOS bei gleichzeitiger Nutzung

VoIP-Protokolle

  • SIP: Session Initiation Protocoll
    • RTP: Realtime Protocoll
      • macht bei NAT Ärger
  • STUN: bei NAT benutzen (nur bei NAT !)
  • H.323
  • IAX (Inter-Asterisk-eXchange Protokoll)
    • Version 2 (IAX2) nur noch üblich

VoIP Codecs

  • Was ist ein Codec?
    • Audio-Digitalisierung
      • welche Frequenzen
      • Anzahl/Grösse Pakete
      • Komprimierung
  • Muss vom Endgerät unterstützt werden
  • Umwandlung z.T. teuer (Rechenleistung)

VoIP Codecs Beispiele

  • GSM (13,3 Kbps)
  • G.711 a/u ⇔ alaw/ulaw (64 Kbps)
    • Europa: alaw
    • entspricht ISDN
  • iLBC (13,3 bis 15 Kbps)
    • rechenintensiv
    • Skype benutzt (nicht offene) Variante

Was ist eine Telefonanlage?

  • stellt Verbindung her zwischen externen Anruf und internen Telefon(en)
  • und umgekehrt
  • leitet Audio-Daten weiter

Wer sagt, dass das Hardware sein muss?

Wer sagt, dass das was mit ISDN, DECT, GSM oder Analogleitungen zu tun haben muss?

Vokabel:

  • PBX (Private Branch Exchange)

Was ist Asterisk?

  • eine Telefonanlage :!:
  • ein Stück Software

Was heisst "Asterisk" ?

*

Asterisk: Voraussetzungen

Asterisk Installieren

  • warum selber übersetzen?
    • Debian/Fedora-Pakete meist veraltet
    • es gab z.T. Sicherheitsprobleme
    • weils einfach ist
  • welche Version?
    • Stabil: 1.4

Asterisk Abhängigkeiten

Benötigte Pakete:

  • apt-get install openssl openssl-devel zlib zlib-devel krb5-devel ncurses-devel make gcc gcc-c++
    • (Fedora)
  • apt-get install gcc g++ manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc libreadline5-dev make openssl
    • (Debian)
    • „einfacher:“ apt-get install build-essential libreadline5-dev

Asterisk Compilieren

Download, Compile, Install:

cd /usr/src
wget http://ftp.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz
tar xvzf asterisk-1.4-current.tar.gz
cd asterisk-1.4.21.1/ (oder was auch immer …)
./configure
make
make install

Unter /etc/asterisk/ müssen diverse Konfigurationsdateien vorhanden sein, am einfachsten mit „make samples“ (s.u.) erstellen lassen. :!:

Asterisk optionale Dinge

Für Beispiel-Konfigfiles:

make samples

Deutsche Sprachdateien:

  • cd /usr/src
  • ast_prompts_de_v2_0.tar.gz von http://www.beronet.net/
  • tar xvf ast_prompts_de_v2_0.tar
  • cd ast_prompts_de_v2_0/var/lib/asterisk/sounds
  • cp -av * /var/lib/asterisk/sounds
  • cd /var/lib/asterisk/sounds
  • chmod -R 644 de/ digits/de/ phonetic/de/ letters/de/
  • vi /etc/asterisk/sip.conf
    [general]
    ...
    language=de
  • Alternative pro Call:
    • vi /etc/asterisk/extensions.conf
      • exten ⇒ 2200,1,Set(LANGUAGE()=de)

Ohne deutsche Sprachdateien Probleme beim Mailbox-System. Es wurde versucht Datei „digits/1F.ulaw“ bzw „1F.gsm“ abzuspielen, die es aber nicht gibt (im Standard).

Asterisk Starten und Überwachen

  • Starten (als root):
    asterisk
  • „console“ und test:
    asterisk -r
    core set verbose 9
  • Loggen: messages wie in CLI
    • /etc/asterisk/logger.conf
      • messages ⇒ notice,warning,error,verbose
    • Logfile: /var/log/asterisk/messages

Asterisk Praxis 1

Ziel: Jedes Team eigener Asterisk-Server (noch ohne Clients).

Asterisk Terminologie

Channels: die Verbindung zwischen zwei Punkten (in unserem Fall sind das meistens menschliche Gesprächsteilnehmer). Es gibt folgende Channel-Arten:

  • SIP
  • IAX
  • H.323
  • mISDN ….

Asterisk Terminologie (2)

Die Unterscheidung der Begriffe Peer, User und Friend ist in der Asterisk-Dokumentation nicht immer leicht verständlich dargestellt und wird daher auch teilweise falsch auf manchen Webseiten wiedergegeben. Die folgende Tabelle zeigt die jeweiligen Funktionen:

  • Asterisk ⇐ User
  • Asterisk ⇒ Peer
  • Asterisk ⇔ Friend

Ein Peer kann also nur angerufen werden, ein User nur anrufen und ein Friend kann beides.

Asterisk Terminologie (3)

  • Extensions: die angerufene Nummer (engl. „Nebenstelle“)
  • extensions.conf: Dialplan (Wählplan)
    • eine Art BASIC-Script
  • Context: es kann mehrere Abschnitte geben
    • Default: default
    • man kann z.B. ein SIP-Anschluss einem anderen Context zuweisen, dann anderer Diaplan
    • man kann im Dialplan Context wechseln

Asterisk Administration

  • asterisk -rx "core set verbose 9" # Verbose-Level hochsetzen
  • asterisk -rx "module reload" # lädt alle Konfigfiles neu ein
  • asterisk -rx "restart gracefully" # startet neu falls kein Channel geöffnet
  • asterisk -rx "sip show channels" # zeigt aktive Channels
  • asterisk -rx "sip show peers" # zeigt alle Peers
  • asterisk -rx "iax2 set debug" # iax-Protocoll debuggen
  • asterisk -rx "iax2 set debug off" # iax-Protocoll nicht mehr debuggen
  • asterisk -rx "dialplan show 123456@strukturpunkt_out" # Zeige dialplan für extension@context (was wäre wenn…)

Hallo Welt

Ziel: Asterisk mit zwei SIP-Clients x001 und x002, die sich gegenseitig anrufen können

Hallo Welt (2)

  • /etc/asterisk/sip.conf
    [0001]
    type=friend
    context=default
    secret=1234
    host=dynamic
    canreinvite=no # wegen NAT/kein NAT
    
    
    [0002]
    type=friend
    context=default
    secret=1234
    host=dynamic
    canreinvite=no # wegen NAT/kein NAT

Hallo Welt (3)

  • /etc/asterisk/extensions.conf
    [default]
    include => demo; im Echtsystem entfernen!
    
    exten => 0001,1,Dial(SIP/0001)
    exten => 0001,2,Hangup()
    exten => 0002,1,Dial(SIP/0002)
    exten => 0002,2,Hangup()

Syntax:

exten => Extension,Priorität,Applikation

Hallo Welt Zusammenfassung

  • /etc/asterisk/: Konfiguration
  • sip.conf: SIP-Clients definieren
  • extensions.conf: Wählplan (Dialplan)
  • asterisk -rx "module reload"
    • Konfiguration neu einlesen

:!: Fehlermeldungen beachten, bei Fehler keine Aktivierung! :!:

⇒ Praxis

extensions.conf

Eine „Programmzeile“ besteht aus:

  • [context]
  • extension
    • „Nebenstelle“
    • die gewählte Nummer
  • Priorität
    • beginnt immer bei „1“ und muss einzeln hochgezählt werden (1,2,3,…)
  • Kommando und Parameter

Die nächsten Schritte

  • extensions.conf vereinfachen:
    • Priorität „n“ ⇔ „Zeile vorher+1“
    • mit regex für 1nnn arbeiten ⇒ eine Zeile
      ; alle 4 stelligen Nr. mit 1nnn intern zustellen
      exten => _1XXX,1,SetCallerID(BlaFasel)
      exten => _1XXX,n,Dial(SIP/${EXTEN})
      exten => _1XXX,n,Hangup
    • Templates (s. das-asterisk-buch.de)
  • Sammelruf s.u.
  • Anrufbeantworter/Voicemail: s.u.
  • externe Anbindung:
    • externe SIP-Einwahl s.u.
    • externe SIP-Rauswahl s.u.
    • externe IAX-Registration s.u.
    • externe IAX-Rauswahl s.u.

Dialplan Beispiel

exten => 0099,1,Set(e1=0001)
exten => 0099,n,Set(e2=0002)
exten => 0099,n,Dial(SIP/${e1},5)
exten => 0099,n,Playback(transfer)
exten => 0099,n,Dial(SIP/${e2},5)
exten => 0099,n,Dial(SIP/${e1},5)
exten => 0099,n,Gosub(testMenu,s,1)
exten => 0099,n,Playback(auth-thankyou)
exten => 0099,n,Hangup()

[testMenu]
exten => s,1,Background(demo-instruct)
exten => s,n,Return()
exten => 1,1,Playback(transfer)
exten => 1,n,Dial(SIP/0001,5)
exten => 1,n,Return()
exten => 2,1,Playback(transfer)
exten => 2,n,Dial(SIP/0002,5)
exten => 2,n,Return()

externe SIP Einwahl

Vor.: externer SIP-Provider, Daten

  • Servername, z.B. sip.provider.de
  • Benutzername
  • Passwort

sip.conf:

register => Benutzer:Passwort@sip.provider.de/1001

1001: Ziel-Extension

externe SIP Rauswahl

Vor. externer SIP-Provider

sip.conf:

[ext-sip-account]
type=friend
context=default (FIXME)
username=Benutzer
fromuser=Benutzer
secret=Passwort
host=sip.provider.de
fromdomain=sip.provider.de
qualify=yes
insecure=very
nat=yes

extensions.conf

; exern mit Vorwahl
exten => _0.,n,Dial(SIP/${EXTEN}@ext-sip-account)
; extern ohne Vorwahl
exten => _ZX.,n,Dial(SIP/0911${EXTEN}@ext-sip-account)

externe IAX Einwahl

  • /etc/asterisk/iax.conf
    register =>   Benutzer:Password@iax.simply-connect.de
    ...
    [Benutzer]
    type=user
    username=Benutzer
    host=iax.simply-connect.de
    secret=Password
    ; wird an die Extension "Benutzer" weitergeleitet
  • /etc/asterisk/extensions.conf
    ; Anruf (aus iax.conf) an SIP-Account leiten:
    exten => Benutzer,1,Goto(1001,1)
    exten => Benutzer,n,Hangup

externe IAX Rauswahl

  • /etc/asterisk/sip.conf
    [1001]
    ...
    context=context-1001
  • /etc/asterisk/extensions.conf
    [context-1001]
    ; extern ohne Vorwahl
    exten => _ZX.,1,SetCallerID(StrukturPunkt/Franken)
    exten => _ZX.,n,Dial(IAX2/Benutzer:Password@iax.simply-connect.de/0911${EXTEN})
    exten => _ZX.,n,Hangup

Voicemail

  • /etc/asterisk/voicemail.conf
    [general]
    format=wav
    
    1001 => 1001,Klaus Franken,Klaus.Franken@StrukturPunkt.de,,serveremail=Klaus.Franken@StrukturPunkt.de
  • /etc/asterisk/extensions.conf
    exten => 1001,1,Dial(SIP/1001,20)
    ; nach 20 Sek. auf Voicemail leiten:
    exten => 1001,n,VoiceMail(1001)
    exten => 1001,n,Hangup()
     
  • /etc/asterisk/extensions.conf
    ; voicemail anhören:
    exten => 9000,1,VoiceMailMain(${CALLERID(num)},s)

Sammelruf

exten => 9999,3,Dial(SIP/1000&SIP/1001,20)

VoIP drahtlos ?

Warum nicht WLAN benutzen?

  • vorhandene Infrastruktur benutzen
  • Roaming einfach über verschiedene Access-Points
  • gute Verschlüsselung
  • unschädlicher als DECT (:?:)

VoIP drahtlos ?

Warum nicht WLAN benutzen?

Weils nicht zuverlässig klappt:

  • VoIP-WLAN Geräte unzuverlässig
  • kleine WLAN-Störungen fallen sofort auf
  • WLAN ist ohne weitere Eingriffe nicht für Echtzeit ausgelegt

Aber es gibt VoIP-DECT Geräte.

Offene Punkte

Permalink voipworkshop/voip-slides.1258116648.txt.gz · Zuletzt geändert: 13.11.2009 12:50 von kfr

oeffentlich