SNMPではNATPセッション数を取得出来ないので、
サーバから自動でTelnetして取得して
MRTGで表示する方法を考えてみました。
ルータ
・IX2010、2015
サーバ
・Scientific Linux、Debian/Ubuntu
・MRTG
・telnet
・expect
・tr
特に必要なのは、
「telnet」「expect」です。
必要な物をインストール。
# yum install expect tenet # apt-get install expect tenet
これだけ。
まずは、
自動でtelnetして値を取得するスクリプトを作ります。
・IXのIP・・・192.168.255.1
・IXのホスト名・・・IX2010
・IXのユーザ名・・・mrtguser
・IXのパスワード・・・mrtgpass
・ログ・・・/tmp/napt/log.txt(必要であれば)
IXのユーザ権限は「Monitor」でOKです。
取得スクリプトの中身
# vi natp.sh #!/bin/sh expect -c " log_file -noappend /tmp/napt/log.txt set timeout 10 spawn telnet 192.168.255.1 expect login: \ ; send \"mrtg\r\" expect Password: \ ; send \"mrtg@neko6\r\" expect IX2010% \ ; send \"show ip napt translation\r\" expect Codes \ ; send \"q\r\" expect IX2010% \ ; send \"exit\r\" "
これでOKなはず。
「show ip napt translation」してすぐ、「q」しています。
オプション等
-noappend・・・ログ追記しない(今回はデバグ用で書いているだけです)
set timeout・・・タイムアウト時間
spawn・・・サーバでの実行プログラムを書く(SSHとか)
書き方は基本的に
「expect 表示文字列 \ ; send \”入力文字\r\”」
とすれば「表示文字列」が現れたら「入力文字」を送りつけます。
実行してみます。
# ./natp.sh Connected to 192.168.255.1. Escape character is '^]'. login: mrtguser Password: NEC Portable Internetwork Core Operating System Software Copyright Notices: Copyright (c) 2001-2007 NEC Infrontia All Rights Reserved. Copyright (c) 1985-1998 OpenROUTE Networks, Inc. Copyright (c) 1984-1987, 1989 J. Noel Chiappa. IX2010% show ip napt translation Interface: FastEthernet0/0.1 NAPT Cache - 5737 entry, 14263 free, 12878 peak, 30205093 create, 0 overflow Codes: A - ALG, S - Static, Service
こんな感じで取得できます。
あとは、MRTGで取り込めるように、
別スクリプトを作ります。
# vi napt-cont.sh #!/bin/sh LANG=C export LANG cont=`/etc/mrtg/napt.sh| grep NAPT | cut -d " " -f4,6|tr " " "\n"` uptime=`snmpwalk -v 1 -c public 192.168.255.1 .1.3.6.1.2.1.1.3| cut -d " " -f5-` host=`snmpwalk -v 1 -c public 192.168.255.1 .1.3.6.1.2.1.1.5| awk '{ print $4 }'` echo "$cont" echo "$uptime" echo "$host"
以外にも、Uptimeとホスト名が必要なので、
これは、snmpwalkを使用しています。
(なくても動きますw)
実行してみる。
# ./napt-cont.sh 5764 14235 22 days, 18:43:59.08 IX2010
うまく取得出来ています。
あとは、mrtg.cfgに追記します。
# vi mrtg.cfg Target[192.168.255.1_napt]: `/etc/mrtg/napt-cont.sh` SetEnv[192.168.255.1_napt]: MRTG_INT_IP="" MRTG_INT_DESCR="NAPT" Options[192.168.255.1_napt]: gauge, nopercent, growright MaxBytes[192.168.255.1_napt]: 20000 YLegend[192.168.255.1_napt]: NAPT ShortLegend[192.168.255.1_napt]: LegendI[192.168.255.1_napt]: entry LegendO[192.168.255.1_napt]: free Title[192.168.255.1_napt]: NAPT entry -- IX2010 PageTop[192.168.255.1_napt]: <h1>NAPT entry -- IX2010</h1> <TABLE> <TR><TD>System:</TD> <TD>IX2010</TD></TR> <TR><TD>Description:</TD> <TD>NAPT</TD></TR> </TABLE>
こんな感じ。
もしくは
napt-cont.shを使わずに、
Target[192.168.255.1_napt]: `/etc/mrtg/napt.sh| grep NAPT | cut -d " " -f4,6|tr " " "\n"&&snmpwalk -v 1 -c public 192.168.1.1 .1.3.6.1.2.1.1.3| cut -d " " -f5-&&snmpwalk -v 1 -c public 192.168.1.1 .1.3.6.1.2.1.1.5| awk '{ print $4 }'`
と一行で書いてもOKです。
あとはIndex.htmlを再作成します。
indexmaker /etc/mrtg/mrtg.cfg >/var/www/mrtg/index.html
これでMRTGでがグラフ化できます。
間違い等ありましたら、ご指摘下さい。
多分、もっといい方法があるはず。。。
[tegaki]どうだろう・・[/tegaki]
ぼくもRTXで似たようなことをしてました。最近IX2215に乗り換えたのでコレ作り変えなきゃイケなかったんですが勇気が湧いてきました。
https://fujiwaratakuro.com/wordpress/?p=70