3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ルーターの情報をSNMPで取得 by WSL2(Ubuntu)

Last updated at Posted at 2022-02-10

業務用ネットワーク機器(ルーター・L2スイッチ等)ではSNMPプロトコルを使って、CPU・メモリ使用量・本体温度などのシステム情報からポートごとの通信量・アドレスまで様々な情報を取得できます。
今回はWindows PCのWLS2(Ubuntu)上でSNMPの情報を取得するためのか環境を整えていきたいと思います。

SNMPとは

SNMPの情報はMIBという以下のようなツリー構造で管理されており、各パラメータにはオブジェクト識別子(OID)が割り振られています。

mib_tree.png

各ベンダーが共通で使っている標準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が使用可能になります。

IXコンフィグ
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

こちらも同様にターミナルで以下のコンフィグを投入します。コマンド表記は違いますが、設定内容はほぼ同等です。

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のインストールで導入できます。

標準MIB導入
$ 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

設定ファイルを開き、以下の設定を追記します。

/etc/snmp/snmp.conf
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ファイルの場所を追加してあげます。

/etc/snmp/snmp.conf
- 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

NECの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ファイル内に同梱されていたりもします。

PICO-SMI-MIB.txt
(一部抜粋)
        picoIPv4CacheEntries OBJECT-TYPE
                SYNTAX  Gauge
                ACCESS  read-only
                STATUS  mandatory
                DESCRIPTION
                        "The number of current IPv4 cache."
                ::= { picoIPv4Cache 1 }

snmpwalkコマンド

MIBファイルを導入したところで、先ほどのsnmpwalkコマンドを実行すると数値ではなく名前で表示されることが確認できます。

systemwalk
$ 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スイッチの情報も取得してみます)

OID指定
$ 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オプションで名前から数値に変換可能です。

名前から数値(-On)
$ snmptranslate -On sysLocation.0
.1.3.6.1.2.1.1.6.0

-Osオプションで数値から名前に変換できます。

数値から名前(-Os)
$ snmptranslate -Os .1.3.6.1.2.1.1.6.0
sysLocation.0

-Tpオプションでツリー表示が可能です。

ツリー表示(-Tp)
$ snmptranslate -Tp
+--iso(1)
   |
   +--org(3)
      |
      +--dod(6)
         |
         +--internet(1)
            |
(以下省略)

snmpwalksnmptranslateを組み合わせれば目的の情報を見つけられると思います。

参考文献

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/

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?