FreeBSD初心者運用日記 このページをアンテナに追加

 | 

2008-10-30

[][]snmpwalkのトラブルシューティング 02:02 snmpwalkのトラブルシューティング - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - snmpwalkのトラブルシューティング - FreeBSD初心者運用日記 snmpwalkのトラブルシューティング - FreeBSD初心者運用日記 のブックマークコメント

■パケットが正常に動くかどうか確認する方法

エージェント(サーバ側)で以下を実行

# sudo /usr/sbin/tcpdump port snmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on aue0, link-type EN10MB (Ethernet), capture size 96 bytes

マネージャ(クライアント側)で以下を実行

# snmpwalk -v 1 -c public black.localhost 

パケットが正常に届けばエージェント側で以下のように表示される

00:32:59.403620 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  
00:33:00.420383 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  
00:33:01.436369 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  
00:33:02.453117 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  
00:33:03.469867 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  
00:33:04.486618 IP white.localhost.63474 > black.localhost.snmp:  GetNextRequest(25)  

何も表示されなければファイアウォールでパケットがdropされてる可能性がある。

linuxの場合はここでiptablesで何かいろいろやるけど、freebsdの場合はpfctlで何かやるらしい。

ToDo:pfctlって何やねん。

■ログのチェック

エージェント側でtail -f /var/log/snmpd.logをチェックしよう。

"Connection from UDP: [192.168.0.11]:63439 REFUSED"と出る場合は、libwrapでブロックされている。

この場合は、/etc/hosts.allowとか/etc/hosts.denyを見直す。

大抵は、/etc/hosts.allowに以下のように設定を追加すればOK

snmpd: 192.168.0.11/255.255.0.0

snmpd.confの設定漏れの場合は特にエラーはでない。

"Connection from UDP: [192.168.0.11]:58879"と出るだけ。このメッセージは正常な場合もでるので、ややこしい。。

マネージャ(クライアント側)のコマンドラインでsnmpwalk実行したときに、

Timeout: No Response from 192.168.0.12とでる。

ログが出力されてない場合もある。その場合はsnmpdを停止させた後、以下のようにして起動すればOK。

$ sudo /usr/local/sbin/snmpd -Lf /tmp/hoge.log


■エージェント側の/etc/hostsをチェック

エージェントサーバにおいて、マネージャサーバ名の名前解決ができなかった場合、getResponse(Response?)を返すことができないので、snmpwalkに失敗する。

マネージャとエージェントの双方のサーバで、tracerouteでお互いに通信できるか確認してみるとよい。(#nslookupだとDNSみてしますので、tracerouteのほうがよい)

/etc/hostsを修正した場合は、snmpdを再起動しないと反映されないことがあるので注意する。

ちなみに、ホスト名の名前解決はCライブラリ関数であるgethostbyname()を使っているものと思われる。この関数は、名前で指定されたインターネット上のサーバをあらわすstruct hostent という構造体ポインタを返す。この構造体には/etc/hostsやDNSサーバから取得した情報が格納されてくるらしい。

 |