簡易トラフィックモニタ

トラフィックをリアルタイム表示するには MRTG などのツールがありますが, ここではPCにLANカード2枚差しして作ったLinuxルータ/IP Masqueradeマシンを使って, 簡易トラフィックモニタを作ってみます。

Linuxカーネルは

CONFIG_IP_FIREWALL=y
CONFIG_IP_MASQUERADE=y
のような設定をして
echo 1 >/proc/sys/net/ipv4/ip_forward
echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter
echo 1 >/proc/sys/net/ipv4/conf/eth1/rp_filter
しておきます(後の2行はIP spoofing防止用です)。

ipchains のルールはたとえば次のようにしておきます (これ以外にIP Masqueradeやtransparent proxyのルールがあります)。

/sbin/ipchains -A input -i eth1
/sbin/ipchains -A output -i eth1

ipchains についての詳細は Linux IPCHAINS-HOWTO をご覧ください。

こうしておいて,

/sbin/ipchains -L -v -x
すると,パケット数とバイト数の積算値が出ます。 これをたとえば10分ごとに行って,差分を取ればいいわけです。

……と思ったのですが,unsigned long でもオーバーフローしてしまいました。

/sbin/ipchains -L -v -x -Z
のようにして読み出すたびにリセットするのが正解でした。 これだと差分もとらなくてすむので簡単です。

そのための簡単なプログラム counter.c を作ってみました。 これを root 権限でバックグラウンドで動かしておきます。 これは /usr/local/apache/htdocs/traffic.dat というログを出力します。

また,このログの最近の約1日分を表示するCGIとして showcount.c を作っておきます。

結果は こんな具合 です。


リンクはご自由にどうぞ。

松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp
Last modified: Wed Apr 26 13:09:04 JST 2000