Engineering Note

プログラミングなどの技術的なメモ

Net-SNMPの基本的な使い方

network_icon

本記事では、オープンソースで利用できるNet-SNMPを用いて、SNMPに対応したIP機器などに要求するSNMPコマンドの基本的な使い方について学んでいきます。

 

 

SNMPとは

SNMP(Simple Network Management Protocol)とは、IP機器(サーバやルータなど)を管理するために1988年に導入されたプロトコルです。

SNMPを用いることで、サーバなどのCPUの使用率や温度状態をポーリングしたり、またルータなどのインタフェースダウンなど異常が発生した際にトラップ(Trap)と呼ばれるものを管理者(Manager)に送信することで、障害検知を容易にすることができます。

SNMPはこれまでにSNMPv1、SNMPv2(厳密にはSNMPv2c)、SNMPv3の3つのバージョンがありますが、SNMPv2がデファクトスタンダードとなっています。

 

Net-SNMPとは

Net-SNMPUNIXLinuxRed Hat系)やWindowsなど様々なプラットフォームに対応したオープンソースのソフトウェアで、かつてはUCD-SNMPプロジェクトとして知られていましたが、2000年から同名でのプロジェクトに改められました。

 

 

今回はCentOS7にNet-SNMPをインストールし、GNS3上のCiscoルータ(c7200)に対して基本的なSNMPコマンドを実行してみます。

 

Net-SNMPのインストール

それではyumからNet-SNMPをインストールします。

 

 > yum -y install net-snmp net-snmp-utils    

 

Ciscoルータの設定

GNS3上で起動したCiscoルータ(c7200)に以下のsnmp設定を行います

ここではpublicとしてRead OnlyprivateとしてRead Writeを設定します。

 

 Router(config)# snmp-server community public RO
 Router(config)# snmp-server community private RW

 

snmpwalkコマンド

snmpwalkコマンドとは、機器が保有するMIBツリーの一部を読み込むためのコマンドで、実際はget-nextの操作を行うものになります。

以下ではインタフェース情報を取得しています。

 

 > snmpwalk -v 2c -c public router_ip interface
 IF-MIB::ifNumber.0 = INTEGER: 3
 IF-MIB::ifIndex.1 = INTEGER: 1
 IF-MIB::ifIndex.2 = INTEGER: 2
 IF-MIB::ifIndex.4 = INTEGER: 4
 IF-MIB::ifDescr.1 = STRING: FastEthernet0/0
 IF-MIB::ifDescr.2 = STRING: FastEthernet0/1
 IF-MIB::ifDescr.4 = STRING: Null0
 IF-MIB::ifType.1 = INTEGER: ethernetCsmacd(6)
 IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
 IF-MIB::ifType.4 = INTEGER: other(1)
 IF-MIB::ifMtu.1 = INTEGER: 1500
 IF-MIB::ifMtu.2 = INTEGER: 1500
 IF-MIB::ifMtu.4 = INTEGER: 1500
 IF-MIB::ifSpeed.1 = Gauge32: 100000000
 IF-MIB::ifSpeed.2 = Gauge32: 100000000
 IF-MIB::ifSpeed.4 = Gauge32: 4294967295
 IF-MIB::ifPhysAddress.1 = STRING: ca:1:17:4c:0:8
 IF-MIB::ifPhysAddress.2 = STRING: ca:1:17:4c:0:6
 IF-MIB::ifPhysAddress.4 = STRING: 
 IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
 IF-MIB::ifAdminStatus.2 = INTEGER: down(2)
 IF-MIB::ifAdminStatus.4 = INTEGER: up(1)
 IF-MIB::ifOperStatus.1 = INTEGER: up(1)
 IF-MIB::ifOperStatus.2 = INTEGER: down(2)
 IF-MIB::ifOperStatus.4 = INTEGER: up(1)
 .
 .
 .

 

上記のifIndexから1、2、4というインデックスがあり、それらはそれぞれ、FastEthernet0/0、FastEthernet0/1、そしてNull0という説明が与えられていることがわかります。

 

snmpgetコマンド

snmpgetコマンドとは、1度に一つのMIBオブジェクトを取得するコマンドになります。

以下ではインタフェース(FastEthernet0/1)の状態を取得しています。

なお、ifOperStatusは"The current operational state of the interface"の意味になります。

 

 > snmpget -v 2c -c private router_ip ifOperStatus.2
 IF-MIB::ifOperStatus.2 = INTEGER: down(2)

 

インタフェースがshutdownしていることがわかりました。

 

snmpsetコマンド

snmpsetコマンドとは、対象のオブジェクトの状態を変更する時に用い、コミュニティがread-writeまたはwrite-onlyになっている場合可能になります。

以下では上記で確認したFastEthernet0/1のインタフェースをupにしてみます。

インタフェースの状態を変更するにはifAdminStatusを指定し、Integerを意味するiの引数の後に変更する値を指定します。

 

 > snmpset -v 2c -c private router_ip ifAdminStatus.2 i 1
 IF-MIB::ifAdminStatus.2 = INTEGER: up(1)
 > snmpget -v 2c -c private router_ip ifOperStatus.2
 IF-MIB::ifOperStatus.2 = INTEGER: up(1)

 

インタフェースがupになったことが確認できます。

 

最後に

今回はNet-SNMPを用いて簡単なSNMPコマンドの実行方法について学びました。

次回はPerlスクリプトを用いたSNMPコマンドの実行方法について学んでいきます。

 

参考書籍

入門SNMP