SNMP

シンプルネットワークマネジメントプロトコル
それが、SNMP の正式名称なんだけど…


プロトコルのやり取り自体はシンプル。
でも、それを覚えようとすると、本当に面倒…orz


ネットワーク上にある機器の状態を示す情報を収集/管理する SNMP Manager がいる。
Manager に情報を聞かれたら自分の状態を答える SNMP Agent がいる。


SNMP Agent は、何か聞かれるまで基本的に何もしない。
機器の内部情報は黙って収集してるだろうけど…。
どんなタイミングで収集してるんだろう?
ちなみに、情報は Object ID(略してOID)と呼ばれる項目に沿って収集されている。
OID に無い情報は、収集できない。


SNMP Manager は、管理者が設定した OID を元に SNMP Agent へ問い合わせをかける。
「この OID の現状は?」と問い合わせたら「この OID の内容は○○だよ」と返る。
○○ の中には、文字列だったり数字だったり。


とにかく SNMPの基本は、これだけ。


…といいつつ、SNMPのコミュニティ名とかを説明してないけど。
コミュニティ名は、アクセスする端末を一定の範囲に収めるために使われる。
パスワードと思ってもあながち間違いじゃない。
SNMP Manager と SNMP Agent とが同じコミュニティ名を持ってないと、アクセスすることすら出来ない。


それと、コミュニティ名と同じく、IPアドレスIPアドレスの帯域でもアクセスに制限をかけることが出来る。
同じコミュニティ名を使うローカルIPアドレスの端末からしか応答しない…という設定もできるわけだ。


また、どんな OID を取得できるか…は、Unix/Linux の場合 snmpwalk というコマンドでチェックできる。
コマンドの実行方法はこの記述の目的じゃないので割愛。
このコマンドで取得できない OID は、その OID 自体返さない設定*1か、コミュニティ名が異なるか、IPアドレスで制限をかけられている可能性が高い*2


OID がどんな意味をもつかは MIB で管理される。
MIB=マネジメントインフォメーションベース(Management Information Base)
これ、ふつうにテキストファイルなんだよね。
ちょっとは MIB の読み方を覚えてきたかな。


MIB 情報は、考え方が DNS に似てると思う。
ドットで区切られた数字の羅列を、人間が理解しやすい文字列(単語も使うけど略語もイニシャルも使う。以下、オブジェクト名と呼称)に置き換える。
SNMP Manager は、OID かオブジェクト名のどちらかを利用する。
OpenView なんかで、MIB情報がない場合にアラートが出ることがある*3けど、これは SNMP Trap というシステムの話なので、ここでは割愛。


trap を簡単に言うと、SNMP Agent はどこかの端末*4に対して trap と呼ばれるアクションを起こせる。
なにかヤバげな変化があったら、SNMP Manager からの問い合わせを待たずに OID を投げつける…という説明でわかる?

*1:たとえば、スイッチング HUB に HDD はないので HDD の空き容量を意味するOIDは返ってこない

*2:特定の端末/特定のコミュニティに対して OID に対する権限は変更できる。ゲストは見るだけ、管理者は設定まで出来る…とか。他にも考えられるけど、そもそもネットワーク的にアクセスできないというのは論外

*3:たとえば trapd.conf に記述がないとか

*4:よくあるのは SNMP Manager。Linux だと snmptrapd が起動している場合、これにあたる