Thread-Gerät per IPv6 nicht erreichbar: Adresse nur im Mesh
Die abgelesene IPv6-Adresse des Thread-Geräts antwortet nicht. Ein Thread-Knoten hat mehrere Adressen, und die meisten enden am Mesh.
Aufwand:
ca. 30 Min.
Das Symptom
In einer Diagnoseansicht steht endlich die IPv6-Adresse des Thread-Geräts. Man
kopiert sie, ruft sie vom Rechner aus auf, und es kommt keine Antwort. Kein
Fehler, kein Verbindungsabbruch, einfach eine Zeitüberschreitung.
Über die App reagiert dasselbe Gerät währenddessen sofort. Also liegt es weder
am Funk noch an der Stromversorgung. Es liegt an der Adresse, und zwar daran,
welche man erwischt hat.
Die „Layer 8“-Wahrheit
Ein Thread-Knoten hat nicht eine Adresse, sondern einen ganzen Satz davon, und
jede beantwortet eine andere Frage. Eine Link-Local-Adresse, erkennbar am
Anfang fe80, bezeichnet eine Schnittstelle, die mit einer einzigen
Funkübertragung erreichbar ist, also den direkten Nachbarn. Eine
Mesh-Local-Adresse, erkennbar am Anfang fd, gilt im Thread-Netz
unabhängig von der Topologie, endet aber
ebenso zuverlässig an dessen Grenze. Dazu kommen Locator-Adressen, die die
Position im Netz abbilden und sich mit ihr ändern.
Wer von außerhalb des Thread-Netzes auf ein Gerät zugreifen will, braucht eine
global gültige Adresse. Die entsteht nicht von selbst: Der Border Router stellt
ein Präfix bereit, aus dem die Geräte sich eine solche Adresse bilden, und er
sorgt dafür, dass der Rückweg in das Mesh im Heimnetz bekannt ist. Fällt eines
von beidem aus, weil IPv6 im Heimnetz abgeschaltet ist oder
Router-Ankündigungen unterdrückt werden, dann existiert die Adresse zwar,
findet aber niemand.
Die abgelesene Adresse ist also selten falsch. Sie ist nur für eine andere
Frage gedacht als die, die man ihr gerade stellt. Ein Ping ohne Antwort beweist
in diesem Fall nichts über den Zustand des Geräts, sondern nur, dass man den
falschen Zettel aus der Schublade gezogen hat.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Die abgelesene Adresse einordnen
Zuerst den Anfang der Adresse ansehen. fe80 bedeutet Link-Local und damit nur eine Funkstrecke weit, fd bedeutet eine private Adresse innerhalb des Mesh. Beide sind für einen Zugriff vom Rechner aus in der Regel die falsche Wahl.
2.
Die richtige Adressart auswählen
Für die Erreichbarkeit von außerhalb des Thread-Netzes ist eine global gültige Adresse nötig. Der Border Router stellt dafür ein Präfix bereit, aus dem die Geräte sich eine solche Adresse bilden. Fehlt dieses Präfix, hat kein Gerät im Mesh eine von außen brauchbare Adresse.
3.
Prüfen, ob das Heimnetz IPv6 überhaupt zulässt
Der Rückweg muss ebenfalls funktionieren. Ist IPv6 im Heimnetz abgeschaltet oder werden Router-Ankündigungen unterdrückt, weiß der Rechner nicht, dass es zum Thread-Präfix eine Route über den Border Router gibt. Der Aufruf läuft dann in die falsche Richtung.
4.
Vom richtigen Netzsegment aus testen
Ein Zugriff aus einem anderen VLAN oder über ein VPN nimmt einen Weg, auf dem der Border Router gar nicht liegt. Der erste Test gehört deshalb ins selbe Segment wie der Border Router selbst.
5.
Nicht die Locator-Adresse als feste Adresse verwenden
Ein Teil der Adressen eines Thread-Geräts hängt an seiner Position im Netz und ändert sich, wenn sich die Topologie ändert. Wer eine solche Adresse in eine Konfiguration einträgt, hat morgen einen Fehler, der wie ein Ausfall aussieht und keiner ist.
Häufige Fragen (FAQ)
?Warum hat ein Thread-Gerät mehrere IPv6-Adressen?
Weil jede eine andere Aufgabe hat. Die OpenThread-Dokumentation unterscheidet unter anderem eine Link-Local-Adresse, die mit fe80 beginnt, für den direkten Funknachbarn, eine Mesh-Local-Adresse, die mit fd beginnt, für das Thread-Netz unabhängig von der Topologie, dazu topologieabhängige Locator-Adressen und eine globale Adresse. Welche man erwischt, entscheidet darüber, ob überhaupt jemand antwortet.
?Woran erkenne ich, ob ich eine brauchbare Adresse vor mir habe?
Am Anfang der Adresse. Beginnt sie mit fe80, reicht sie nur bis zum unmittelbaren Funknachbarn. Beginnt sie mit fd, ist sie eine private Adresse aus dem Thread-Mesh und außerhalb davon wertlos. Für den Zugriff von außerhalb des Thread-Netzes braucht es eine global gültige Adresse, die das Gerät aus einem vom Border Router bereitgestellten Präfix bildet.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.