読者です 読者をやめる 読者になる 読者になる

最近やった検証(ciscoスイッチをスクリプトで操作したり)

トラフィックをキャプチャしてリアルタイムにグラフ化するアプライアンスの検証をすることに。グラフは指定した宛先ポートごとに描画されます。

検証のために必要なのは任意の宛先ポートに対する制御可能なトラフィックを作って検証機に流しこむこと。
こういう検証環境を構築してみました。


配線が面倒な事情があるので構成はシンプルに。

手順はちょっと面倒。
1.サーバのテキトウなポートをapacheでまちうける
2.サーバからスイッチにtelnetログイン
3.スイッチからtelnetつかって1.であけたサーバのポートに接続、HTTPでファイルをGET


2、3についてはスクリプトで自動化します。
以下に具体的な手順を。ポートは80番と110番をあけることにします。


スイッチのミラーリング設定。(ciscoです)

(config)#monitor session 1 source interface gi0/1
(config)#monitor session 1 destination interface gi0/2


サーバのapacheで80番と110番を同時にあける。
# vi httpd.conf

Listen 80
Listen 110

# apachectl restart


テキトウなサイズのファイルをhttpでとれる場所に置く。
# perl -e 'print "a" x 1024' > /var/www/html/1k_file


ciscoスイッチにtelnetしてそこからhttpでファイルをゲットするスクリプトを書く。
まずはモジュールインストール。
# perl -MCPAN -e 'install Net::Telnet::Cisco'
スクリプトはこんな感じ。

use Net::Telnet::Cisco;
($sw, $swPass, $sv, $file) = qw(sw01 cisco 192.168.0.10 1k_file);
$port = $ARGV[0];

$session = Net::Telnet::Cisco->new(Host => $sw);
$session->login(Password => $swPass);
print $session->cmd("telnet $sv $port\nGET /$file HTTP/1.0\n\n");
$session->close;


毎秒80番ポートから2回、110番から1回、ファイルをGETするには例えばこう。
# while :;do (for i in 80 80 110;do perl http1kget.pl $i;done &);sleep 1;done


tcpdumpmrtgと見比べながらグラフがちゃんと書かれてるか確認。
実際はいろいろ制御情報がつくので1kのファイルをGETするのにだいたい1300バイトのトラフィックが発生してました。



今回のやりかただと余計なtelnetトラフィックが混ざるので総通信量が計算できなくて不便でした。スイッチ側でミラーするトラフィックを絞りこめないんだろうか。
というか、サーバ側で内部トラフィックを発生させてそれをミラーするよう設定したり、IPアドレスやPORT番号を任意に設定したトラフィックを発生したり、ということができればスイッチがなくてもいいはずなんだけど。