Benutzer-Werkzeuge

Webseiten-Werkzeuge


lager:oeff_netze:voip_mjsip

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
lager:oeff_netze:voip_mjsip [2015/02/17 14:34] richardlager:oeff_netze:voip_mjsip [2025/11/19 16:15] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 4: Zeile 4:
 ===== Überblick zur Übung ===== ===== Überblick zur Übung =====
  
-Der grundsätzliche Netzaufbau wird im folgenden Bild dargestellt. Es handelt sich um zwei Clients auch UA((UA: User Agent))genannt und einem Server auch SIP-Proxy oder kurz Proxy bezeichnet. +Der grundsätzliche Netzaufbau wird im folgenden Bild dargestellt. Es handelt sich um zwei Clients auch UA((UA: User Agent)) (hier als Softphone also als PC-Software) genannt und einem Server auch SIP-Proxy oder kurz Proxy bezeichnet. 
 {{ :lager:oeff_netze:bilder:w02-voip-laboraufbau.png | Laboraufbau}} {{ :lager:oeff_netze:bilder:w02-voip-laboraufbau.png | Laboraufbau}}
  
-Die Kommunikation ist in zwei Phasen unterteilt. +Im Ordner ''/home/keinpasswort/tools/mjsip/'' liegen alle notwendigen Scripte und Konfigurationsdateien.
-  - Registrierung (Anmeldung am Proxy) +
-  - Call-Auf-/Abbau (eigentliches Telefonat)+
  
-Die gesamte Anwendung ist so aufgebaut, dass sie auf einem PC laufen kann. Allerdings werden dann nur ''localhost'' IP-Adressen verwendet ((''localhost''-IP-Adressen aus dem Bereich 127.0.0.0/24)). Realistischer ist es allerdings die UAs und den Proxy auf jeweils unterschiedlichen PCs zu betreiben.+In den jeweiligen Ordnern ''proxy'' und ''ua'' befinden sich Start-Scripte (mit der Endung ''.sh'') und Unterordner für die Konfiguration ''config''
 + 
 +Das gesamte Paket ist so aufgebaut, dass sie auf einem PC laufen kann. Allerdings werden dann nur ''localhost'' IP-Adressen verwendet ((''localhost''-IP-Adressen aus dem Bereich ''127.0.0.0/24'')). Realistischer ist es allerdings die UAs und den Proxy auf jeweils unterschiedlichen PCs zu betreiben.
  
 ^ Netzelement ^ ''localhost''-Adresse ^ Port ^ ^ Netzelement ^ ''localhost''-Adresse ^ Port ^
Zeile 18: Zeile 18:
 | Bob | 127.0.0.1 | 5080  | | Bob | 127.0.0.1 | 5080  |
  
-HINWEIS: Der Standard-Port für SIP ist 5060. Die beiden Ports 5070 bzw. 5080 für die UAs werden verwendet, damit alle Netzelement lokal auf einem PC arbeiten können.+HINWEIS: Der Standard-Port für SIP ist ''5060''. Die beiden Ports ''5070'' bzw. ''5080'' für die UAs werden verwendet, damit alle Netzelement lokal auf einem PC arbeiten können.
  
-{{:lager:oeff_netze:mjsip.tar.gz|DOWNLOAD}}+Die Kommunikation ist in zwei Phasen unterteilt. 
 +  - Registrierung (Anmeldung am Proxy) 
 +  - Call-Auf-/Abbau (eigentliches Telefonat)
  
  
Zeile 26: Zeile 28:
 ===== Der mjsip SIP-Proxy ===== ===== Der mjsip SIP-Proxy =====
  
-Der Proxy wird über die Datei ''proxy.sh'' gestartet. +==== Wichtige Proxy-Dateien ==== 
 +Der Proxy liegt im Unterordner ''proxy'' wird dort über die Datei ''proxy.sh'' gestartet. (ggf. muss noch per ''cd <ORDNER>'' ((cd: **c**hange **d**irectory)) gewechselt werden). ''proxy.sh'' ist bereits als ausführbar markiert((ausführbar machen durch: ''chmod +x <DATEINAME>''))
 <code>./proxy.sh</code> <code>./proxy.sh</code>
  
 Im Unterordner ''config'' befinden sich die Konfigurationsdateien. Der Proxy-Server selbst wird in der Datei ''server.cfg'' konfiguriert. Die User können in ''aaa.db'' bzw. ''user.db'' angelegt werden. Im Unterordner ''config'' befinden sich die Konfigurationsdateien. Der Proxy-Server selbst wird in der Datei ''server.cfg'' konfiguriert. Die User können in ''aaa.db'' bzw. ''user.db'' angelegt werden.
  
