SNMPでLLDP情報を拾ってくる

何をしたいのか

inet-henge に入力するLLDP情報をSNMPで拾いたい

GitHub - codeout/inet-henge: Generate d3.js based Network Diagram from JSON data.

LLDP-MIB

LLDP-MIBを使うとLLDP情報を拾ってこれる。

www.mibdepot.com

inet-hengeに使う情報は ホスト名ポート名対向ホスト名対向ポート名があれば十分そう。

これらに対応するMIBシンボルは次の通り。

パラメータ MIBシンボル
ホスト名 LLDP-MIB::lldpLocSysName
ポート名 LLDP-MIB::lldpLocPortDesc
対向ホスト名 LLDP-MIB::lldpRemSysName
対向ポート名 LLDP-MIB::lldpRemPortDesc

動作確認

トポロジはこんな感じで f:id:dos1506:20190408221554p:plain

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に突っ込む用のデータとしては十分かなと思う。