SNMPとは ― 仕組みとネットワーク管理
SNMPとは、
SNMPとは、機器をまとめて監視・管理するプロトコル
SNMP(Simple Network Management Protocol)は、ルータ・スイッチ・サーバなど多数の機器を1台の管理用サーバからまとめて監視・設定するプロトコルです。監視する側のソフトウェアと、監視される機器のソフトウェアがやり取りして、機器の状態を把握します。
機器が何十台あっても、止まった機器や混んでいる回線にすぐ気づけます。2つのソフトウェアの役割、状態を表すMIB、定期的な問い合わせと機器からの通知の違いを順に説明します。
マネージャとエージェント
SNMPは、次の2つの役割で成り立っています。
- SNMPマネージャ:監視する側です。監視サーバで動くソフトウェアで、複数のエージェントに問い合わせたり、通知を受け取ったりします。SNMP管理ステーションとも呼びます。
- SNMPエージェント:監視される側です。ルータやスイッチなど、管理対象の機器で動くソフトウェアです。自分の情報を、MIBという形で持ちます。
1台のマネージャが複数のエージェントとやり取りできるのが、SNMPの利点です。管理者は機器を個別に確認する代わりに、監視サーバの画面で全体を見渡せます。
MIBとOID
エージェントが持つ管理情報の集合を、MIB(Management Information Base)と呼びます。日本語では、管理情報ベースと訳します。MIBは木構造で、機器の起動時間や通信量といった項目が、それぞれ木の中の1か所に対応します。
木構造の中の位置は番号で示します。根にあたるisoから目的の項目まで、通った枝の番号をドットでつないで表します。この番号をOID(Object Identifier)と呼びます。
たとえば、sysUpTimeはエージェントが起動してからの時間を表す項目で、RFC 1213で定義されたMIB-IIのsystemグループに属します。そのOIDは、次の図のとおりです。
同じ仕組みで、各メーカーはprivate(4)の枝の下に、自社だけで使う拡張MIBを定義しています。たとえば、Ciscoの枝は1.3.6.1.4.1.9です。標準MIBはメーカーをまたいで共通ですが、拡張MIBは機種ごとに異なる情報を扱います。
動かして確かめる:ポーリングとトラップ
マネージャとエージェントのやり取りには、定期的に問い合わせるポーリングと、機器から通知するトラップの2種類があります。次の図で切り替えると、先に話しかける側・使うポート番号・タイミングが変わります。
- 先に話しかけるのは
- マネージャ(監視サーバ)
- 使うポート番号
- UDP 161番(エージェント宛)
- タイミング
- 決まった間隔(例:30秒ごと)で、マネージャが自分から定期的に尋ねる
- 1監視サーバ(マネージャ) → ルータ(エージェント)GetRequest(OIDを指定して値を尋ねる、エージェントの161番宛)
- 2ルータ(エージェント) → 監視サーバ(マネージャ)Get Response(値を返す、エージェントの161番からマネージャの一時ポートへ)
これを30秒ごとなど一定の間隔で繰り返します。マネージャが尋ねない限り、エージェントの側から話しかけることはありません。トラフィック量など、時間の経過で変化する値の性能管理に向いています。
- 先に話しかけるのは
- エージェント(監視対象機器)
- 使うポート番号
- UDP 162番(マネージャ宛)
- タイミング
- 決まった間隔ではなく、異常などのイベントが起きた瞬間に、エージェントが自分から送る
- 1ルータ(エージェント) → 監視サーバ(マネージャ)Trap(回線が切れたなどの異常を通知、UDP 162)
マネージャが尋ねなくても、エージェントの方から通知が届きます。ポーリングの間隔を待たずに異常を把握できるので、障害への初動対応に向いています。ただし、Trapには受信確認がなく、エージェントは送るだけです。SNMPv2c以降にはInformRequestもあり、届いたかを確かめたい通知にはこちらを使います。
ポーリングは、マネージャが確認しに行くpull型の動きです。トラップは、エージェントが知らせるpush型の動きです。Trapには受信確認がありません。届いたかを確かめたいときは、InformRequestを使います。
値を書き換えるSet操作
ここまでのGetRequestとTrapは、値を読み取ったり通知したりするだけの操作でした。SNMPには、エージェントの設定を書き換えるSetRequestという操作もあります。
| 操作 | 送信元 | 向き | 意味 |
|---|---|---|---|
| GetRequest | マネージャ | マネージャ → エージェント | 指定したOIDの値を1つ尋ねる |
| GetNextRequest | マネージャ | マネージャ → エージェント | 指定したOIDの次の項目を尋ねる(MIBを順にたどるときに使う) |
| GetBulkRequest | マネージャ | マネージャ → エージェント | 複数のOIDの値をまとめて尋ねる(v2c以降) |
| GetResponse | エージェント | エージェント → マネージャ | Get・GetNext・GetBulk・Setへの応答として値を返す |
| SetRequest | マネージャ | マネージャ → エージェント | 指定したOIDの値を書き換える |
| Trap | エージェント | エージェント → マネージャ | 要求を待たずに、異常などのイベントを自分から通知する。受信確認はない |
| InformRequest | エージェント | エージェント → マネージャ | Trapと同様の通知だが、マネージャからの受信確認を伴う(v2c以降、RFC 3416) |
SetRequestを使うと、監視サーバから機器の設定を変更できます。たとえば、インタフェースの説明文や、一部機器の有効・無効を変更できます。GetRequestと違って機器の状態を変えるので、不正に使われないよう認証を強くする必要があります。
SNMPv1・v2cとv3
SNMPには3つのバージョンがあり、認証と暗号化の強さが異なります。
| バージョン | 認証 | 暗号化 | 主な |
|---|---|---|---|
| SNMPv1(RFC 1157) | コミュニティ名(平文) | なし | 最初のバージョン。GetBulkRequestがなく、大量の値をまとめて取得するのに向かない |
| SNMPv2c | コミュニティ名(平文) | なし | GetBulkRequestなどの機能を追加。認証はv1と同じくコミュニティ名だけで弱い |
| SNMPv3(RFC 3411〜3418) | USM(ユーザーごとのID・パスワード) | あり(USMで対応) | VACMでグループごとにアクセスできるMIBの範囲も制限できる。現在推奨される方式 |
SNMPv1とSNMPv2cは、コミュニティ名という文字列を合言葉として使います。コミュニティ名は暗号化されず、平文のままネットワークを流れるので、経路上で盗聴されると読み取られてしまいます。
コミュニティ名を知った攻撃者は、正規のマネージャになりすまして、GetRequestで情報を盗んだり、SetRequestで設定を書き換えたりできます。
SNMPv3は、この弱点に対応したバージョンです。仕様はRFC 3411〜3418で、まとめてSTD 62とも呼ばれます。新しく構築するネットワークでは、SNMPv3の利用が推奨されています。
SNMPv3では、ユーザーごとに認証と暗号化を行えます。この仕組みがUSM(User-based Security Model)で、RFC 3414で定められています。さらに、ユーザーをまとめたグループごとに、アクセスできるMIBの範囲も制限できます。この仕組みがVACM(View-based Access Control Model)で、RFC 3415で定められています。
運用管理の3分類とSNMPの関係
ネットワークの運用管理は、構成管理・障害管理・性能管理の3つに分けられます。SNMPは、この3つに使えるツールの1つですが、SNMPだけで3つの管理が完結するわけではありません。
- 構成管理:機器の構成情報を把握し、変更を記録する管理です。SNMPのGetRequestで設定値を読み取れます。変更履歴の記録は、SNMP以外の仕組みで行います。ネットワークをソフトウェアで一元的に制御するSDN(Software-Defined Networking)も、SNMP以外の仕組みです。
- 障害管理:障害を検出し、分析し、対応する管理です。トラップによる異常の即時通知と、ポーリングによる死活監視が、SNMPの得意な部分です。
- 性能管理:トラフィック量と転送時間を分析する管理です。インタフェースの通信量などをポーリングで取得し続けると、トラフィック監視ができます。
syslogとの違い・pingとの違い
SNMPは、マネージャがMIB・OIDで値を指定して取得する仕組みです。syslogは、機器が生成したログメッセージを、決まった宛先へ送り続ける仕組みで、標準のsyslogサーバはUDP514番を使います。マネージャ側から値を指定して尋ねる機能は、syslogにはありません。重大度レベル(Severity)やファシリティなど、syslogの仕組みはSyslogの記事にまとめています。
pingは、ICMPを使って相手に届くかどうかを確認するコマンドです。SNMPは、届くかどうかだけでなく、CPU使用率や通信量などの詳細な状態を取得・通知できます。また、pingは1回ごとの確認で、SNMPのポーリングは定期的な監視です。
直接つながった隣の機器を自動で見つけるCDPとLLDPは、機器どうしが自分の情報を知らせ合う仕組みです。CDPでは、隣の機器のSNMPエージェントのアドレスも知ることができます。
練習問題(全5問)
正解:ルータ・スイッチ・サーバなど
SNMPは、
正解:マネージャが
SNMPマネージャは、
正解:ポーリングは
ポーリングは、
正解:SNMPv1・v2cは
SNMPv1
正解:MIBは
MIBは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
