IPv6環境でnet-snmpを使う
IPv6環境でSNMPで情報を引っ張ってきたいのだが、net-snmpをインストールしてsnmpdを起動したが、getできない。
監視サーバをnagios01、監視対象ホストをclient01とした時の例。
client01$ sudo yum install net-snmp net-snmp-utils
client01$ sudo /etc/init.d/snmpd start
nagios01$ snmpwalk -v 1 -c public client01 UCD-SNMP-MIB::laLoad.1
No log handling enabled - turning on stderr logging
getaddrinfo: client01 Name or service not known
snmpwalk: Unknown host (client01)
snmpwalkなどでIPv6のサーバへ問い合わせる場合は、ホスト名の前に「udp6」を明示的に指定する必要があるようだ。しかし、
nagios01$ snmpwalk -v 1 -c public udp6:client01 UCD-SNMP-MIB::laLoad.1
Timeout: No Response from udp6:client01
タイムアウトになってしまう。ちなみに、net-snmpは5.0以降IPv6に対応しているということなので、5.0以降がインストールされていれば、snmpwalkコマンドもIPv6を扱えるはず。
クライアント側を見てみる。
client01$ netstat -lanp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
(中略)
udp 0 0 0.0.0.0:161 0.0.0.0:* 12403/snmpd
0.0.0.0:161ってことは、IPv4だけで、IPv6でリッスンしていない。
設定ファイルを見てみる。
client01$ cat /etc/snmp/snmpd.conf
(以下抜粋)
com2sec notConfigUser localhost public
com2sec notConfigUser nagios01 public
group notConfigGroup v1 nogConfigUser
access notConfigGroup "" any noauth exact systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
view all included .1 80
dontLogTCPWrappersConnects yes
どうやら、デフォルトの設定では、IPv4しかリッスンしない設定らしい。以下のように、明示的にv6でも使えるように追記。
\# 以下の4行を追記(下の2行は実際の設定に応じて変更)
agentaddress udp:161
agentaddress udp6:161
com2sec6 notConfigUser localhost public
com2sec6 notConfigUser nagios01 public
snmpd を再起動すると、v6でもリッスンするようになった。
client01$ sudo /etc/init.d/snmpd restart
client01$ netstat -lanp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
(中略)
udp 0 0 0.0.0.0:161 0.0.0.0:* 12442/snmpd
udp 0 0 :::161 :::* 12442/snmpd
これで値を取れるようになった。
nagios01$ snmpwalk -v 1 -c public udp6:client01 UCD-SNMP-MIB::laLoad.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.03
まとめ
IPv6環境でnet-snmpを使うときは
- net-snmp 5.0以降を使う
- snmpd.confで、agentaddress udp6:161とcom2sec6を設定する
- snmpwalkなどで値を取る時はアドレスの前にudp6:をつける