Ersteinrichtung
Als Linux-Administrator haben Sie eine neue Linux-Box mit 6 NICs eth0 bis eth5 installiert. Die eth0-Schnittstelle ist korrekt konfiguriert und alle anderen Schnittstellen sind derzeit aktiv, jedoch ohne IP-Adresse. Die Netzwerk-Jungs haben einfach vier Kabel an diese Box angeschlossen. Zwei LAN-Kabel verbinden die Box mit dem Produktionsnetzwerk und zwei verbinden die Box mit einem privaten Netzwerk. Sie wissen nur, dass eth0 mit dem Produktionsnetz verbunden ist. Sie wissen jedoch nicht, welche andere Netzwerkkarte an den gleichen Switch angeschlossen ist, da es unterschiedliche Servergenerationen gibt und / oder die Netzwerkmitglieder die falschen Netzwerkkarten für ihre Verbindungen verwenden.
Aufgabe zur Hand
Da dieses Setup für Ihre Infrastruktur typisch ist, möchten Sie die Konfiguration von Bonding-Schnittstellen automatisieren. Jetzt müssen Sie feststellen, welche NICs überhaupt nicht verbunden sind und welche NICs mit demselben Switch verbunden sind, damit sie verbunden werden können. Sie haben nur Zugriff auf Linux-Boxen und können die Switches nicht abfragen.
Ideen
Das Erkennen des Verbindungsstatus ist einfach:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
Aber wie stimmen Sie die Geräte überein, die an denselben Switch angeschlossen sind?
In HP-UX gibt es dafür ein Tool namens Linkloop [1]. Das offizielle Linux-Tool fehlt (es gibt jedoch ein altes SourceForce-Projekt).
Mögliche Lösungen, die mir bereits in den Sinn gekommen sind, sind:
Lauschen Sie auf allen Schnittstellen mit tcpdump. Erstellen und senden Sie ein ICMP-Paket (Broadcast). Die Schnittstellen, die dieses Paket sehen, müssen mit demselben Switch verbunden sein. -> brauche Vorschläge von einfachen Werkzeugen, die dafür verwendet werden können. Ich würde gerne einfache Shell-Befehle oder Python für das Scripting verwenden.
Versuchen Sie, über ein einfaches Protokoll (HTTP?) Mit einer externen Box zu sprechen und festzustellen, ob eine Antwort vorliegt. -> Fehleranfällig und abhängig von einer externen Box.
Haben Sie weitere Ideen oder Vorschläge, wie Sie diese Aufgabe lösen können?
Vielen Dank im Voraus für alle Kommentare!
Antworten:
Möglicherweise senden Ihnen die Switches bereits die gewünschten Informationen. Wenn es sich um Cisco-Switches handelt, wird standardmäßig ein Prozess namens CDP (Cisco Discovery Protocol) verwendet, der Informationen zu dem Switch bereitstellt, mit dem er verbunden ist.
Mit tcpdump können Sie diese Informationen wie folgt anzeigen (durch Ersetzen der entsprechenden Schnittstelle):
Die standardbasierte Version von CDP ist LLDP (Link Layer Discovery Protocol). Bei einigen Anbietern ist diese Option standardmäßig aktiviert und bei anderen deaktiviert, sodass die Anzahl der Meilen variiert. Es gibt einige LLDP-Implementierungen für Linux. Wenn Sie jedoch etwas Ähnliches wie oben möchten, können Sie dies verwenden (Richten Sie LLDP auf einem Cisco-Switch ein und testen Sie das Folgende, was besser mit dem obigen übereinstimmt):
Vorbehaltlich dessen würde ich sagen, dass eine von Ihnen bereitgestellte Änderung von Option 1 möglicherweise funktioniert. Anstatt jedoch einen Broadcast-ICMP zu senden, können Sie einen normalen ICMP (an einen Host, der nicht in der ARP-Tabelle enthalten ist) versuchen und die ARP-Pakete erfassen. Wenn eine ARP-Anfrage an eth0 gesendet wird und Sie diese auf eth1 und eth3 erhalten, wissen Sie, dass sich diese im selben VLAN befinden. Der einfachste Befehl dafür lautet wie folgt:
quelle
Wenn der Schalter kommuniziert mit Ihnen LLDP verwenden, können Sie in der Lage zu laufen LLDP und weitere Informationen dort zu finden.
quelle
Wenn es sich bei den Switches um Cisco-Geräte handelt, können Sie möglicherweise CDP-Informationen abrufen, vorausgesetzt, sie senden / senden CDP-Informationen
zB cdp tools oder cdpr
quelle
Warum nicht einfach das
linkloop
Tool herunterladen und erstellen ? Es ist nicht so alt ...Ansonsten würde ich nur ein Tool verwenden, das über Layer 2 sendet und sicherstellt, dass Sie es über tcpdump erhalten.
Das Senden eines Broadcast-ICMP-Pakets ist einfach
ping -b 192.168.1.255
quelle