業務用ネットワーク機器(ルーター・L2スイッチ等)ではSNMPプロトコルを使って、CPU・メモリ使用量・本体温度などのシステム情報からポートごとの通信量・アドレスまで様々な情報を取得できます。
今回はWindows PCのWLS2(Ubuntu)上でSNMPの情報を取得するためのか環境を整えていきたいと思います。
SNMPとは
SNMPの情報はMIBという以下のようなツリー構造で管理されており、各パラメータにはオブジェクト識別子(OID)が割り振られています。
各ベンダーが共通で使っている標準MIBとベンダー独自のプライベートMIBが存在します。プライベートMIBは各ベンダーにコードが割り当てられているためOIDが重複することはありません。
また、SNMPプロトコルにはSNMPv1、SNMPv2c、SNMPv3のバージョンがあります。v1、v2cは平文で通信する一方、v3には暗号化やユーザー認証機能がありセキュリティが向上しています。ここでは、設定が簡単なv2cを使っていきます。
検証環境
クライアントPC
- Windows11 Home (10でも同様に動くはずです)
- WSL2 (ディストリビューション: Ubuntu 20.04.3 LTS)
使用したネットワーク機器
- ルーター:NEC UNIVEGE IX2207 (FW ver.10.6.21)
- L2スイッチ:富士通 SR-S310TL2 (FW V14.04)
ルーター・スイッチの設定
まずは、ネットワーク機器でSNMPを使えるように設定していきます。
各機器にはあらかじめ以下のIPアドレスを設定しています。
- ルーターLAN側アドレス:192.168.10.1/24
- L2スイッチ:192.168.10.4/24
今回は検証用ということで、設定の手軽さ優先でセキュリティ面はガバガバです。ご注意ください!
NEC IX
とりあえずルーターのターミナルにてconfigure
コマンドで構成定義モードに入り、以下のコンフィグを投入すればSNMPが使用可能になります。
snmp-agent ip enable
snmp-agent ip community public
sysname IX2207
snmp-agent contact my-name
snmp-agent location my-room
#保存
write memory
簡単にコマンドの解説をしますと、1行目のsnmp-agent ip enable
でSNMPを有効にします。
2行目のsnmp-agent ip <コミュニティ名>
でコミュニティ名を設定します。このコミュニティ名がアクセス時に必要で、パスワードのような役割も果たします。ここではpublicと設定しています。
任意ですがsysname <装置名>
やsnmp-agent contact <管理者の名前・連絡先>
、snmp-agent location <設置場所>
のコマンドで設定した情報をSNMP上で確認することができます。この他にもアクセスリストでアクセス可能なIPアドレスを制限するなどのコマンド等もあり、設定事例集やコマンドリファレンスで確認していただければと思います。
富士通 SR-S
こちらも同様にターミナルで以下のコンフィグを投入します。コマンド表記は違いますが、設定内容はほぼ同等です。
snmp service on
snmp manager 0 0.0.0.0 public off disable
snmp agent sysname SR-S310TL2
snmp agent contact my-name
snmp agent location my-room
#保存
commit
save
1行目snmp service on
でSNMPを有効にしています。
2行目はsnmp manager <定義番号> <アクセス可能なIPアドレス> <コミュニティ名> off disable
で、IPアドレスの制限をかけないことを表す0.0.0.0、コミュニティ名はpublicを指定しています。
ツールのインストール
WSL(Ubuntu)上にSNMPを利用するためのソフトをインストールします。
$ sudo apt update
$ sudo apt install snmp
snmpwalk -v <バージョン> -c <コミュニティ名> <機器のIPアドレス>
でSNMPの情報を一括取得できます。
試しにルーターの情報を取得してみますと、以下のようになります。
バージョンはv2c、コミュニティ名は先ほど設定したpublic
、IPアドレスはルーターの192.168.10.1
を指定しています。
$ snmpwalk -v2c -c public 192.168.10.1
.1.3.6.1.2.1.1.1.0 = STRING: NEC Portable Internetwork ……(省略
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.119.1.84.18.1
.1.3.6.1.2.1.1.3.0 = Timeticks: (157059423) 18 days, 4:16:34.23
.1.3.6.1.2.1.1.4.0 = STRING: my-name
.1.3.6.1.2.1.1.5.0 = STRING: IX2207
.1.3.6.1.2.1.1.6.0 = STRING: my-room
.1.3.6.1.2.1.1.7.0 = INTEGER: 72
.1.3.6.1.2.1.2.1.0 = INTEGER: 13
---以下省略----
コマンド実行しますと、このように大量の情報が表示されます。先ほど機器に設定した文字列も取得できていますが、.1.3.6.1.2.1.1.1.0
のような表示では何を表しているのか理解が難しいです。初めの図にあったような文字列でOIDを表示してもらうためにはMIBファイルというものが必要となります。
MIBファイルの導入
標準のMIBファイルについてはsnmp-mibs-downloader
のインストールで導入できます。
$ sudo apt install snmp-mibs-downloader
$ ls /usr/share/snmp/mibs
GNOME-SMI.txt NET-SNMP-MIB.txt NET-SNMP-TC.txt UCD-IPFILTER-MIB.txt ietf
LM-SENSORS-MIB.txt NET-SNMP-MONITOR-MIB.txt NET-SNMP-VACM-MIB.txt UCD-IPFWACC-MIB.txt
NET-SNMP-AGENT-MIB.txt NET-SNMP-PASS-MIB.txt UCD-DEMO-MIB.txt UCD-SNMP-MIB-OLD.txt
NET-SNMP-EXAMPLES-MIB.txt NET-SNMP-PERIODIC-NOTIFY-MIB.txt UCD-DISKIO-MIB.txt UCD-SNMP-MIB.txt
NET-SNMP-EXTEND-MIB.txt NET-SNMP-SYSTEM-MIB.txt UCD-DLMOD-MIB.txt iana
インストールするとMIBファイルが自動でダウンロードせれてるはずです。
しかし、このままでは上手く動かないため、一部のファイルを直接ダウンロードしてくる必要があります。
sudo wget http://www.iana.org/assignments/ianaippmmetricsregistry-mib/ianaippmmetricsregistry-mib -O /usr/share/snmp/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
sudo wget http://pastebin.com/raw.php?i=p3QyuXzZ -O /usr/share/snmp/mibs/ietf/SNMPv2-PDU
sudo wget http://pastebin.com/raw.php?i=gG7j8nyk -O /usr/share/snmp/mibs/ietf/IPATM-IPMC-MIB
設定ファイルを開き、以下の設定を追記します。
mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf
mibs all
プライベートMIBファイル
プライベートMIBファイルは通常、各メーカーのホームページからダウンロードできます。
保存先はWindowsからのアクセス性も考え、ここではCドライブ直下にフォルダを作成し、そこに保存します。
$ cd /mnt/c
$ mkdir mib && cd mib
$ mkdir nec
$ mkdir fujitsu
設定追加
/etc/snmp/snmp.conf
にプライベートMIBファイルの場所を追加してあげます。
- mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:
+ mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/mnt/c/mib/nec:/mnt/c/mib/fujitsu
NEC
以下のサイトから3つファイルをダウンロードします。
https://jpn.nec.com/univerge/ix/Manual/index.html#mib
$ wget https://jpn.nec.com/univerge/ix/Manual/MIB/PICO-SMI-MIB.txt -O /mnt/c/mib/nec/PICO-SMI-MIB.txt
$ wget https://jpn.nec.com/univerge/ix/Manual/MIB/PICO-SMI-ID-MIB.txt -O /mnt/c/mib/nec/PICO-SMI-ID-MIB.txt
$ wget https://jpn.nec.com/univerge/ix/Manual/MIB/PICO-IPSEC-FLOW-MONITOR-MIB.txt -O /mnt/c/mib/nec/PICO-SMI-ID-MIB.txt
$ ls /mnt/c/mib/nec
PICO-IPSEC-FLOW-MONITOR-MIB.txt PICO-SMI-ID-MIB.txt PICO-SMI-MIB.txt
富士通
以下のサイトからzipファイルをダウンロードし、srs.mib
をC:\mib\fujitsu内に保存します。
https://www.fujitsu.com/jp/products/network/download/sr-s/firm/mib/mibrev1.html
$ls /mnt/c/mib/fujitsu
srs.mib
おまけ:YAMAHA
YAMAHAのルーター・スイッチは以下からダウンロードできます
http://www.rtpro.yamaha.co.jp/RT/FAQ/SNMP/private-mib.html
MIBファイルの内容
MIBファイルの中身はテキストファイルになっていまして、OIDの数値と名前の対応関係やパラメータの形式などが記述されています。
DESCRIPTIONの項目にパラメータの説明が書かれていたりします。なお、プライベートMIBの説明は機器のマニュアルに説明が記述されていることが多いです。富士通製品の場合は説明が書かれたtxtファイルがzipファイル内に同梱されていたりもします。
(一部抜粋)
picoIPv4CacheEntries OBJECT-TYPE
SYNTAX Gauge
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of current IPv4 cache."
::= { picoIPv4Cache 1 }
snmpwalkコマンド
MIBファイルを導入したところで、先ほどのsnmpwalk
コマンドを実行すると数値ではなく名前で表示されることが確認できます。
$ snmpwalk -v2c -c public 192.168.10.1
RFC1213-MIB::sysDescr.0 = STRING: "NEC Portable Internetwork Core (省略
RFC1213-MIB::sysObjectID.0 = OID: PICO-SMI-ID::ix2207
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (173403378) 20 days, 1:40:33.78
RFC1213-MIB::sysContact.0 = STRING: "my-name"
RFC1213-MIB::sysName.0 = STRING: "IX2207"
RFC1213-MIB::sysLocation.0 = STRING: "my-room"
RFC1213-MIB::sysServices.0 = INTEGER: 72
(以下省略)
コマンドの後ろにOIDを指定すれば特定の要素を表示できます。
(せっかくなのでL2スイッチの情報も取得してみます)
$ snmpwalk -v2c -c public 192.168.10.4 sysName.0
RFC1213-MIB::sysName.0 = STRING: "SR-S310TL2"
$ snmpwalk -v2c -c public 192.168.10.4 .1.3.6.1.2.1.1.4.0
RFC1213-MIB::sysContact.0 = STRING: "my-name"
$ snmpwalk -v2c -c public 192.168.10.4 enterprise
SRS-MIB::nosResetSystem.0 = INTEGER: none(1)
SRS-MIB::nosSystemErrorPoint.0 = Hex-STRING: 00 00 00 00
SRS-MIB::nosSystemErrorText1.0 = ""
(以下省略)
snmptranslateコマンド
snmptranslate
コマンドでOIDの名前・数値の変換が可能です。
-On
オプションで名前から数値に変換可能です。
$ snmptranslate -On sysLocation.0
.1.3.6.1.2.1.1.6.0
-Os
オプションで数値から名前に変換できます。
$ snmptranslate -Os .1.3.6.1.2.1.1.6.0
sysLocation.0
-Tp
オプションでツリー表示が可能です。
$ snmptranslate -Tp
+--iso(1)
|
+--org(3)
|
+--dod(6)
|
+--internet(1)
|
(以下省略)
snmpwalk
とsnmptranslate
を組み合わせれば目的の情報を見つけられると思います。
参考文献
TCP/IP - SNMPとは - ネットワークエンジニアとして
https://www.infraexpert.com/study/tcpip21.html
UNIVERGE IXシリーズ マニュアル
https://jpn.nec.com/univerge/ix/Manual/index.html
マニュアル セキュアスイッチ SR-Sシリーズ
https://www.fujitsu.com/jp/products/network/lan-switch/manual/sr-s/
Ubuntu 14.04, Ubuntu 16.04上のsnmpwalk,snmptranslateでエラーが出力される
https://mistymagich.wordpress.com/2016/07/19/ubuntu-14-04-ubuntu-16-04%E4%B8%8A%E3%81%AEsnmpwalksnmptranslate%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E5%8A%9B%E3%81%95%E3%82%8C%E3%82%8B/