Linux – Jitsi Probleme mit Sipgate beheben

Seit SIPGate vor einigen Monaten an Ihrer Infrastruktur unangekündigt Veränderungen vorgenommen hat, verliert die Linuxversion von Jitsi im UDP Modus häufig die Verbindung zum Server. Dabei ist es egal, welche Version und welches Java man verwendet.

Die Abhilfe ist aber sehr leicht zu schaffen, man schaltet das automatische Proxy ab und ersetzt es mit :

Proxy:  tcpproxy.sipgate.de
Port: 5060
Bevorzugter Transport: TCP <-! Wichtig

Seit der Anpassung, funktioniert Jitsi wieder stabil mit SIPGATE.

Jitsi + Linphone = kein Telefon

Einen ganzen Vormittag kann man damit verbrennen, wenn Jitsi und Linphone zusammen laufen und beide SIP VOIP Anschlüsse bedienen können sollen. „Sollen“, weil „können“ tun sie es nicht, bis man die wahre Ursache erkennt 🙂

Falls der geneigte Leser etwas Frust aus dem Text herausliest, „etwas“ ist stark untertrieben.

Was war passiert ?

Nun, ich hatte LinPhone4 installiert, um es auszuprobieren und es behalten, weil es, an dem Tag, besser mit Sipgate funktionierte, als Jitsi, welches mit Sipgate gar nicht mehr kann 🙁  Jetzt mußte ich feststellen, daß ich mit LinPhone ohne irgendwelche Fehlermeldungen auf UI Seite, weder angerufen werden, noch selbst anrufen konnte, egal auf welchem Konto!

Nachdem ich in den Einstellungen von LinPhone die Position des Logs gefunden hatte, fielen mir dort wiederholt diese Zeilen auf:

