はじめに
「SNMP ってなあに?」という人向けに、SNMP についてざっくりと解説します。より深い知識を得るために、初めに押さえておきたいことについてまとめています。
SNMP is 何
SNMP とは、簡易ネットワーク管理プロトコル(Simple Network Management Protocol)というプロトコルの一種です。その名が示す通り、ネットワーク機器を管理するためのプロトコルです。161番と162番のUDPポートで通信します。1
現在、SNMP には v1, v2c, v3 の3種類のバージョンがあります。新しいバージョンほどセキュリティ面が強化されています。v3 の利用が推奨されており、v1 は脆弱性が指摘されているため非推奨、v2c が最も普及しています。
規格仕様については RFC で公開されています。
用語
エージェント
管理対象の機器を指します。ネットワーク機器、サーバ、ソフトウエア等に相当します。
マネージャー
エージェントを管理する側を指します。Nagios や Zabbix 等の監視ツールに相当します。
SNMP でできること
1. 情報を収集する(アクティブ)
マネージャーからエージェントに問い合わせて、エージェントの情報を収集することができます。インタフェースの通信量やCPU使用率を定期的に収集して、必要なときに照会する、等の使い方ができます。
Linux コマンドでは、マネージャーから snmpget
コマンドや snmpwalk
コマンド等を使ってエージェントに問い合わせます。
2. 情報を収集する(パッシブ)
エージェントが SNMP Trap という情報を送信し、マネージャーがキャッチすることで情報を収集することができます。例えば、あるインタフェースが LinkDown したら SNMP Trap を送信するようにエージェントを設定し、マネージャーは SNMP Trap の受信を待ち受けます。
SNMP Trap でやり取りする情報は、例に挙げたようなステータス変化など、ややイレギュラーな内容が多い印象があります。
Linux コマンドでは snmptrap
コマンドで SNMP Trap を送信することができるので、マネージャー側の動作確認に用いることができます。
3. 情報を操作する
マネージャーからエージェントの情報を書き換えて、エージェントの機器を制御することができます。制御できる情報は、書き込み権限のある情報に限られます。2
Linux コマンドでは、マネージャーから snmpset
コマンドを使って操作することができます。
OID と MIB
SNMP の情報は MIB によって定義されており、OID を指定して収集・操作します。
OID
OID(Object IDentifier)とは、各情報に対して割り当てられている一意な番号です。例えば「インデックス番号3n番のインタフェースの受信バイト数」を示す OID は .1.3.6.1.2.1.2.2.1.10.n
です。
マネージャーがエージェントに問い合わせる際に OID を併せて付与することで、指定の情報を収集します。また SNMP Trap の OID から、エージェントからどのような情報が送られてきたのか知ることができます。
OID の内容は、後述の MIB ファイルで定義されています。
MIB
MIB(Management Information Base)とは、前述の OID の情報群です。MIB は木構造になっており、OID そのものが構造内の位置を示しています。この構造は「MIB ファイル」というファイルで定義されています。
MIB ファイルには、各 OID が何を意味するのかという説明が定義として書かれています。OID を知っていれば情報そのものは収集できますが、その情報が何を意味するのかは、MIB ファイルの定義がなければ解釈することができません。
MIB は「標準 MIB」と「独自 MIB4」に大別できます。
標準 MIB は一般的な情報であり、エージェントによって情報の内容が変わりません。これに対して独自 MIB は、標準 MIB 以外のものを指し、主にはエージェントのベンダーが独自に定義した OID 群を指す場合が多いです。IANA に申請することで、指定の OID 以下は申請したベンダーが自由に定義することができます。5
ベンダーが定義した OID は MIB ファイルとしてエージェントの機器に同梱したり、マネージャー向けに配布されたりします。