-Die im zip-Archive enthaltene Datei ''config/mjsip.cfg.txt'' enthält eine ausführliche Beschreibung der einzelnen Parameter.+^ Datei ^ Aufgabe ^ 
 +| ''proxy.sh'' | Startscript für den Proxy verweist auf die ''config/server.cfg''
 +| ''config/server.cfg'' | Konfigurationsdatei für den Proxy | 
 +| ''config/aaa.db'' | Nutzerdatenbank mit Benutzernamen und Passwörtern | 
 +| ''config/user.db'' | Enthält angemeldete Nutzern und ist zunächst leer | 
 + 
 + 
 +==== Konfiguration des Proxy ==== 
 +Die Datei ''config/mjsip.cfg.txt'' enthält eine ausführliche Beschreibung der einzelnen Parameter.
 Vertiefender Hinweis: Auf der ''mjsip''-Homepage findet man unter dem Menüpunkt ''Dokumentation'' ein Tutorial-PDF, in dem einige Zustandsdiagramme gezeigt werden. Vertiefender Hinweis: Auf der ''mjsip''-Homepage findet man unter dem Menüpunkt ''Dokumentation'' ein Tutorial-PDF, in dem einige Zustandsdiagramme gezeigt werden.
 Hier die wichtigsten Parameter für die ''server.cfg'' und deren Bedeutung: Hier die wichtigsten Parameter für die ''server.cfg'' und deren Bedeutung:
Zeile 38: Zeile 49:
 | ''host_port'' | ''host_port'' ist der lokal genutzt Port | ''host_port=5060'' | | ''host_port'' | ''host_port'' ist der lokal genutzt Port | ''host_port=5060'' |
 | ''default_transport_protocols'' | Protokoll auf Schicht 4; also TCP bzw. UDP; es können auch beide genutzt werden | ''transport_protocols=udp'' | | ''default_transport_protocols'' | Protokoll auf Schicht 4; also TCP bzw. UDP; es können auch beide genutzt werden | ''transport_protocols=udp'' |
 +| ''expires'' | Zeit in Sekunden nach der sich ein UA erneut anmelden muss (sogenanntes ''REREGISTER''); vgl. ''Contact parameter: expires=100\r\n''| ''expires=10'' |
 | ''call_log'' | Aktiviert das Speichern von Signalisierungsinformationen | ''call_log=yes'' | | ''call_log'' | Aktiviert das Speichern von Signalisierungsinformationen | ''call_log=yes'' |
 | ''domain_names'' | Domains bzw. IP-Adressen, die der Proxy nutzen soll | ''domain_names=example.com example.net 127.0.0.2'' | | ''domain_names'' | Domains bzw. IP-Adressen, die der Proxy nutzen soll | ''domain_names=example.com example.net 127.0.0.2'' |
Zeile 51: Zeile 63:
 | ''log_path'' | Pfad für die ''log''-Dateien | ''log_path=log'' | | ''log_path'' | Pfad für die ''log''-Dateien | ''log_path=log'' |
  
-Die User werden in der Datei aaa.db (s. Parameter ''authentication_db'') eingerichtet. Die Syntax sieht wie folgt aus:+Die User werden in der Datei ''aaa.db'' (s. Parameter ''authentication_db'') eingerichtet. Die Syntax sieht wie folgt aus:
  
 ''user= 100@DOMAIN''\\ ''user= 100@DOMAIN''\\
