使っているAR320というルータは、snmpを喋れる。snmptrapも投げられるので、インタフェースの状態の変化を Net-SNMPで受けて、Dynamic DNSの更新を行うように してみる。
Net-SNMPはsnmptrapを受けるだけなので、アクションを起こすために
snmpttを導入する。
設定ファイルは、snmptt自身の設定を記述するsnmptt.iniと、
特定のsnmptrapに対するアクションを記述するsnmptt.conf.genericの2つがある。
snmptt.iniは、snmpttをdaemon modeで動かすようにし、Net-SNMPの
Perlモジュールを
使うようにし、trapのoidを変換するようにする。不明なtrapもログに残す。
デフォルトからの変更点は、
mode = daemon
net_snmp_perl_enable = 1
translate_log_trap_oid = 2
translate_value_oids = 0
daemon_uid =
unknown_trap_log_enable = 1
trapを受けるsnmptrapd向けに snmptrapd.conf ファイルを作成する。中身は
authCommunity log,execute,net コミュニティ名
traphandle default /usr/local/sbin/snmptthandler
snmptrapdを -On オプション付きで起動するようにしてから、snmpttを起動する。 デフォルトのsnmptt.conf.genericに、インタフェースのUP/DOWNをログに出力するように 書かれているので、ケーブルを抜き差しして動作確認。
次。snmptt.conf.genericの EVENT linkUp の部分に、 EXEC 実行スクリプト を追加。スクリプト中でsnmpwalkを使ってルータに割り振られたIPアドレスを取り出し、 Dynamic DNSの更新スクリプトに渡す。
以上で完成。snmptrapの発信元を限定していないので、関係ないインタフェース、 例えば、ローカル側のインタフェースのUPでもスクリプトが実行されることになるが、 頻度は高くないであろうから気にしないことにする。