私のUbuntu LTS 16.04サーバーが私のHP OVOサーバーにSNMPTrapを送信することを試みます。その理由は、エラーが発生したときにSNMP警告を送信することはできませんが、まだネットワークカードを介してアクセスできるいくつかの古いデバイスがネットワーク上にあるためです。したがって、私のUbuntuサーバーは、失敗したノードを評価するためにカードに接続されました。私はBashとExpectを使ってこれを達成しました。今私が望むのは、snmptrap
スクリプトの一部として送信することです。私の質問は次のとおりです
質問
このsnmptrap
コマンドにはデフォルト設定が必要ですか?それとも、私たち(または私だけかもしれませんが)は、コマンドを当然のtelnet
ようにコマンドラインで動作しますか?
この質問をする理由は、企業ネットワークでこれを実装しようとしていますが、現在私のOVOサーバーがトラップを受信していないためです。だから、私はそれを絞り込み、いくつかのファイアウォールの1つであるのか、それとも前述の基本的な構成の問題であるのかを確認したかったのです。
コンテキスト:
私の予想スクリプトは、デフォルトでネットワーク接続カードによって管理されている各カードの状態を配列としてbashに返します。 0はOKを意味し、1は意味します。応答なし。だからBashは次のことを行います。
errors=$((expect ~/assets/connect))
for i in ${!errors[@]}:
do
if [[ ${errors[$i]} -eq 1 ]]:
then:
snmptrap #stuff goes here; the relevant source IP is saved elsewhere & available - I want the SNMP trap to send a "node $i" down.
fi
done
ベストアンサー1
snmptrap
特定の構成は必要ありません。
スクリプトがトラップを送信していることを確認するには、tcpdumpを使用してトラフィックを監視できます。 SNMPトラップはUDPであり、通常はポート162に送信されるため、次のように動作します。
tcpdump -i <interface> udp dst port 162
次に、別の画面または端末で最初にローカルでsnmptrapコマンドをテストし、次にスクリプトに含めてテストします。
snmptrap -v 2c -c public ov.example.com '' 1.3.6.1.4.1.6032.1 1.3.6.1.4.1.6032.1 s "this is just a generic message"
次のような出力が表示されます。
14:52:32.966387 IP server.example.com.43066 > ov.example.com.snmp-trap: V2Trap(114) system.sysUpTime.0=31777102 S:1.1.4.1.0=E:6032.1 E:6032.1="this is just a generic message"
出力が表示されると、パケットがシステムを離れるためにlocalhostで実行されていることがtcpdump
わかります。snmptrap
この場合、tcpdump
受信機で同じコマンドを実行してトラップを受信していることを確認してください。複数のソースからトラップを受信する場合は、次の場合にホストごとにフィルタリングするのが便利な場合があります。
tcpdump -i <interface> udp and src host <sender name/ip> dst port and dst port 162
受信側ではパケットが見えませんが、発信者から出てくるパケットが見えたら、ネットワークの何かがパケットをブロックしているのです。