ICEWarn Bedeutung

Auf der Seite ICE und Kandidaten habe ich etwas versucht die Aushandlung der RTP-Verbindungen zu beschreiben. Die Lync Endpunkte versuchen genau das und das klappt nicht immer. Der Client liefert dann meist eine relativ wenig aussagekräftige Fehlermeldung. Interessanter ist aber die Diagnosemeldung

Meldung im Trace

Wenn Sie auf dem Lync Client das Logging angeschaltet haben oder mit Snooper oder CLS auf dem Server die SIP-Pakete mitschneiden, dann findet sich bei einer fehlgeschlagenen Verbindung am Ende immer auch eine aussagekräftige Beschreibung. Suchen Sie einfach nach "ms-client-diagnostics" oder "ICEWarn". Die relevante Zeile ist in der Regeln

Beispiel eines normalen Call Clear, d.h. Am Ende einer Verbindung mit einem BYE beendet und mein Client sendet ein 200 OK

06/05/2014|14:11:35.833 1384:11C0 INFO :: SIP/2.0 200
ms-client-diagnostics: 51007;reason="Callee media connectivity diagnosis info";
CalleeMediaDebug="audio:ICEWarn=0x0,
LocalSite=192.168.100.1:50034,LocalMR=192.168.100.1::58503,
RemoteSite=80.187.111.135:20726,RemoteMR=80.60.22.20:58091,
PortRange=50020:50039,LocalMRTCPPort=59100,RemoteMRTCPPort=58091,
LocalLocation=2,RemoteLocation=2,FederationType=0,
NetworkName=msxfaq.net,Interfaces=0x12,BaseInterface=0x2,BaseAddress=192.168.100.1:50020"

Hier dann ein vorzeitiger Abbruch einer Verbindung.

06/05/2014|14:12:02.766 1384:11C0 INFO :: BYE sip:frank@msxfaq.net;opaque=user:epid:mV1VibmVCl-rGn-asKt9hQAA;gruu SIP/2.0
ms-client-diagnostics: 51004; reason="Action initiated by user";
CalleeMediaDebug="audio:ICEWarn=0x40003a0,
LocalSite=192.168.100.1:50034,LocalMR=192.168.100.1::58503,
RemoteSite=80.187.111.135:20726,RemoteMR=192.168.100.1::58091,
PortRange=50020:50039,LocalMRTCPPort=59100,RemoteMRTCPPort=58091,
LocalLocation=2,RemoteLocation=2,FederationType=0,
NetworkName=msxfaq.net,Interfaces=0x12,BaseInterface=0x2,BaseAddress=192.168.100.1:50020"

Damit stellt sich nun aber die Frage, welche Bedeutung die Nummer hinter dem ICEWarn hat.

Fehlersuche mit ICEWarn

Aufschlussreiche ist die Tabelle 2 im Kapitel 9 aus "Lync Server 2010 Resource Kit"

Microsoft Lync Server 2010 Resource Kit
hhttp://www.microsoft.com/en-us/download/details.aspx?id=22644

Bei der Warnung handelt es sich nicht um einen individuellen Code, sondern eine Bitmaske. Nehmen wir das Beispiel von oben:

0x40003a0  = 100000000000000001110100000bin

bit  Bedeutung
5  = Local connectivity failed
7  = UDP TURN server connectivity failed. 
8  = TCP NAT connectivity failed
9  = TCP TURN server connectivity failed.
26 = use candidate checks failed

Unter diesen Voraussetzungen kann der Client natürlich nicht wirklich eine Verbindung herstellen.

  • Bit = Stelle in der Nummer
  • ICE-Flag = hex-Schreibweise des Bit
  • "Errorbit"
    •  Fehler zeigt ein Problem
    • Warnung zeigt, dass dieser Weg nicht geht aber ein anderer Weg durchaus gehen kann
    • Normal = das gesetzte Bit kann nicht als Fehler angesehen werden
Bit ICE Flag Englische Beschreibung Errorbit Bedeutung und LösungsMöglichkeiten

X

0x0

There were no failures or the ICE protocol was not used.

x

Kein Fehler

0

0x1

TURN server is unreachable.

Fehler

Prüfen Sie, dass der TURN Server auf dem Edge läuft und die Port (443/3478) erreichbar sind. IP-Leitwege, Firewall, Namensauflösung sind Ansatzpunkte

