海の響きを懐かしむ

観たもの聴いたもの読んだものの記録と、日記など

SNMPの基本

[概要]
snmpとは、ネットワーク上の機器を監視・管理するためのアプリケーションレイヤのプロトコル。
サービスの稼働状況やトラフィック、物理的な機器の状態などを監視することができる。
現在のネットワークオペレーションにおいて一般的なプロトコル。


[RFC]

RFC 1441 - Introduction to version 2 of the Internet-standard Network Management Framework


[reference]
[1]@IT:監視を自動化するSNMP(1)
[2]
SNMPWALKを使ってみる - http://pnpk.net


[用語説明]

監視する側のホスト=manager
監視される側のホスト=agent

snmpUDPの上位プロトコルで、
161, 162番ポートを基本的に利用している


[MIB = Management Information Base]

ホストの管理情報のデータベース。
agentはMIBを参照することで管理機器の情報を取得する。
MIBを記述したファイルを、MIBファイルと言い、
各データはOIDという単位で管理される。


[OID = Object ID]

OIDは以下のように

  • .1.3.6.1.2.1.1.4

ピリオドで区切られた数字で表される。

OIDは一般的なファイルシステムのようにツリー構造になっている。
OIDの区切りのドットは、このツリーの分岐点を示している。(Unix pathでいうスラッシュのようなもの?)


代表的なOIDがまとまっているサイト
ごった煮 - FreeBSD導入記(覚え書き) - net-snmp OID一覧
サーバ監視項目でよく使う SNMP の MIB オブジェクト ID まとめ :: drk7jp
doc/mibhelp


[プロトコルの基本的な挙動]

PDU = Protocol Data Unit
PDUとはsnmp内のコマンドにあたるもの。以下の5種類がある。



GetRequest = 取得したい管理情報のOIDを指定し送るリクエスト。
GetNextManager = 指定したOIDの、ツリー構造的に次にあたるオブジェクトの情報をリクエストする。
SetRequest = 制御や機器の設定変更を行う場合に送るリクエスト。agentからはGetResponseが返ってくる。



GetResponse = OIDに対応する情報を返答する
TRAP = agentでインターフェースダウンなどの異常が発生した場合、自発的にagentからmanagerへその旨を通知する。


[community]
SNMPが管理するネットワークシステムの範囲。
管理者はcommunityに名前を付け、その権限に基づいてネットワークを管理するのでパスワード的な役割を果たす。

agentは、managerを

  • IP address
  • community

で認識している。これについては脆弱性の議論がなされている。


[UDPデータグラム]
SNMPのUDPデータグラムは下記のようになっている。

IP header
  |
UDP header
  |
SNMP message[SNMP version | community | PDU]


SNMP内の細かい構造は[1]が詳しい。


[実際の利用法]
テスト実行環境はUbuntu 10.04

sudo apt-get install snmpd // agentのインストール
sudo apt-get install snmp // managerのインストール

agentからはsnmpwalkというコマンドを用いる。
manを読むと、

snmpwalk [APPLICATION OPTIONS] [COMMON OPTIONS] [OID]

という使用例がある。
例えばローカルのネットワークインターフェースの数をみたい場合は、

snmpwalk -v 2c -c public 1localhost .1.3.6.1.2.1.2.1
IF-MIB::ifNumber.0 = INTEGER: 3

このようになる。