本記事では、オープンソースで利用できる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-SNMPはUNIX、Linux(Red Hat系)やWindowsなど様々なプラットフォームに対応したオープンソースのソフトウェアで、かつてはUCD-SNMPプロジェクトとして知られていましたが、2000年から同名でのプロジェクトに改められました。
今回はCentOS7にNet-SNMPをインストールし、GNS3上のCiscoルータ(c7200)に対して基本的なSNMPコマンドを実行してみます。
Net-SNMPのインストール
> yum -y install net-snmp net-snmp-utils
Ciscoルータの設定
GNS3上で起動したCiscoルータ(c7200)に以下のsnmp設定を行います
ここではpublic
としてRead Only
、private
として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コマンドの実行方法について学んでいきます。