SNMP に関する基本的な用語のメモ。
- 標準 MIB と 拡張 MIB
MIB は大きく 2 つの領域に分かれています。
- 標準 MIB (.1.3.6.1.2.1 .iso.org.dod.internet.mgmt.mib-2)
標準 MIB (MIB-2) は主に機器共通で持っているであろう情報が登録されています。
例えば .iso.org.dod.internet.mgmt.mib-2.system.sysName (.1.3.6.1.2.1.1.5) でその機器の名前を、 .iso.org.dod.internet.mgmt.mib-2.ip.ipAddrTable.ipAddrEntry.ipAdEntAddr (.1.3.6.1.2.1.4.20.1.1) はその機器が持つ ip アドレスを取得することができます。(多分)
ただ、MIB-2 にあるデータが必ず各機器に存在するか?というとそうではなく例えば .iso.org.dod.internet.mgmt.mib-2.host.hrSWRun.hrSWRunTable.hrSWRunEntry.hrSWRunName (.1.3.6.1.2.1.25.4.2.1.2) は Windows は実行プロセス名を列挙しますが、ScreenOS は「オブジェクトがない (=No Such Object available on this agent at this OID)」と戻します。(多分) - 拡張 MIB (.1.3.6.1.4.1 .iso.org.dod.internet.private.enterprises)
拡張 MIB (enterprises) は主に機器固有の情報が集められています。
機器固有と言っても同じアドレス (OID 番号) で機器が違うと意味が違うのは困るので enterprises の直下は各ベンダーごとに番号が割り当てられていています。Windows のレジストリに例えると HKLM:\Software の直下はベンダー名になっているようなものです。なので異なるベンダーによるアドレス重複 (OID 番号の重複) はありません。逆に機器特有の情報を取得したい場合は、当該機器の MIB ファイルを取得しないと snmpwalk 等で取得したオブジェクトが何を示すのかわからない、ということでもあります。例えば、77 と 311 は Microsoft が、2021 は NET-SNMP (ucdavis) が割り当てられています。
.1.3.6.1.4.1.77 iso.org.dod.internet.private.enterprises.lanmanager .1.3.6.1.4.1.311 iso.org.dod.internet.private.enterprises.microsoft .1.3.6.1.4.1.2021 iso.org.dod.internet.private.enterprises.ucdavis
OID 番号が手元にあるけど、MIB ファイルは手元にないのでそれが何かがわからない、という場合は http://oidref.com/ が便利です。oidref.com/ の次に OID 番号を入力すると何かを教えてくれます。以下は net-snmp の OID 番号を入れてみた例です。
http://oidref.com/1.3.6.1.4.1.2021
- 標準 MIB (.1.3.6.1.2.1 .iso.org.dod.internet.mgmt.mib-2)
- コミュニティ
名前の通りコミュニティでアクセス制御に使用します。例えば public だと特定の公開範囲で読み込みのみ、private だと全ての範囲で読み書き可能、みたいな設定をします。
しかしよく使用されている SNMP v2 はコミュニティ名指定以外の認証(パスワード等)がないので、コミュニティ名が知られるとアクセスし放題です。なのでコミュニティ名は類推しにくいユニークな名称にしたほうが良いと思われますが、大体のケースで public をそのまま使っているようです(汗 - エージェントとマネージャー
エージェントが MIB を持っている側でありサーバー側です。監視対象(=機器)がエージェントになります。そして PC 等に設置されるマネージャーが MIB をアクセスするクライアント側です。
語感的にエージェントがクライアント側、マネージャーがサーバー側のように感じますが、MIB との関係だけでいえば語感とは逆なので注意です。
エージェントが部下、マネージャーが上司で、報告する元ネタ(=MIB)は部下が持っていて上司が適宜それを確認に行く、って感じですね。