Benutzer:Torte/FindDeviceDraft
Diese Seite soll Hilfestellungen geben, wie man in einem fehlkonfigurierten Netzwerk die vorhandenen Geräte dennoch erreichen kann.
Allgemeines
- Backups: Kann man nicht oft genug erwähnen (und anlegen).
Spätestens nach jeder abgeschlossenen Konfigurationsänderungen sollte man ein Backup anlegen - im Zweifel lieber zu oft.
Dabei an alle Geräte denken, auch die Switches! - Reboot tut gut: Ob eine Konfigurationsänderung wirklich funktioniert, weiss man frühestens, nachdem die komplette Anlage einmal neu gestartet wurde und dann immer noch läuft. Manchmal lösen sich auch Probleme von alleine durch Aus-/Einschalten von Geräten, z.B. können sich auch einfache Switche mal "verschlucken" und z.B. Pakete nicht weiterleiten.
- Verkabelung: Die Netzwerkkabel bis zum nicht erreichbaren Gerät prüfen (sitzt der Stecker?) und mal testweise tauschen. Dabei auch nachsehen, ob z.B. die Switches auch eingeschaltet sind.
Exemplarischer Aufbau
Soweit nicht anders erwähnt, gilt in den Beispielen folgender Aufbau:
- 1 Core-Router
Name: core - 1 Managed Switch
- 4 Router für die Umgebung
Namen: nord, ost, sued, west - Core und Umgebungs-Router befinden sich am gemeinsamen Switch.
Das Interface, über das sich alle Geräte erreichen können (sollen), heisst auf allen Geräten "eth0.11" und hat die VLAN-ID=11
Serielle Konsole
- Vorteil: Es kann schon sehr früh im Boot-Prozess eingegriffen werden, z.T. schon vor dem Laden des Kernels
- Nachteile:
- Gerät muss physisch erreichbar sein
- Gehäuse muss geöfnet werden
- Meist muss erst eine Pfostenleiste eingelötet werden, in einigen Fällen auch noch zusätzliche Widerstände oder Brücken
- Ersetzt keine Netzwerkverbindung, z.B. ist so kein Zugriff auf die Weboberfläche des Gerätes möglich
- TTL-Wandler oder USB-TTL-Adapter ist erforderlich
Wichtig: Auf keinen Fall die seriellen Anschlüsse direkt mit einem anderen Gerät verbinden, sondern auf die unterschiedlichen Spannungen achten! |
- Die RS232-Schnittstelle eines PC benutzt +/-12V, die seriellen Anschlüsse der Router dagegen meist 3,3V.
- OpenWRT Wiki: Benutzung des seriellen Anschlusses
- OpenWRT Wiki: Liste mit seriellen Adaptern
IPv6
IPv6 bringt einige Verbesserungen gegenüber IPv4 mit, die es erlauben, Geräte auch in fehlkonfigurierten Netzwerken zu erreichen.
IPv6 in der Wikipedia
Link-Local Adressen
Sofern das Gerät IPv6 unterstützt (und sich standardkonform verhält), gilt:
- Netzwerkschnittstellen bekommen automatisch eine IPv6 "Link Local Unicast"-Adresse zugewiesen. Sie ergibt sich rechnerisch aus der MAC-Adresse des Interface (funktioniert auch anders herum), d.h. diese Adresse bleibt auch nach Neustart des Gerätes gleich.
- Link-Local Adressen werden nicht geroutet. Daher muss zum Ansprechen eines Gerätes über eine Link-Local-Adresse auch immer der Name der Schnittstelle mit angegeben werden. Beispiel: "ping ff02::1%eth0.11" (die Schnittstelle folgt nach dem "%", hier "eth0.11").
- Es sind nur Link-Local Adressen erreichbar, die sich am Switch im gleichen VLAN befinden.
Da die "Link Local Unicast" Adressen auch ohne DHCP oder manuelle Zuweisung feststehen und auch ein falsch konfiguriertes Routing die Erreichbarkeit dieser Adressen idR nicht beeinflusst, eignen sie sich besonders gut für Service- und Diagnosezwecke.
Übersichtliche Erklärung der IPv6 Adressbereiche
- Link Local Unicast Adressbereich: fe80::/10
Jedes der mit diesem Interface verbundenen Geräte kann mit seiner eigenen Adresse angesprochen werden. - Multicast Adressbereich: ff00::/8
Besonders nützlich ist hier die Adresse ff02::1, damit können alle mit diesem Interface verbundenen Geräte erreicht werden (Broadcast).
Beispiel: "ping ff02::1%eth0.11".
Rezepte: IPv6
Interface ermitteln
Zuerst muss man das Interface herausfinden, über das die Geräte kommunizieren können. Wenn man dazu nichts dokumentiert hat und auch die Benennung der Interfaces keine Hinweise gibt, muss man sie einzeln durchprobieren. Eine Liste der Interfaces erhält man mit dem Befehl "ifconfig":
root@core:~# ifconfig eth0 Link encap:Ethernet HWaddr 30:B5:C2:3E:9D:FB inet6 addr: fe80::32b5:c2ff:fe3e:9dfb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:98086947 errors:0 dropped:0 overruns:8 frame:0 TX packets:110619671 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:325003034 (309.9 MiB) TX bytes:1707952294 (1.5 GiB) Interrupt:4 eth0.10 Link encap:Ethernet HWaddr 30:B5:C2:3E:9D:FB UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3500857 errors:0 dropped:0 overruns:0 frame:0 TX packets:3266652 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:923155922 (880.3 MiB) TX bytes:3365257313 (3.1 GiB) eth0.11 Link encap:Ethernet HWaddr 30:B5:C2:3E:9D:FB inet addr:10.20.30.1 Bcast:10.20.30.255 Mask:255.255.255.0 inet6 addr: fe80::32b5:c2ff:fe3e:9dfb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:33128035 errors:0 dropped:8751 overruns:0 frame:0 TX packets:57652658 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3929493768 (3.6 GiB) TX bytes:63172311135 (58.8 GiB)
Geräte aufspüren
Hat man das passende Interface (oder probiert sie einzeln durch), führt man einen "ping" auf die Multicast Adresse dieses Interfaces aus. Es melden sich dann alle über dieses Interface erreichbaren Geräte zurück:
root@core# ping ff02::1%eth0.11 PING ff02::1%eth0.11 (ff02::1%eth0.11): 56 data bytes 64 bytes from fe80::32b5:c2ff:fe3e:9dfb: seq=0 ttl=64 time=0.487 ms 64 bytes from fe80::9ade:d0ff:fe88:6f5a: seq=0 ttl=64 time=2.923 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe65:dbca: seq=0 ttl=64 time=3.425 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe88:7174: seq=0 ttl=64 time=3.606 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe88:7662: seq=0 ttl=64 time=3.685 ms (DUP!) 64 bytes from fe80::32b5:c2ff:fe3e:9dfb: seq=1 ttl=64 time=0.440 ms 64 bytes from fe80::9ade:d0ff:fe88:7174: seq=1 ttl=64 time=1.447 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe88:6f5a: seq=1 ttl=64 time=1.506 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe65:dbca: seq=1 ttl=64 time=1.562 ms (DUP!) 64 bytes from fe80::9ade:d0ff:fe88:7662: seq=1 ttl=64 time=1.731 ms (DUP!) ^C
In diesem Fall gibt es 5 Antworten: Eine vom Gerät, auf dem man arbeitet (hier: "core"), die wegen der Laufzeiten als erste ankommt, sowie 4 weitere Geräte. Weil alles Antworten auf die selbe "ping" Frage sind, erscheint bei den doppelten Antworten "(DUP!)". Nach dem zweiten Durchlauf wurde mit "STRG+C" abgebrochen.
Geräte einzeln erreichen
Nachdem man so die Liste der "Link Local Unicast" Adressen ermittelt hat, kann man die Geräte über diese Adressen ansprechen, z.B. per "ssh" (auch hier das Interface explizit angeben):
root@core:~# ssh fe80::9ade:d0ff:fe88:6f5a%eth0.11 Host 'fe80::9ade:d0ff:fe88:6f5a%eth0.11' is not in the trusted hosts file. (ssh-rsa fingerprint md5 56:e9:f6:d2:06:9a:64:d3:5e:2a:ad:67:fb:04:a5:9e) Do you want to continue connecting? (y/n) y root@fe80::9ade:d0ff:fe88:6f5a%eth0.11's password: BusyBox v1.25.1 () built-in shell (ash) _____ _ __ _ | ___| (_)/ _| | | | |_ _ __ ___ _| |_ _ _ _ __ | | __ | _| '__/ _ \ | _| | | | '_ \| |/ / | | | | | __/ | | | |_| | | | | < \_| |_| \___|_|_| \__,_|_| |_|_|\_\ Firmware Berlin (Hedy 1.0.0 rev 9cd06054a3) Generic - ar71xx/generic https://wiki.freifunk.net/Berlin:Firmware https://github.com/freifunk-berlin ----------------------------------------------------- If you find bugs please report them at: https://github.com/freifunk-berlin/firmware/issues For questions write a mail to <berlin@berlin.freifunk.net> or check https://berlin.freifunk.net/contact for our weekly meetings. root@nord:~#
Auf der Shell sieht man nun anhand des Prompts, auf welchem Gerät man gelandet ist.
Das ist ein guter Zeitpunkt, in seiner Dokumentation zu vermerken, welches Gerät welche IPv6 Link-Local-Unicast Adresse hat.
SSH
Port-Forwarding
Mit "ssh" kann man sich nicht nur auf Geräten einloggen, sondern (unter anderem) auch Port-Weiterleitungen zu weiteren Geräten in diesem Netzwerk einrichten, die sonst ggf. nicht erreichbar sind. Die Syntax dafür ist: ssh user@host -L localport:remotehost:remoteport "remotehost" kann dabei eine IPv4-Adresse, IPv6-Adresse oder ein Hostname sein. Beim Weiterleiten von IPv6-Adressen muss diese Adresse in eckige Klammern ('[' und ']') eingefasst werden.
Rezepte: SSH
Webserver weiterleiten
Angenommen, man kann von seinem PC aus "core" erreichen, jedoch nicht die weiteren Geräte in dessen Netz (z.B. weil ein Routing Daemon falsch konfiguriert ist). Vom "core" aus ist jedoch eine Verbindung zu den weiteren Geräten über die IPv6 Link-Local Adressen möglich (siehe oben).
Um dann z.B. an die Weboberfläche eines der verbundenen Geräte (z.B. "nord") zu gelangen, kann man "ssh" anweisen, den Webserver-Port eines Gerätes (fe80::9ade:d0ff:fe88:6f5a%eth0.11) an den lokalen PC weiterzuleiten:
ssh root@core -L 8080:[fe80::9ade:d0ff:fe88:6f5a%eth0.11]:80
Das bedeutet umgangssprachlich: «ssh: Verbinde dich als Benutzer "root" mit dem Gerät "core". Öffne auf meinem lokalen PC den Port 8080, und wenn ich mich mit diesem verbinde, leite das an die Adresse "fe80::9ade:d0ff:fe88:6f5a%eth0.11" an den Port 80 weiter.»
Man kann dann in seinem Browser http://localhost:8080/ öffnen und landet so auf dem Webserver des Routers "nord".
Um sich per HTTPS zu verbinden, muss beim ssh-Aufruf der HTTPS Port 443 (statt 80) angegeben werden:
ssh root@core -L 8080:[fe80::9ade:d0ff:fe88:6f5a%eth0.11]:443
Und im Browser ist dann https://localhost:8080/ (auf das https achten!) anzuwählen.
SSH weiterleiten
Das kann z.B. sinnvoll sein, wenn das Zielgerät nicht direkt erreichbar ist und auch kein Passwort-Login erlaubt, aber man einen public-key auf dem Zielgerät installiert hat.
Man könnte nun seinen private-Key auf den "core" kopieren, und sich dann von diesem aus weiter verbinden, aber private-Keys haben auf Routern nicht wirklich was zu suchen (es wäre nicht das erste Mal, dass eine schlecht programmierte Webseite den Download beliebiger Dateien vom Host erlaubt).
Dazu zuerst den SSH-Port des entfernten Gerätes ("nord") auf den lokalen Port 2222 weiterleiten:
ssh root@core -L 2222:[fe80::9ade:d0ff:fe88:6f5a%eth0.11]:22
Im zweiten Schritt verbindet man sich über diesen Tunnel zum Gerät "nord":
ssh -p 2222 root@localhost