j3iiifn’s blog

ネットワーク、インフラ、セキュリティ、プログラミング(Python、Android)についての備忘録

VyOSのプライベートMIBをNet-SNMPに読み込ませる

SNMP Trapを勉強しようと思い、VyOSでTrapが飛ぶようなイベントを発生させて、Trapの内容を見ていた。

Link up/downはRFCで定義されたMIBを使用しているので問題なく読めた。 しかし、BGP peer up/downはVyOS独自(正確に言うとGNU Zebra独自)のMIBを使用しているため、プライベートMIBを拾ってきてNet-SNMPに読み込ませなければならない。

本記事では、VyOSのプライベートMIBをNet-SNMPに読み込ませる手順を紹介する。

環境

Ubuntu

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

VyOS

vyos@vyos-1:~$ show version
Version:      VyOS 1.1.8
Description:  VyOS 1.1.8 (helium)
Copyright:    2017 VyOS maintainers and contributors
Built by:     maintainers@vyos.net
Built on:     Sat Nov 11 13:44:36 UTC 2017
Build ID:     1711111344-b483efc
System type:  x86 64-bit
Boot via:     image
Hypervisor:   VMware
HW model:     VMware Virtual Platform
HW S/N:       VMware-56 4d f6 1e a9 ac 47 15-e3 d1 44 0e 99 66 ac fe
HW UUID:      564DF61E-A9AC-4715-E3D1-440E9966ACFE
Uptime:       15:03:57 up 10:46,  2 users,  load average: 0.00, 0.01, 0.05

手順

Ubuntuでsnmptrapdや標準MIBが使えるようにする。

$ sudo apt install snmp snmp-mibs-downloader

VyOSのソースコードをダウンロードする。

$ wget https://github.com/vyos/vyos-frr/archive/current.tar.gz
$ tar xvzf current.tar.gz

以下のように、VyOSのプライベートMIBファイルがソースコードに含まれている。

$ find vyos-frr-current -type f | grep -i smi
vyos-frr-current/zebra/GNOME-SMI

$ find vyos-frr-current -type f | grep -i mib
vyos-frr-current/zebra/GNOME-PRODUCT-ZEBRA-MIB
vyos-frr-current/ospf6d/OSPFv3-MIB.txt
vyos-frr-current/bgpd/BGP4-MIB.txt
vyos-frr-current/ripd/RIPv2-MIB.txt
vyos-frr-current/ospfd/OSPF-TRAP-MIB.txt
vyos-frr-current/ospfd/OSPF-MIB.txt

上記のMIBファイルを /usr/share/snmp/mibs-vyos/ ディレクトリにコピーする。

$ sudo mkdir /usr/share/snmp/mibs-vyos/
$ find vyos-frr-current -type f | grep -i mib | xargs -I% sudo cp % /usr/share/snmp/mibs-vyos/
$ find vyos-frr-current -type f | grep -i smi | xargs -I% sudo cp % /usr/share/snmp/mibs-vyos/

/usr/share/snmp/mibs-vyos/ の中身はこのようになる。

$ ls /usr/share/snmp/mibs-vyos/
BGP4-MIB.txt  GNOME-PRODUCT-ZEBRA-MIB  GNOME-SMI  OSPF-MIB.txt  OSPF-TRAP-MIB.txt  OSPFv3-MIB.txt  RIPv2-MIB.txt

snmpcmdが /usr/share/snmp/mibs-vyos/ を読み込むようにするために、 /etc/snmp/snmp.conf の内容を次の通りにする。

MIBDIRS +/usr/share/snmp/mibs-vyos
MIBS all

結果

設定前後で、snmptrapdの出力は以下のように変化する。 特に、 iso.3.6.1.4.1.3317.1.2.2.0.2GNOME-PRODUCT-ZEBRA-MIB::bgpd.0.2 に変換されている点に注目したい。

Before:

vyos-1
UDP: [172.16.178.130]:33031->[172.16.178.131]:162
iso.3.6.1.2.1.1.3.0 0:7:59:04.73
iso.3.6.1.6.3.1.1.4.1.0 iso.3.6.1.4.1.3317.1.2.2.0.2
iso.3.6.1.2.1.15.3.1.14.192.168.47.2 "00 00 "
iso.3.6.1.2.1.15.3.1.2.192.168.47.2 6
iso.3.6.1.6.3.1.1.4.3.0 iso.3.6.1.4.1.3317.1.2.2

After:

vyos-1
UDP: [172.16.178.130]:33031->[172.16.178.131]:162
DISMAN-EVENT-MIB::sysUpTimeInstance 0:7:59:04.73
SNMPv2-MIB::snmpTrapOID.0 GNOME-PRODUCT-ZEBRA-MIB::bgpd.0.2
BGP4-MIB::bgpPeerLastError.192.168.47.2 "00 00 "
BGP4-MIB::bgpPeerState.192.168.47.2 established
SNMPv2-MIB::snmpTrapEnterprise.0 GNOME-PRODUCT-ZEBRA-MIB::bgpd

余談

勉強用に取得したVyOSのSNMP TrapのパケットキャプチャをGitHubに置いておいた。

github.com

参考