SNMPでLLDP情報を拾ってくる
何をしたいのか
inet-henge に入力するLLDP情報をSNMPで拾いたい
GitHub - codeout/inet-henge: Generate d3.js based Network Diagram from JSON data.
LLDP-MIB
LLDP-MIBを使うとLLDP情報を拾ってこれる。
inet-hengeに使う情報は ホスト名
、ポート名
、対向ホスト名
、対向ポート名
があれば十分そう。
これらに対応するMIBシンボルは次の通り。
パラメータ | MIBシンボル |
---|---|
ホスト名 | LLDP-MIB::lldpLocSysName |
ポート名 | LLDP-MIB::lldpLocPortDesc |
対向ホスト名 | LLDP-MIB::lldpRemSysName |
対向ポート名 | LLDP-MIB::lldpRemPortDesc |
動作確認
トポロジはこんな感じで
snmpwalkでRouter1とRouter2からLLDP情報を取得してみる
Router1
LLDP-MIB::lldpLocSysName.0 = STRING: Router1 LLDP-MIB::lldpLocPortDesc.1 = STRING: GigabitEthernet0/0 LLDP-MIB::lldpLocPortDesc.2 = STRING: GigabitEthernet0/1 LLDP-MIB::lldpLocPortDesc.3 = STRING: GigabitEthernet0/2 LLDP-MIB::lldpLocPortDesc.4 = STRING: GigabitEthernet0/3 LLDP-MIB::lldpRemSysName.0.2.2 = STRING: Router2 LLDP-MIB::lldpRemSysName.0.3.3 = STRING: Switch1-1 LLDP-MIB::lldpRemSysName.0.4.4 = STRING: Switch1-2 LLDP-MIB::lldpRemPortDesc.0.2.2 = STRING: GigabitEthernet0/1 LLDP-MIB::lldpRemPortDesc.0.3.3 = STRING: GigabitEthernet0/0 LLDP-MIB::lldpRemPortDesc.0.4.4 = STRING: GigabitEthernet0/0
Router2
LLDP-MIB::lldpLocSysName.0 = STRING: Router2 LLDP-MIB::lldpLocPortDesc.1 = STRING: GigabitEthernet0/0 LLDP-MIB::lldpLocPortDesc.2 = STRING: GigabitEthernet0/1 LLDP-MIB::lldpLocPortDesc.3 = STRING: GigabitEthernet0/2 LLDP-MIB::lldpLocPortDesc.4 = STRING: GigabitEthernet0/3 LLDP-MIB::lldpRemSysName.0.2.1 = STRING: Router1 LLDP-MIB::lldpRemSysName.0.3.2 = STRING: Switch2-1 LLDP-MIB::lldpRemSysName.0.4.3 = STRING: Switch2-2 LLDP-MIB::lldpRemPortDesc.0.2.1 = STRING: GigabitEthernet0/1 LLDP-MIB::lldpRemPortDesc.0.3.2 = STRING: GigabitEthernet0/0 LLDP-MIB::lldpRemPortDesc.0.4.3 = STRING: GigabitEthernet0/0
それぞれのフォーマットについて
ポート名は lldpLocPortDesc.<ifindex>
対向ホスト名は lldpRemSysName.x.<ifindex>.x
対向ポート名は lldpRemPortDesc.x.<ifindex>.x
inet-henge用のデータ整形
LLDP-MIB::lldpLocPortDescでifindexが把握できる。 ifindexが分かれば、そこから対向ホスト名、対向ポート名が紐付けられるので、、、いい感じにやる。
LLDP情報を定期的にDBに [ホスト名, ポート名, 対向ホスト名, 対向ポート名] という形で保存しておけばinet-hengeに突っ込む用のデータとしては十分かなと思う。