2017-10-05 11:25:17:394 ERROR No listening point matching for [udp://sipgate.de:5060]
2017-10-05 11:25:17:394 ERROR belle_sip_client_transaction_send_request(): no channel available

Natürlich neben jeder Menge „Technobabble“ des Clienten, versteht sich 🙂

Was sagt uns das ?

Antwort: Nichts 🙂

Lediglich 1 .. in Worten EINE ..  Webseite konnte Google finden, die schon mal was davon gehört hatte. Zum Glück, war es die richtige.

Übersetzt meint die Fehlermeldung, daß das Programm keinen Kommunikationskanal öffnen konnte. Nur wieso nicht, darüber schweigt es sich aus. Hellseher haben halt immer Konjunktur, weil der Rest blöd genug ist, Raum für deren „Notwendigkeit“ zu schaffen. Dank der einen Webseite, war es dann aber zum Glück recht einfach, der Ursache auf die Spur zu kommen.

Auflösung

Einen „Channel“ etabliert man, in dem man einen TCP Port bindet und dem Gegenüber sagt, das man darauf angerufen werden kann. Wieso man beim „Anrufen“ nicht direkt mit dem SIP Provider eine TCP-Connection aufmachen kann, will ich gar nicht wissen, wenn man SIP lernen will, wird man eh durch Unlogik erschlagen. IMHO, eins der schlechtesten Protokolle aller Zeiten. Stückwerk ^10.

Ok, was braucht man um einen Port zu binden ? Eine Portnummer und niemanden, der schneller als man selbst war! Mit anderen Worten, Jitsi hatte sich schon permanent auf Port 5060 gebunden, weswegen Linphone das nicht konnte. Soweit, so in den RFCs für TCP Ports vorgesehen. Warum Linphone das nicht schreiben kann, ist ein weiteres Rätsel, weil die Fehlermeldung des TCP/IP Stacks zu dem „Fehler“ ist eindeutig!

Jetzt bietet LinPhone in den Kontoeinstellungen an, daß man statt Port 5060 zufällige Ports benutzen kann. Wieso das nicht der Standard ist, wird man nie erfahren. Jedenfalls funktioniert das SIP Konto sofort, wenn man die feste Portzuweisung abgeschaltet hat:

Fazit: In Jitsi habe ich jetzt SIP deaktiviert, damit entfällt auch das Binden des Ports.

Da Jitsi eh derzeit nicht mit Sipgate kann, spielt das es keine Rolle mehr. Warum das alles am Tag, an dem ich Linphone ausprobiert habe, funktioniert hat, ist ein weiteres Mysterium.

Das VOIP stinkt, dürfte vielen leidgeplagten Telefonanschlußinhabern bekannt sein, wie sehr das grade stinkt, hier im Überblick:

Skype:

Old: Raustelefonieren geht, angerufen werden geht nicht.
New: Raustelefonieren geht, Gui ist Mist, angerufen werden, geht nicht, weil sobald man „abnimmt“ legt Skype auf! Fix in Sicht ? Nein. Problem bekannt ? Seit Monaten.

Jitsi:

Fritz!box: Raus geht, Rein geht.
Sipgate: Raus geht, Rein geht nicht.

Jitsi Android:

Fritz!box: geht gar nicht.
Sipgate: Raus geht, Rein geht.

LinPhone:

Fritz!box: geht beides
Sipgate: geht beides

Einzig gültiger Kommentar zu Sipgate+Jitsi: AAAAAAAAAAAAAAAAAAAARRGGS!

Jitsi kann keine SIP Anrufe mehr annehmen

Wer kennt das nicht, in der Firma läuft es ruhig. Kunden melden sich nur per Email, aber das Telefon schweigt seit Tagen. Das alljährliche Sommerloch, wegen dessen wir alle in den Urlaub fahren …, oder ?

Paranoide Menschen würden jetzt per Telefon sich selbst anrufen und entsetzt feststellen, daß die Telefone nicht klingeln, weil .. ja .. scheisse, wieso klingeln die nicht ????!!!!!!

Ab jetzt herrscht Panik in der IT-Abteilung:  Was ist passiert ?

Ist der SIP Provider pleite gegangen ?
Haben Mäuse die Glasfaserkabel geknackt ?
Oder liegt es etwa an uns ?
Gab es ein Update der Telefonsoftware ?
Gab es überhaupt irgend ein Update ?

Also prüfen wir zunächst mal, ob alle betroffen sind und stellen fest : Alle Jitsi SIP Softphones sind quasi tod, aber normale Telefone für SIP nicht. Jitsi kann zwar noch raustelefonieren, sonst wäre das ja auch eher aufgefallen, aber ankommende Anrufe gehen nicht mehr. Komischerweise geht Jitsi auf den Handies noch.

Das schliesst per se ein DSL Router und Netzwerkproblem aus, außer die lokale Firewall wäre im Spiel:

TEST:
systemctl stop firewalld
Anruf => kein Klingeln
systemctl start firewalld

Das wars nicht. Hatte Jitsi ein Update ? Seit Monaten nicht mehr.  Fällt somit als Ursache auch weg.  Hmm…

2 Tage und eine systematische Suche später ..

Das Problem, das  Jitsi keine SIP Calls mehr annehmen konnte, ist behoben worden.

Es lag NICHT an Jitsi, Sipgate, den Mäusen, dem DSL Router, den Kabeln, der Firewall sondern an :  JAVA.

Die Ursache

Fedora hat vor zwei Tagen ein neues openjdk 1.8.0.141_b16 eingespielt, das hat Jitsi und vermutlich andere Apps beeinträchtigt. Das Update war als Security Update markiert, es ist also potentiell gefährlich, die App weiter zu betreiben. Ist es in dem Fall nicht, da das Update pauschal als Security Update eingestuft wurde, weil 4 Security Tests beim Build nicht liefen. Dazu noch eine Menge normaler Updates, von denen vermutlich eins die Ursache ist.

Der Workaround

Der schnellste Workaround ist natürlich, Java zu downgraden auf die letzte funktionierende Version:

java-1.8.0-openjdk-1.8.0.131-5.b12.fc25.x86_64.rpm
java-1.8.0-openjdk-devel-1.8.0.131-5.b12.fc25.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.131-5.b12.fc25.x86_64.rpm
java-1.8.0-openjdk-javadoc-1.8.0.131-5.b12.fc25.noarch.rpm

Wenn man das jetzt mit „dnf downgrade java-*“ macht, landet man bei einer uralten Version, was Securitymäßig keine gute Idee ist. Also lädt man die Pakete hier runter:

https://kojipkgs.fedoraproject.org//packages/java-1.8.0-openjdk/1.8.0.131/5.b12.fc25/noarch/java-1.8.0-openjdk-javadoc-1.8.0.131-5.b12.fc25.noarch.rpm
https://kojipkgs.fedoraproject.org//packages/java-1.8.0-openjdk/1.8.0.131/5.b12.fc25/x86_64/java-1.8.0-openjdk-headless-1.8.0.131-5.b12.fc25.x86_64.rpm
https://kojipkgs.fedoraproject.org//packages/java-1.8.0-openjdk/1.8.0.131/5.b12.fc25/x86_64/java-1.8.0-openjdk-devel-1.8.0.131-5.b12.fc25.x86_64.rpm
https://kojipkgs.fedoraproject.org//packages/java-1.8.0-openjdk/1.8.0.131/5.b12.fc25/x86_64/java-1.8.0-openjdk-1.8.0.131-5.b12.fc25.x86_64.rpm

Aber natürlich nur passenderweise für Fedora 25, andere Versionen bitte selbst bei koji suchen.

Nicht vergessen: /etc/dnf/dnf.conf editieren und java auf die Sperrliste setzen, sonst kommt das Update gleich wieder rein.

Warum ist jetzt der Downgrade auf b12 akzeptable und der auf die Fedora Downgrade Version nicht ?

Weil Jitsi nur Verbindungen zu bestimmten, vertrauenswürdigen Servern aufnimmt. Es ist daher kaum möglich etwaige SecBugs in Java über diesen Channel auszunutzen, zumal in der ML von OpenJAVA keine Hinweise zu Securitybugs enthalten waren. 4 Tests beim Build failten, das kann alles sein. in nächster Zeit wird es sicher Updates von Jitsi geben, damit es auch mit der aktuellen Java Version läuft, denn es steht zu befürchten, daß Openjdk, den „Bug“ nicht fixt.

Skypetelefonbuch ins Jitsi importieren

Heute widmen wir uns ganz dem Umstieg von Skype OUT ™  und Skype IN ™zu Jitsi.

Die erste Frage die sich stellt :“kann ich meine Rufnummer mitnehmen ?“ kann mit einem „Ja, aber..“ beantwortet werden. Das Aber sieht so aus: Man braucht einen SIP Dienst im Netz, z.b. sipgate.de oder eine konfigurierte Fritz!Box, die aus dem Netz erreichbar ist, dann kann man das auch über zu Hause machen.

Die zweite Frage: „Bekomme ich mein Telefonbuch importiert ?“ kann ich auch mit „Ja“ beantworten.
Ich habe da mal was vorbereitet, aber ACHTUNG: Eine Fritz!Box nimmt es einem derzeit übel , wenn man mehr als 22 Einträge in der Kontaktliste hat! Ich hab es mit meinen 160 versucht, das war wie ein DOS Angriff.

Das Problem wird bereits bei Jitsi und AVM untersucht, daß Ergebnis steht noch aus.

Vorbereitungen

Wir brauchen : PHP mit SQLite3 support

Als ersten stoppen wir Jitsi. Die Beispiele hier sind alle für Linux, aber die funktionieren mit anderen Pfaden auch für Windows. Das PHP Programm habe ich unter angefügt.

php skypetojitsi.php pfad_zur_main.db SIPID SIPSERVERIP Gruppenname

Für eine Fritz!Box wäre das ein typisches Beispiel:

Wenn „620@192.168.178.1“ die von der Fritz!Box vorgegebene ID ist, dann ist 620 die SIPID und die IPadresse der SIPServer.

php skypetojitsi.php ~/.Skype/skypeusername/ 620 192.168.178.1 Phonebook >/tmp/jitsi.xml

Das Programm gibt ein XML Fragment aus, daß man per Texteditor in die Datei „~/.jitsi/contactlist.xml“ einfügen muß. Der Inhalt muß zwischen die „child-contacts“ Tags :

           <group name="Phonebook" uid="1450110895594310563919">
                
                    "SIP:620@192.168.178.1" parent-proto-group-uid="RootGroup.uid" uid="Phonebook.uid"/>
                </proto-groups>
                <subgroups/>
                <child-contacts>
                       ----> INSERT XML HERE <----
                </child-contacts>
            </group>

Das wars dann auch schon. Abspeichern und Jitsi neustarten.

Hier der PHP Code

$tmpl = "\t\">\n                        \n                        @\" address=\"@\" parent-proto-group-uid=\".uid\">\n                            xcap.resolved=false;\n                        \n                    \n";


function sqlite_open($location,$mode)
{
    $handle = new SQLite3($location,$mode);
    return $handle;
} 

function generateRandomString($length = 10) {
    $characters = '0123456789';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

if ( $argc < 4 ) { print "Usage: skype2jitsi path_to_main.db SIPID SIPSERVER Groupname\n"; exit; } if ( $stmt = sqlite_open( $argv[1]."/main.db",SQLITE3_OPEN_READONLY) ) { if ( $result = $stmt->query("select displayname,pstnnumber from Contacts where pstnnumber like '+%' and pstnnumber!=displayname order by displayname") ) {
			
		while ( $row = $result->fetchArray(SQLITE3_ASSOC) ) {
			
			$uuid = "1450".generateRandomString(19);

			print str_replace(array("","","","","",""),
					  array($uuid, $row["displayname"], $argv[2], $row["pstnnumber"], $argv[3], $argv[4]),
					  $tmpl);

						

		}
	}
}

WordPress läßt einen leider keine PHP Anfangs- und Endetags benutzen, bitte selbst hinzufügen.

Dein Jitsi und SIP

Weil ich grade dabei bin meine neue Telefonanlage in Betrieb zu nehmen, hier ein paar Tips wie es mit VOIP zu Hause besser läuft.

Zunächst einmal braucht man einen SIP fähigen Clienten der funktioniert, und grade der letzte Teil ist nicht immer gegeben. Empathy für Fedora könnte zwar SIP, dummerweise funktionierts derzeit nicht. Der Alleskönner Jitsi dagegen kann es, ist aber nicht vorinstalliert. Zumindest das Problem läßt sich schnell lösen:

dnf install jitsi  bzw. yum install jitsi

Jitsi kann wirklich alles was man sich wünscht, Jabber, ZRTP ( Verschlüsselung ), SIP, Google Talk usw. usw. Audio / Video / Chat / Konferenzen / Screensharing alles kein Problem. Ein paar Kleinigkeiten muß man aber umkonfigurieren, damit es wirklich reibungslos funktioniert.

Sipgate.de :

Sipgate hat wohl ein kleines Anrufbeantworterproblem. Um das zu beheben, tun Sie folgendes:

  1. Dazu in die Einstellungen des Zugangskontos gehen
  2. Verbindung auswählen
  3. Anrufbeantworter (MWI) abschalten.
  4. abspeichern.

Machen Sie das nicht, kann es sein, daß Jitsi den vorhanden Speicher nach einigen Stunden vollgemüllt hat.

In einer neueren Version von Jitsi könnte der Fehler bereits behoben sein, aber wenn Sie den Anrufbeantworter eh nicht gebucht haben, können Sie es auch einfach abschalten.

Für Fritz!Boxen mit VOIP :

Damit SIP richtig läuft, muß man den CODEC G722 abschalten.

  1. Dazu in die globalen Einstellungen gehen
  2. Audio auswählen
  3. Kodierungen suchen
  4. G722/16000 abwählen.
  5. Jetzt sollte man das SIP Konto einmal abschalten und wieder aktivieren.

Macht man das nicht, hört man sich an wie Godzilla auf Drogen 🙂 Diese Einstellung kann man auch nur für einen bestimmtes SIP Konto abschalten. Wenn noch andere Codecs verfügbar sind, kann man den aber auch bedenkenlos global deaktivieren.

Und schon kann man darüber angerufen werden und Anrufe tätigen. Jitsi läuft 1a mit dem Fritz!box Anrufbeantworter zusammen.

In diesem Zusammenhang kann ich Pandora als Skypeersatz empfehlen:

  • Globale Erreichbarkeit 24/7
  • Einfache Installation
  • Cloudstorage
    Cloudkalender
  • verschlüsselte EMails
  • und bald auch WEBRTC