Switch mit Ports, an drei Ports hängen Alias-Schilder wie UPLINK-CORE-SW1
|

OmniSwitch: Port-Aliase automatisch aus LLDP setzen

Ein typisches Szenario: Ein Access Point ist ausgefallen, man verbindet sich remote auf den Switch und möchte nachsehen, an welchem Port er hing. Solange das Gerät online ist, verrät LLDP das zuverlässig. Ist es aber offline, ist auch der LLDP-Eintrag verschwunden – und der Port ist nur noch einer von vielen ohne Link. Ohne gepflegte Port-Beschreibungen bleibt dann nur Raten, die Doku zu suchen oder jemanden vor Ort zu schicken.

Die Lösung ist einfach: Die LLDP-Information muss gesichert werden, solange das Gerät noch online ist. Genau das macht das kleine Python-Script, das ich in diesem Artikel vorstelle. Es liest die LLDP-Nachbarn einer Alcatel-Lucent Enterprise OmniSwitch aus und schreibt daraus sprechende Interface-Aliase in die Konfiguration. Fällt ein Gerät später aus, steht am Port weiterhin, was dort angeschlossen war.

Die Idee

LLDP liefert für jeden Port mit einem aktiven Nachbarn unter anderem dessen Systemnamen, die Systembeschreibung und die Beschreibung des Gegenports. Daraus lässt sich ein sinnvoller Alias ableiten, ohne dass man jeden Port von Hand pflegen muss:

Nachbar Vorgeschlagener Alias
OmniSwitch CORE-SW1, Port 1/1/49 UPLINK-CORE-SW1_1_1_49
Access Point AP-EG-01, eth0 OAW-AP-EG-01_eth0
Router fritz.box, LAN:3 fritz.box_LAN3

Ist der Nachbar selbst eine OmniSwitch, bekommt der Alias das Präfix UPLINK-. Bei einem OmniAccess Stellar Access Point wird OAW- vorangestellt. So erkennt man in show interfaces alias auf einen Blick, wo die Uplinks sind und wo die APs hängen.

Wie das Script arbeitet

Das Script läuft direkt auf der Switch-Shell und nutzt ausschließlich die bekannten CLI-Kommandos:

  1. show lldp remote-system – liest alle LLDP-Nachbarn aus
  2. show interfaces alias – liest die aktuell gesetzten Aliase
  3. Für jeden Port wird ein neuer Alias vorgeschlagen und dem bisherigen gegenübergestellt
  4. interface <port> alias "<alias>" – setzt den Alias, wenn gewünscht

Ein Detail, das mir wichtig war: Der Alias wird aus Daten gebaut, die das Nachbargerät per LLDP schickt, und landet anschließend in einem Shell-Kommando. Ein manipulierter Systemname könnte so im schlimmsten Fall beliebige Befehle auf dem Switch ausführen. Deshalb ersetzt das Script konsequent jedes Zeichen außerhalb von A–Z a–z 0–9 . _ - durch einen Unterstrich.

Voraussetzungen

  • OmniSwitch mit AOS 8.x und Python 3 auf dem Switch (getestet mit AOS 8.10R2)
  • LLDP auf den relevanten Ports aktiviert

Getestet habe ich das Script auf einer OS6360-P24 mit AOS 8.10.105.R02 GA, als Nachbarn waren OmniAccess Stellar AP1201, AP1221 und AP1431 mit AWOS 5.0.4 angeschlossen.

Installation und Nutzung

Das Script wird per SCP auf den Switch kopiert, zum Beispiel nach /flash/python/, und dort aufgerufen. Es gibt drei Modi:

python3 alias-lldp.py --dry-run   # nur Vorschläge anzeigen, nichts ändern
python3 alias-lldp.py             # jeden Port einzeln bestätigen
python3 alias-lldp.py --auto      # alle Vorschläge ohne Rückfrage übernehmen

Im interaktiven Modus fragt das Script pro Port nach: y setzt den Alias, n lässt den Port unverändert, a übernimmt diesen und alle folgenden Ports, s überspringt den Rest.

Ich empfehle, immer zuerst mit --dry-run zu starten. Dann sieht man genau, welcher Port welchen Alias bekommen würde – und auch, welcher alte Alias dabei überschrieben wird.

Wichtig: write memory

Die Änderungen landen zunächst nur in der laufenden Konfiguration. Damit sie einen Neustart überleben, muss man sie anschließend wie gewohnt mit write memory speichern.

Fazit

Das Script ist bewusst klein und ohne Abhängigkeiten gehalten. Es konserviert das Wissen, das LLDP nur im laufenden Betrieb liefert, dauerhaft in der Switch-Konfiguration. Wenn dann remote ein Gerät nicht erreichbar ist, sieht man am Port sofort, was dort hängen sollte – statt in alten Unterlagen zu suchen oder jemanden zum Nachschauen zu schicken. Sinnvoll ist es, das Script nach Installationen und Umbauten einmal laufen zu lassen, damit die Aliase aktuell bleiben.

Das Script ist unter MIT-Lizenz auf GitHub verfügbar: github.com/dgawin/ALE-LLDP-Alias.

Hinweis: Es handelt sich um ein privates Projekt, das weder mit Alcatel-Lucent Enterprise noch mit meinem Arbeitgeber SPIE verbunden ist. Nutzung auf eigene Verantwortung – bitte vor dem produktiven Einsatz immer mit --dry-run testen.

Ähnliche Beiträge