2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NET-SNMPのSNMPエージェント(snmpd)からlinkUp/linkDownのSNMP TRAPを送信する方法( Ubuntu/Denbian)

Posted at

はじめに

NET-SNMPのSNMPエージェント(snmpd)からlinkUp/DownのTRAPを送信する方法の解説です。
すでに

という記事に解説があります。この記事の補足説明です。

この記事ではCentOSで実施していますが、UbuntuやDebianの環境の場合には、そのままでは、TRAPを送信できません。

linkUpDownNotificationsを認識しない

もとの記事を参考に

/etc/snmpd/snmpd.conf
trap2sink 192.168.11.200 trap
rouser _internal
createUser _internal MD5 _internalPassword DES
agentSecName _internal
linkUpDownNotifications yes

(192.168.11.200がTRAPの送信先)
のような設定してを追加snmpdを再起動します。

#systemctl restart snmpd.servece

または

#/etc/init.d/snmpd restart

そうすると、syslogに

snmpd[1225]: /etc/snmp/snmpd.conf: line 18: Warning: Unknown token: linkUpDownNotifications.

が記録されます。linkUpやlinkDownのTRAPも送信されません。
この状態をNET-SNMP,DebianやUbuntuにバグとして報告している人がいます。
困っている人が世界中に多くいるようです。

原因は、linkUpDownNotificationsの設定を処理するMIBモジュールを読み込まない設定になっているからです。バグではありません。
systemdから起動していう場合は、

#systemctl edit --full snmpd

でsnmpdサービスの設定ファイルを編集します。

[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmpd.conf

[Service]
Environment="MIBSDIR=/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site"
Environment="MIBS="
Type=simple
ExecStartPre=/bin/mkdir -p /var/run/agentx
- ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux,mteTrigger,mteTriggerConf -f -p /run/snmpd.$
+ ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux -f -p /run/snmpd.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

-IのパラメータからmteTrigger,mteTriggerConfを削除します。
/etc/init.d/snmpdにも同じ設定があります。これを削除します。
実は、この設定でTRAPを送信するための監視機能(DISMAN)を無効にしているのです。
これを有効にすることでTRAPを送信できます。

defaultMonitors          yes

も同じ理由で動作しません。

MIBファイルが足りない

最初のTRAP送信の方法を紹介したサイトにlinkUp/Downの変化をチェックする周期を短くする方法が記載さています。

trap2sink 192.168.11.200 trap
rouser _internal
createUser _internal MD5 _internalPassword DES
agentSecName _internal
- linkUpDownNotifications yes
+ #linkUpDownNotifications yes
+ notificationEvent  linkUpTrap    linkUp   ifIndex ifAdminStatus ifOperStatus
+ notificationEvent  linkDownTrap  linkDown ifIndex ifAdminStatus ifOperStatus
+ monitor  -r 10 -e linkUpTrap   "Generate linkUp" ifOperStatus != 2
+ monitor  -r 10 -e linkDownTrap "Generate linkDown" ifOperStatus == 2

のような設定です。
Debian(Ubuntu)の環境で、この設定でsnmpdを起動すると

Nov 28 06:36:41 miniPC2 snmpd[2267]: notificationEvent OID: linkUp
Nov 28 06:36:41 miniPC2 snmpd[2267]: /etc/snmp/snmpd.conf: line 149: Error: unknown notification OID

のようなsyslogが記録されます。
これは、linkUpなどを数値のOIDに変換できないことを示しています。MIBの定義が足りないのです。
DebianとUbuntuでは、RFCで定義されている標準MIBの定義ファイルをデフォルトではインストールしません。
(昔はインストールされていたと思いますが、現在はされません)

インストールするには、

#apt install snmp-mibs-downloader

を実行します。

Debianの場合には、non-freeのパッケージをインストールできるようにapt-sourceを設定する必要があります。

をみてください。

systemdのサービス設定も変更が必要です。

[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmpd.conf

[Service]
Environment="MIBSDIR=/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site"
- Environment="MIBS="
+ Environment="MIBS=all"
Type=simple
ExecStartPre=/bin/mkdir -p /var/run/agentx
ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux -f -p /run/snmpd.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

私は面倒なので、MIBS=allにしていますが、MIBS=IF-MIBなど必要なMIBだけ設定してもよいです。

これでエラーログは記録されなくなり、linkUp/DownのTRAPも送信されるようになります。

TWSNMP FCでTRAPを受信した例

image.png

TWSNMP FCは

です。

DockerやLinuxなどのWindows以外の環境は

です。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?