Zeile 74: Zeile 86:
  
  
-===== mjua-Client =====+===== Der mjua-Client =====
  
 Aus dem ''mjsip''-Projekt stammt ebenfalls der Client ''mjua'' ((ua: User Agent)). Dieser ist mit einer sehr spartanischen GUI ausgestattet, so dass nur einfache Calls möglich sind. Aufgerufen wird der ''ua'' über die folgenden Befehle: Aus dem ''mjsip''-Projekt stammt ebenfalls der Client ''mjua'' ((ua: User Agent)). Dieser ist mit einer sehr spartanischen GUI ausgestattet, so dass nur einfache Calls möglich sind. Aufgerufen wird der ''ua'' über die folgenden Befehle:
  
-**ALICE**:+==== Wichtige Client-Dateien ==== 
 +Der Client liegt im Unterordner ''ua'' wird dort über die Datei ''alice.sh'' bzw. ''bob.sh'' gestartet. (ggf. muss noch per ''cd <ORDNER>'' ((cd: **c**hange **d**irectory)) gewechselt werden). ''proxy.sh'' ist bereits als ausführbar markiert((ausführbar machen durch: ''chmod +x <DATEINAME>'')).  
 +<code>./alice.sh</code> 
 +bzw.  
 +<code>./bob.sh</code> 
 + 
 +Will man eine eigene Konfigurationsdatei (hier: ''myconfig.cfg'' der Pfad muss relativ angegeben werden)verwenden, so kann dies über diesen Aufruf geschehen: 
 +<code>uaw.sh -f myconfig.cfg</code> 
 + 
 +Im Unterordner ''config'' befinden sich die Konfigurationsdateien. Es existieren zwei Beispiel-Konfigurationen für ''Alice'' und ''Bob'' in den Dateien ''alice.cfg'' bzw. ''bob.cfg''
 + 
 +Die folgende Tabelle enthält alle wichtigen Dateien und die jeweilige Aufgabe. 
 +^ Datei ^ Aufgabe ^ 
 +| ''alice.sh'' | Startscript für den ''Alice''-UA verweist auf die ''config/alice.cfg''
 +| ''bob.sh'' | Startscript für den ''Bob''-UA verweist auf die ''config/bob.cfg''
 +| ''config/alice.cfg'' | Konfigurationsdatei für den Proxy | 
 +| ''config/bob.cfg'' | Nutzerdatenbank mit Benutzernamen und Passwörtern | 
 +| ''config/buddy.lst'' | Enthält die bekannten ''Buddies'' für beide Clients, also die Freundesliste | 
 + 
 +==== Konfiguration der UAs ==== 
 +Die Konfigurationsdateien sind so vorbereitet, dass sich die Clients ''Alice'' und ''Bob'' (auf einem PC) gegenseitig über den Proxy anrufen können. Diese Konfigurationen können als Ausgangspunkt für eigene Konfigurationen dienen, bei denen z.B. alle Netzelemente auf unterschiedlichen PC laufen. 
 +HINWEIS: Vor allem die IP-Adressen als Domänen sind hier anzupassen. 
 + 
 +Die Datei ''config/mjsip.cfg.txt'' enthält eine ausführliche Beschreibung der einzelnen Parameter. 
 + 
 +Hier die wichtigsten Parameter für die UAs ''config/alice.cfg'' bzw. ''config/bob.cfg'' und deren Bedeutung: 
 + 
 +^Parameter ^Bedeutung ^Beispiel ^ 
 +| ''host_port'' | ''host_port'' ist der lokal genutzt Port | ''host_port=5060''
 +| ''transport_protocols'' | Protokoll auf Schicht 4; also TCP bzw. UDP; es können auch beide genutzt werden | ''transport_protocols=udp''
 +| ''display_name'' | Selbstvergebener Name, der im Client angezeigt wird und dem Anrufer signalisiert wird; vgl. ''FROM''-Feld  | ''user=Alice-DISPLANAME''
 +| ''user'' | Ist der sogenannte AOR((AOR: address of record; besteht aus dem Benutzername und der Domain )) und wird für das Feld ''contact'' im ''SIP''-Protokoll genutzt | ''user=Alice''
 +| ''proxy'' | Muss mit einer im Proxy konfigurierten Domäne passen; im Labor die IP-Adresse des Servers; vgl. ''domain_names'' in der Proxy-Konfiguration | ''auth_realm=127.0.0.2''
 +| ''auth_user'' | Muss zu einem im Proxy konfigurierten Benutzer passen | ''user=alice''
 +| ''auth_realm'' | Muss mit einer im Proxy konfigurierten Domäne passen; im Labor die IP-Adresse des Servers; vgl. ''domain_names'' in der Proxy-Konfiguration | ''auth_realm=127.0.0.2''
 +| ''auth_passwd'' | Muss zu einem im Proxy konfigurierten Benutzer passen | ''auth_passwd=pippo''
 +| ''do_register'' | Der Client führt zunächst ein ''REGISTER'' durch | ''do_register=yes''
 +| ''keepalive_time'' | Der Client sendet UDP-Pakete an den OUTBOUND-Proxy sofern dieser vorhanden ist | ''keepalive_time=60''
 +| ''buddy_list_file'' | Enthält die bekannten ''Buddies'' für beide Clients, also die Freundesliste | ''buddy_list_file=config/buddy.lst''
 +| ''audio'' | Aktiviert die Audio-Übertragung | ''audio=yes''
 +| ''video'' | Aktiviert die Video-Übertragung | ''video=no''
 +| ''bin_rat'' | Pfad zum RAT-Audio-Übertragungsprogramm ((RAT: Robust Audio Tool)) | ''bin_rat=rat''
 +| ''bin_vic'' | Pfad zum VIC-Video-Konferenzprogramm ((VIC: Video Conferencing Tool)) | ''bin_vic=vic''
 +| ''debug_level'' | Es werden zusätzliche Inforamtionen gespeichert; 0 bedeutet deaktiviert; je höher, umso mehr Informationen werden gespeichert | ''debug_level=3''
 +| ''log_path'' | Pfad für die ''log''-Dateien | ''log_path=log''
 +Vertiefender Hinweis: Auf der ''mjsip''-Homepage findet man unter dem Menüpunkt ''Dokumentation'' ein Tutorial-PDF, in dem einige Zustandsdiagramme gezeigt werden. 
 + 
 +==== Audio- / Videokonfiguration ==== 
 +Die Audio- bzw. Video-Übertragung wird mit den folgenden Parametern eingestellt. Geregelt ist die im [[https://tools.ietf.org/html/rfc4566 | RFC 4566]] im sogenannten ''SDP'' ((SDP: Session Description Protocol)) eine Unterprotokoll für SIP.  
 +Innerhalb des ''SDP'' werden die Parameter für das RTP ((RTP: **R**eal-Time **T**ransport-**P**rotocol)) festgelegt. Eine Liste mit möglichen Codecs findet sich [[http://de.wikipedia.org/wiki/Real-Time_Transport_Protocol| hier (deutsch)]] und [[http://en.wikipedia.org/wiki/RTP_audio_video_profile| hier (englisch)]] 
 <code> <code>
-./uaw.sh -f config/a.cfg+# AUDIO CONFIGURATION 
 +media=audio 3000 rtp/avp   
 +media_spec=audio 0 PCMU 8000 160 
 +media_spec=audio 8 PCMA 8000 160 
 +# Parameter-Description 
 +
 +# Parameter: media 
 +
 +# media= <TYPE> <PORT> <MEDIA_PROTOCOL> 
 +# <TYPE>: audio 
 +# <PORT>: 3000 gemeint ist der UDP-Port 
 +# <MEDIA_PROTOCOL>: rtp/avp 
 +
 +# Parameter: media_spec 
 +
 +# media= <TYPE> <MEDIA_FORMAT> <CODEC> <RATE> <FRAME_SIZE> 
 +# <TYPE>: audio 
 +# <MEDIA_FORMAT>: audio 
 +# <CODEC>: PCMA  
 +# <RATE>: 8000 
 +# <FRAME_SIZE>: 160 gemeint ist die Anzahl von Bytes pro Paket
 </code> </code>
  
-**BOB**:+Der Codec ''PCMA'' steht für **P**ulse **C**ode **M**odulation nach dem sogenannten **a**-Law. Es gibt noch die **µ**-Law-Variante. 
 + 
 +===== Aufgaben ===== 
 + 
 +Protokollieren Sie den folgende Vorgänge mit: 
 + 
 +  - Anmeldung der Benutzer (einmal korrekt, einmal mit falschem Passwort, einmal mit falschem Benutzernamen) 
 +  - Verbindungsaufbau (einmal zu korrektem Ziel, einem zu nicht existierendem Ziel) 
 +  - Wiederanmeldung (Reregister) der Benutzer 
 +  - Überprüfen Sie auf welchem ''port'' die jeweiligen Programme (Clients/Proxy) laufen. 
 + 
 +**HINWEIS**: Mit folgendem Befehl können die ''ports'' angezeigt werden.
 <code> <code>
-./uaw.sh -f config/b.cfg+# Zeigt nur die verwendeten Ports an 
 +lsof -i -P -n | grep LISTEN 
 + 
 +Ausgabe: 
 +java    18254 keinpasswort   20u  IPv6  48914      0t0  TCP *:5060 (LISTEN) 
 +java    18425 keinpasswort   20u  IPv6  48045      0t0  TCP *:5070 (LISTEN) 
 + 
 + 
 +# Zeigt alle Verbindungen inklder IP-Adressen an 
 +netstat -tulpn | grep LISTEN 
 + 
 +Ausgabe: 
 +(Es konnten nicht alle Prozesse identifiziert werden; Informationen über 
 +nicht-eigene Processe werden nicht angezeigt; Root kann sie anzeigen.
 +tcp        0      0 127.0.0.1:2601          0.0.0.0:              LISTEN                     
 +tcp        0      0 127.0.0.1:2602          0.0.0.0:              LISTEN      -                
 +tcp        0      0 127.0.0.1:2604          0.0.0.0:              LISTEN      -                
 +tcp        0      0 0.0.0.0:22              0.0.0.0:              LISTEN      -                
 +tcp6            0 :::5070                 :::                   LISTEN      18425/java       
 +tcp6            0 :::80                   :::                   LISTEN      -                
 +tcp6            0 :::22                   :::                   LISTEN      -                
 +tcp6            0 :::5080                 :::                   LISTEN      18533/java       
 +tcp6            0 :::5060                 :::                   LISTEN      18254/java  
 </code> </code>
  
-Im Ordner ''mjua/config'' befinden Beispiel Konfigurationen, mit denen auf einem Rechner ein Proxy und zwei UAs gestartet werden können+Zusatzaufgabe (optional): Leiten Sie die Registrierung und Verbindungsauf-/abbau über zwei Proxys.
  
-**ACHTUNG FEHLER**: +Achten Sie insbesondere auf die Statusmeldungen.
-   - Leider hat sich auch hier der **Zeilenende-Fehler** (s. o.) eingeschlichen. +
-   - Der ''Alice''-UA, der die Konfiguration ''mjua/config/a.cfg'' nutzt, meldet sich nicht am Proxy anDies liegt am Kommentar in folgender Zeile: +
-<code>do_register=yes</code>+
  
-Hier muss das ''#''-Zeichen entfernt werden((s. auch b.cfg)). Die ''b.cfg'' funktioniert einwandfrei.+Arbeiten Sie zunächst auf einem Rechner (Alice, Bob und Proxy).
  
-===== Linphone-Client =====+Verwenden Sie anschließend pro Netzelement EINEN Rechner (also alle getrennt). Planen Sie Ihre IP-Adressen und passen Sie die jeweiligen Konfigurationsdateien an. 
 + 
 +===== Proxy-to-Proxy Signalisierung ===== 
 + 
 +Die folgende Konfiguration kann für die Verbindung von zwei Domainen auf zwei unterschiedlichen Proxies verwendet werden. 
 + 
 +<code> 
 +domain_names=example.com example.net 192.168.33.119 
 +... 
 +domain_proxying_rules={domain=192.168.33.116,nexthop=192.168.33.116:5060} 
 +</code> 
 +Dabei ist ''192.168.33.116'' die "fremde" Domain und ''192.168.33.119'' die eigene Domain (s. ''domain_names''). 
 +ACHTUNG: Der Parameter ''outbound_proxy'' darf für die Proxies nicht verwendet werden (LOOP-Bildung). 
 +Auf den Clients kann der ''outbound_proxy'' als Default-Gateway interpretiert werden. Sprich alle Calls außerhalb der eigenen Domain (''192.168.33.119'') gehen an diesen Proxy (i.d.R. der eigene Proxy). 
 + 
 +===== Alternative Clients ===== 
 +==== Linphone-Client ====
 Die Konfiguration des Clients ist [[lager:oeff_netze:voip#sip-client_softphone_linphone|hier]] beschrieben.  Die Konfiguration des Clients ist [[lager:oeff_netze:voip#sip-client_softphone_linphone|hier]] beschrieben. 
 +
 +
 +==== YATE-Client ====
 +Derzeit ist der Client nicht auf den Labor-PCs installiert. Es wird demnach eine VM benötigt.
 Als Alternative zu diesem Client kann der ''yate-qt4''((yate: yet another telephone engine)) Client verwendet werden. Als Alternative zu diesem Client kann der ''yate-qt4''((yate: yet another telephone engine)) Client verwendet werden.
 <code>sudo apt-get install yate-qt4</code> <code>sudo apt-get install yate-qt4</code>
-Der Client wird im Untermenü ''Internet'' einsortiert.+ 
 +Der ''YATE''-Client wird im Untermenü ''Internet'' einsortiert.
  
 Die Software ist [[http://yateclient.yate.ro/|hier]] beschrieben.  Die Software ist [[http://yateclient.yate.ro/|hier]] beschrieben. 
Zeile 132: Zeile 266:
 Die dort abgelegte Version 1.7 enthält in den Start-Scripten kleinere Fehler, daher wird hier ein Paket bereitgestellt, welches diese Fehler nicht enthält und etwas anders aufgebaut ist. Die dort abgelegte Version 1.7 enthält in den Start-Scripten kleinere Fehler, daher wird hier ein Paket bereitgestellt, welches diese Fehler nicht enthält und etwas anders aufgebaut ist.
  
-==== Download des Proxy ==== +==== Korrekturen für die Start-Scripte ==== 
-Dort kann er auch [[http://www.mjsip.org/download/mjproxy_1.7.zip| als mjproxy heruntergeladen]] werden.+ 
 +Hier die Download-Links, der Original-Software: 
 +^ Netzelement ^ Download ^ 
 +| UA / Client | [[http://www.mjsip.org/download/mjua_1.7.zip| DOWNLOAD]] 
 +| Proxy | [[http://www.mjsip.org/download/mjproxy_1.7.zip| DOWNLOAD]] | 
 Weitere Informationen finden sich auf der Homepage der Entwickler. Weitere Informationen finden sich auf der Homepage der Entwickler.
  
-In der ZIP-Datei befindet sich das Start-Skript ''proxy.sh''. Unglücklicherweise haben die Entwickler als Zeilenende die DOS/Windows Variante ''^M''  verwendet. Das Skript funktioniert daher nicht direkt.+In den ZIP-Datei befinden sich mehrere Start-Skripte z.B. ''proxy.sh'' und ''uaw.sh''. Unglücklicherweise haben die Entwickler als Zeilenende die DOS/Windows Variante ''^M''((''^M'' steht für STRG-M)) verwendet. Das Skript funktioniert daher nicht direkt.
  
 Durch öffnen und wieder speichern im richtigen Format kann dieses Problem gelöst werden. Hierzu öffnet man die ausgepackte Datei mit ''gedit''. Der ''Speichern unter''-Dialog enthält die Möglichkeit das Zeilenende von ''Windows'' auf ''Unix/Linux'' umzustellen: Durch öffnen und wieder speichern im richtigen Format kann dieses Problem gelöst werden. Hierzu öffnet man die ausgepackte Datei mit ''gedit''. Der ''Speichern unter''-Dialog enthält die Möglichkeit das Zeilenende von ''Windows'' auf ''Unix/Linux'' umzustellen:
 {{ :lager:oeff_netze:bilder:voip_mjproxy_save.png?600 | Zeilenende korrigieren}} {{ :lager:oeff_netze:bilder:voip_mjproxy_save.png?600 | Zeilenende korrigieren}}
 +
 +Alle notwendigen Dateien wurden korrigiert und in dem folgenden Archive zusammengepackt und liegt hier zum 
 +
 +**{{:lager:oeff_netze:mjsip.tar.gz|DOWNLOAD}}** bereit.
  
lager/oeff_netze/voip_mjsip.1424183690.txt.gz · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki