標準でインストールされる MIB ファイルだけでは足らない場合 MIB ファイルを追加する必要があります。
以下は ScreenOS 6.2 の MIB ファイルを追加する場合の例です。(CentOS 7, snmpwalk ver5.7.2 の例です)
- default の MIB の参照ディレクトリを確認する
snmpwalk を引数なしで実行すると usage が表示されますが、その -M オプションの説明の下に default の MIB ファイルの参照ディレクトリが表示されます。
USAGE: snmpwalk [OPTIONS] AGENT [OID] (中略) General options -m MIB[:...] load given list of MIBs (ALL loads everything) -M DIR[:...] look in given list of directories for MIBs (default: /usr/share/snmp/mibs/) (以下略)
- snmp.conf の場所を確認する
snmpconf を実行すると、現在存在している conf が表示されます。
[root@localhost ~]# snmpconf The following installed configuration files were found: 1: /etc/snmp/snmpd.conf 2: /etc/snmp/snmptrapd.conf 3: /root/.snmp/snmp.conf Would you like me to read them in? Their content will be merged with the output files created by this session. Valid answer examples: "all", "none","3","1,2,5" Read in which (default = all):
既に作成されていればそのファイルを編集するか、削除して新しく作るのかを検討します。
また今回は snmpconf で snmp.conf は作りませんが、snmpconf で作成すると最後に以下のようなメッセージがでます。
The following files were created: snmp.conf These files should be moved to /usr/share/snmp if you want them used by everyone on the system. In the future, if you add the -i option to the command line I'll copy them there automatically for you. Or, if you want them for your personal use only, copy them to /root/.snmp . In the future, if you add the -p option to the command line I'll copy them there automatically for you.
snmp.conf はみんなで使うなら /usr/share/snmp、ひとりで使うなら ~/.snmp に置きましょう、ということですね。
- MIB ファイルの配置
ScreenOS 6.2 の MIB を配置します。
今回は /tmp/6.2.0.mibs.zip の内容を /usr/share/snmp/mibs/screenos/ に展開します。wget https://www.juniper.net/techpubs/software/screenos/screenos6.2.0/6.2.0.mibs.zip -P /tmp unzip /tmp/6.2.0.mibs.zip -d /usr/share/snmp/mibs/screenos/
- snmp.conf の作成
今回は空のファイルから直接テキストエディタを使って snmp.conf を作成します。
mibdirs として上記の default の MIB の参照ディレクトリ(以下の緑マーキング部分)と今回新たに参照するディレクトリ(以下の赤のマーキング部分)を記述します。ディレクトリの区切り文字は : (コロン) です。
次の行に mibs all を追記します。これは mibdirs で見つかったファイル全てを MIB ファイルとして評価するという意味 (らしい) です。mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/screenos/6.2.0.mibs/snmpv2 mibs all
- MIB ファイルが参照されることを確認
snmptranslate で配置した MIB ファイルが参照されることを確認します。
追加配置した MIB ファイルの OID 番号を指定し -Of オプションを指定することで OID シンボルが表示されることを確認します。[root@localhost ~]# snmptranslate .1.3.6.1.4.1.3224.7.11.1 -Of (略) Unlinked OID in NETSCREEN-SET-ADMIN-USR-MIB: nsSetAdminUser ::= { netscreenSetting 11 } Undefined identifier: netscreenSetting near line 67 of /usr/share/snmp/mibs/NS/NS-SET-ADMIN-USR.mib .iso.org.dod.internet.private.enterprises.netscreen.netscreenSetting.nsSetAdminUser.nsSetAdminUserLocalTable
上記ではなにかしらのエラーが出ていますが、変換自体はできているので OK です。(多分他の機器の MIB であればエラーは出ないんじゃないかな・・・?)
- MIB ファイルの修正
不幸にして ScreenOS 6.2 の MIB ファイルはエラーが発生してしまったので、これを修正してみることにします。
エラーメッセージ(前述の Unlinked OID ~)を読むと「9,49 行目は netscreenSettingMibModule だが、 67 行目は netscreenSetting であり MibModule がない」ということのようです。
なので、9,49 行目の末尾の MibModule を削除し netscreenSetting に統一してみることにします。
・・・というのをエラーがでるすべての mib ファイルで実施します(汗9: netscreenSettingMibModule 49: ::= { netscreenSettingMibModule 11 } 67: nsSetAdminUser OBJECT IDENTIFIER ::= { netscreenSetting 11 }
そんなのめんどくさい・・・と思う人はこちらで。
cd /usr/share/snmp/mibs/screenos/6.2.0.mibs/snmpv2 sed -e "s/MibModule//" NS-SET-*.mib -i sed -e "s/MibModule//" NS-VPN-*.mib -i
MIB ファイルを修正後、再度 snmptranslate や snmpwalk を実行し、エラーが出なくなっていれば成功です。
[root@localhost ~]# snmpwalk -c public -v 2c 192.168.0.1 .1.3.6.1.4.1.3224.7.11.1 -Of .iso.org.dod.internet.private.enterprises.netscreen.netscreenSetting.nsSetAdminUser.nsSetAdminUserLocalTable.nsSetAdminUserLocalEntry.nsAdminUserLocalIndex.0 = INTEGER: 0 .iso.org.dod.internet.private.enterprises.netscreen.netscreenSetting.nsSetAdminUser.nsSetAdminUserLocalTable.nsSetAdminUserLocalEntry.nsAdminUserLocalName.0 = STRING: ns .iso.org.dod.internet.private.enterprises.netscreen.netscreenSetting.nsSetAdminUser.nsSetAdminUserLocalTable.nsSetAdminUserLocalEntry.nsAdminUserLocalPriv.0 = INTEGER: 250 .iso.org.dod.internet.private.enterprises.netscreen.netscreenSetting.nsSetAdminUser.nsSetAdminUserLocalTable.nsSetAdminUserLocalEntry.nsAdminUserLocalRole.0 = INTEGER: not-assigned(0)