FreeBSDのルーターの設定をやり直してから、MRTGでSNMPの情報が取得できなくなっていた。
net-snmpをインストールしてsnmpwalkをかけても返事が返ってこないことから、症状はSNMPのパケットがうまく出ていないらしい。
で、ipfwでSNMPのudpポートを開く設定に。ここで問題なのは、udpは本来一方的垂れ流しだが、SNMPのqueryはoutgoingで適当に選ばれたportから対象のport 161にqueryが飛ぶと、返事が対象のport 161からoutgoingで選ばれたportに帰ってくるということ。だから単純にport 161へのoutgoingを許可しただけだと、返事が入ってこないのでNo Responseになってしまう。
で、ふと思い出したのが、これってntpの場合と同じだな。
で、ipfwの設定で以下の設定を追加する。
ipfw add pass udp from ${iip} to any 161 keep-state
keep-stateって指定がいったい何の役に立つのかと思っていたが、ここで役に立つのね。keep-stateを指定しておくとoutgoingしたudpに対する返事が帰ってくることを想定してしばらくの間、firewallに穴を開けておいてくれるわけだ。
で、めでたくsnmpwalkでルーターの設定が取得できるようになった。
あとはMRTGの設定を書くだけか。