スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーをはてなブックマークに追加

Linuxで簡易ネットワーク解析 - bridge, tc, netem

ロンドン橋がおちる おちる おちる
ロンドン橋がおちる さあどうしましょう
『London Bridge Is Falling Down』 - 高田三九三訳詞・イギリス民謡

Linuxを使ってパケットキャプチャや、パケットロスや通信遅延といった通信環境のシミュレーションを簡易的に実施するという話です。

本格的な評価のための通信レミュレーションとなると、専用の機材を使わないと難しいこともありますが、簡易的な確認であれば、ノートPCに入れたLinuxだけでできるようにしておくと、特別な機材準備もいらないので、結構便利だったりします。メモもかねて残しておきます。

やりたいこと

  • 有線ネットワーク上のパケットキャプチャ
  • 通信の遅延や瞬断、パケットロスのレミュレーション

準備


パケットキャプチャ用の接続と設定

パケットキャプチャのソフトの方は、Wiresharkやtcpdumpを使えばいいんですが、問題は接続方法。最近は安くてコンパクトやミラーリング対応のスイッチングハブ(以下ものもとか)もあるので、それを使うというのが基本的な方法です
実際、ものさえあればそれが一番手間いらずですが、あとで説明するネットワークエミュレーションもあわせて実施できるようにするため、ここではブリッジを作成した接続方法を説明します。

USB-Etherの接続

Linuxをブリッジにするために、まずUSB etherを2本USBポートに差します。挿した直後は、ホストOSの方で認識されてしまうので、virtualbox側で認識させます。何も問題なければ、ゲストOS側にeth3, eth4で認識されます。ifconfigで見えているか確認しましょう。
USB etherを2個さす理由は、bridgeの両端用です。通信キャプチャしたい機器と機器の間に準備したPCが挟まるような形でLANケーブルを接続します。

例) 機器Aと機器Bの通信をキャプチャしたい場合
 [元の接続]
 (機器A) ----- (ハブ等) ---- (機器B)

 [接続変更後]
 (機器A) ----- (ハブ等) --- [(USB Ether1) 解析用PC (USB Ether2)] ---- (機器B)


内蔵のetherポートやホストOSとの通信用の仮想ドライバを片方側に割り当ててもいいのですが、ここは独立性が高くなるよう専用ポートを用意するようにしています。これだと、既存のネットワークとの接続を維持したまま、ターゲットのネットワークを見れるというメリットもあります。

bridgeの設定

USB etherが認識できたら、これらを両端としたブリッジを構成します。ブリッジの作成は、brctlコマンドで行います。brctlはbridge-utilsのパッケージに含まれますので、入っていない場合はインストールしましょう。
先ほどのUSB etherがeth3, eth4とすると、以下一連のコマンドでeth3とeth4を中継するbridgeデバイスが作成できます。

brctl addbr br0
brctl addif br0 eth3
brctl addif br0 eth4
ifconfig eth3 0.0.0.0 up
ifconfig eth4 0.0.0.0 up
ifconfig br0 0.0.0.0 up

bridgeデバイスの状態は、brctl show br0で確認できます。
うまくいっていれば、これで通信がbridgeされているはずです。 試しに、br0を通るパケットをtcpdumpやwiresharkで見てみましょう。
tcpdump -i br0
機器Aから機器Bへのパケットが見えていればOKです。

大抵は、これでOKですが、マルチキャストパケットの場合、IGMP snoopingのために通信が中継されないことがあります。とりあえず全キャプチャしたいという時には、混乱のもとになるので、IGMP snooping機能は無効にしておいた方が安全かと思います。
bridge-utilsはまだ対応していないので、/sys/devices/virtual/net/brN/bridge以下のファイルを変更することで、設定を変更します。multicast_snoopingの内容を1から0に変更します。
echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping

その他、Linux bridgeの詳しい内容については、以下が参考になります。


通信環境のエミュレーション

パケットロスや、通信速度といったにはnetem (tcコマンド)を使います。
先の手順で機器Aと機器Bの通信は全て解析用PCがブリッジしているので、tcコマンドで中継しているデバイス (br0、又は、eth3やeth4)に設定することで、機器Aと機器B間の通信に対する遅延やエラーをエミュレートできます。

4797373512 eth0に100ms遅延
tc qdisc add dev eth0 root netem delay 100ms

eth0を100ms±10ms(ランダム)の遅延 (先にaddしたものを変更)
tc qdisc change dev eth0 root netem delay 100ms 10ms

パケットロス率を0.1%に変更
 tc qdisc change dev eth0 root netem loss 0.1%

bitエラー率を0.1%に変更 (ランダムなオフセットに対して1bit error)
tc qdisc change dev eth0 root netem corrupt 0.1% 

パケット重複 (1%)
 tc qdisc change dev eth0 root netem duplicate 1%

パケットリオーダリング (5パケット毎に10ms遅延して送信)
tc qdisc change dev eth0 root netem gap 5 delay 10ms

設定したフィルタを削除
tc qdisc change dev eth0 root

その他、netem, tcコマンドの詳細は、以下が参考になります。

警察の初動捜査と同じで、不具合や問題の解析も何か起こった時にすぐ解析できるかどうかは、結果や経過を大きく左右します。簡易的であっても、手軽に解析できる環境をもっておくというのはいざという時に強い味方になります。

4897977967
【関連書籍】
ルーター自作でわかるパケットの流れ 小俣 光之
Linuxネットワークプログラミングバイブル 小俣 光之 種田 元樹
実践 パケット解析 ―Wiresharkを使ったトラブルシューティング Chris Sanders 園田 道夫
パケットキャプチャ入門 第3版 (LANアナライザWireshark活用術) 竹下 恵
パケットキャプチャ実践技術―Wiresharkによるパケット解析 応用編 竹下 恵



このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

人気エントリ
最近の記事
本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


最近のコメント
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
ブログ内検索
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。