1

0x2

An attempt to allocate a UDP port on the TURN server failed.

Warnung

Bit kann gesetzt sein, wenn der Client hinter einer Firewall ist, die UDP blockt.

2

0x4

An attempt to send UDP on the TURN server failed.

Warnung

Vermutlich blockt eine Firewall die Verbindung per UDP

3

0x8

An attempt to allocate a TCP port on the TURN server failed.

Fehler

Prüfen Sie, dass der Client en AVEdge erreichen kann. Beim Zugriff über einen HTTP-Proxy muss dieser den TLS-Handshake erlauben

4

0x10

An attempt to send TCP on the TURN server failed.

Fehler

Prüfen Sie, dass der Client en AVEdge erreichen kann. Beim Zugriff über einen HTTP-Proxy muss dieser den TLS-Handshake erlauben

5

0x20

Local connectivity failed. (local UDP für audio/video and local TCP für application sharing and file transfer).

Warnung

Der Versuch der beiden Clients sich über die lokale IP-Adresse zu erreichen ist fehlgeschlagen. Eventuell verhindere IP-Routing, interne Firewall oder NAT die Verbindung oder die beiden Clients "glauben" nur im gleichen gerouteten Netz zu sein

6

0x40

UDP NAT connectivity failed.

Warnung

Eine direkte Verbindung der Clients ist aufgrund von NAT nicht möglich

7

0x80

UDP TURN server connectivity failed.

Warnung

Der Client kann den TURN-Server (3478) nicht über UDP erreichen. Meist blockt eine Firewall oder der HTTProxy die Verbindung

8

0x100

TCP NAT connectivity failed.

Erwartet

Diese Bit kann gesetzt sein, wenn die lokale direkte Verbindung erfolgreich war und daher TCP NAT gar nicht erst versucht wurde oder keine direkte TCP-Verbindung möglich war.

9

0x200

TCP TURN server connectivity failed. 

Erwartet

Diese Bit kann gesetzt sein, wenn die lokale Verbindung erfolgreich war und der TCP TURN-Weg daher gar nicht versucht wurde. Es kann aber auch sein, dass eine Seite keine TURN-Kandidaten geliefert hat. Wenn die Verbindung fehlschlägt, sollten Sie dort weiter suchen.

10

0x400

Message integrity failed in connectivity check request.

Fehler

Dieser Fehler sollte nicht auftreten und zeigt an, dass die Pakete durch einen Angriff, Firewall, WAN-Optimierer o.ä. verändert wurden.

11

0x1000

A policy server was configured.

Erwartet

Wenn eine Bandbreitensteuerung (CAC) genutzt wird, dann zeigt dieses Flag an, das aufgrund von Beschränkungen der Fall fehlgeschlagen sein kann. Ist die Verbindnug aber zustande gekommen, dann zeigt diese Flag an, dass Bandbreitenrichtlinien angewendet wurden.

12

0x2000

Connectivity check requested failed because of a memory problem or other reasons that prevented sending packets.

Fehler

Dieses Bit zeigt einen Fehler an, dass der Computer keine ausreichenden Ressourcen (Speicher, Ports, CPU o.ä.) hat und daher der Call fehlgeschlagen ist

13

0x4000

TURN server credentials have expired or are unknown.

Fehler

Dieses Bit zeig den Fehler an, dass der AV-Edge Authorization Server nicht erreichbar ist. Der Client bekommt daher keine Edge-Kandidaten und der Call wird zumindest nach oder von Extern nicht funktionieren.

14

0x8000

Bandwidth policy restriction has removed some candidates.

Fehler

Diese Fehler bedeutet angeblich eine Fehlkonfiguration des Bandbreiten Servers (CAC), durch den Kandidaten entfernt wurden oder eine andere Verbindung vorgeschrieben wurde, die dann fehlt geschlagen ist. Es könnte auch einen NAT-Übergang intern scheitern.

15

0x10000

Bandwidth policy restriction decreases the bandwidth.

Warnung

Diese Warnung zeigt an, dass durch CAC die maximal nutzbare Bandbreite beschränkt wurde und daher die Qualität schlechter sein kann, da ein Codec mit geringerer Bitrate oder höherer verlustbehafteter Kompression zum Einsatz kommen muss.

16

0x20000

Bandwidth policy keep-alive failed.

Fehler

Der Client konnte eine Aktualisierung beim CAC Server erhalten. Die Verbindung bleibt aber bestehen. Prüfen Sie die Erreichbarkeit des CAC oder Edge-Servers (TURN)

17

0x40000

Bandwidth policy allocation failure.

Fehler

Der CAC Server verbietet, dass die Clients eine Verbindung über zwei Edge-Server (Relay zu Relay)nutzen.

18

0x80000

No TURN server configured.

Warnung

Clients, die aus dem gerouteten Netzwerk zu anderen Client eine Verbindung aufbauen sollen, benötigen die Hilfe eines TURN-Servers. Prüfen Sie die Lync Topologie und vor allem, ob der Edge-Server für den Client per DNS auflösbar und erreichbar ist.

19

0x100000

Multiple TURN servers configured.

Info

Dies ist kein Fehler. Der Client hat mehrere TURN-Server gefunden. Dies ist normal, wenn mehrere Edge-Server per DNS-Round Robin verfügbar gemacht werden

20

0x200000

Port range exhausted.

Warnung

Der Client hat keine "freien lokalen Ports" mehr allokieren können. Prüfen Sie die Einstellungen bezüglich der Ports und stellen Sie sicher, dass mindestens 20 Ports für Audio/Video und 3 Ports für AppSharing/Filetransfer definiert sind

21

0x400000

Received alternate server

Warnung

Der genutzte TURN-Server ist überlastet und der alternative Server ist nicht erreichbar

22

0x800000

Pseudo-TLS failure.

Warnung

Dies ist ein Hinweis, dass der HTTPS-Proxy den Datenverkehr durch "Deep Packet inspection" überprüft, was nicht supported ist

23

0x1000000

HTTP proxy configured.

Info

Diese Bit zeigt an, dass ein HTTP-Proxy konfiguriert ist. Es ist kein Fehler

24

0x2000000

HTTP proxy authentication failed.

Fehler

Die Anmeldung am konfigurierten HTTP-Proxy ist nicht möglich und daher kann der Proxy nicht genutzt werden. Eventuell kommt keine Verbindung zustande

25

0x4000000

TCP-TCP connectivity checks failed over the TURN Server.

Fehler

Der TURN-Server kann nicht über 443/TCP erreicht werden. OCS2007 Server müssen zusätzlich über 50000/TCP-59999/TCP erreichbar sein. Prüfen Sie ihre Firewall. Die Verbindung könnte nicht zustande gekommen sein

26

0x80000000

Use candidate checks failed.

Fehler

Die Clients haben mit dem ICE Handshake begonnen aber es wurden nur ein paar aber nicht alle Pakete empfangen. mögliche Ursachen sind Firewalls, Virenscanner, Netzwerktreiber, Winsock Layers Service Provider etc.

Auswertung mit JavaScript (Baustelle)

Bei Gelegenheit möchte ich oben eine Eingabefeld anbieten, in welche Sie dann den HEX-Wert der ICE-Warnung eingeben können. Ein JavaScript könnte dann diese Zahl in ein Binärformat auf die einzelnen Bits umrechnen und die entsprechenden Zeilen der Tabelle Ausblenden.

JavaScript geht mir nicht so flüssig von der Hand wie PowerShell. Es kann also noch etwas dauern, bis ich etwas Muße für die Weiterentwicklung dieser Funktion habe,.

Die Tabellenzeilen sind alle schon mit einer "ID" versehen:

Entsprechend kann man in JavaScript das Property "Display" auf "none" stellen

document.getElementById("1").style.display = "none";

Fehlt also nur noch das Formular und die Konvertierung und Umsetzung. Das könnte wie folgt aussehen:

<form>
ICEWarn-Nummer: <input id="icenumber" type="text" name="icewarn">
<input type="button" onclick="showicewarn()" value="Auswerten">
<span id="result">Ergebnis</span>
</form>

<script>
function showicewarn(){
    document.getElementById("bit26").style.display = 'none';
    document.getElementById("result").innerHTML = document.getElementById("icenumber").value;
}
</script>

Dann fehlt also nur noch etwas umrechnung.

Weitere Links