トラフィックジェネレーターTRexの使用方法(CML2版)

7 min read読了の目安(約6700字

はじめに

CML2に付属しているトラフィックジェネレータ「TRex」の使い方メモ。
Ciscoが提供するオープンソースのツールで、今回はGUIでの操作方法を記載。

参考URL

Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
trex-stateless-gui - Wiki

1. セットアップ

1-1. TRexの起動

  • CML Workbench画面右のADD NODESから「TRex」を選択し、画面中央にドラッグ&ドロップで配置。
  • 起動ボタンを押した後、コンソールボタンを押す。

1-2. 設定ファイルの修正

TRexは3ポート用意されている。eth0は管理インターフェース、eth1eth2はテスト用インターフェース。TRexの設定ファイルには不備があるため、インターフェースの利用や、専用のGUIアプリケーションからアクセスするためには、以下修正が必要。

  • TRexのコンソール画面で、Ctrl + B の後に Cを押してShellアクセス。
  • 以下の通り設定ファイルを編集する。
# vi /etc/trex_cfg.yaml
(編集前)
  low_end: true
  port_limit: 2
  version: 2
  interfaces:
    - "--vdev=net_af_packet0,iface=eth1"
    - "--vdev=net_af_packet0,iface=eth2"
(編集後)
  low_end: true
  port_limit: 2
  version: 2
  interfaces: ['eth1', 'eth2']
  • TRexサーバの手動起動
alpine-trex:/# cd trex/
alpine-trex:/opt/v2.65# ./_t-rex-64-o -i
Starting  TRex v2.65 please wait  ... 
EAL: Started without hugepages support, physical addresses not available
 set driver name net_af_packet 

-Per port stats table 
      ports |               0 |               1 
 -----------------------------------------------------------------------------------------
   opackets |               0 |               0 
     obytes |               0 |               0 
   ipackets |               0 |               0 
     ibytes |               0 |               0 
    ierrors |               0 |               0 

1-3. ケーブル接続

  • CML Workbench画面上で、eth0を外部環境と接続し、eth1eth2をトラフィックを流す始点と終点に配置する。接続例は以下の通り。

1-4. GUIアクセス

  • GUIアプリケーションtrex-stateless-guiをインストール。
  • アプリケーションを開き、「Connect to TRex server」(緑の電源プラグみたいなアイコン)をクリック。
  • eth0の先にDHCPサーバがある場合、自動でIPアドレスが採番され、コンソールアクセス時に表示されるのでそれを入力し、「Connect」ボタンをクリック。
  • 接続成功すると、以下のような画面が表示される。

2. ポート設定

アプリケーション内のPort 0Port 1は、それぞれ前項のeth1eth2に対応する。ここでIPアドレス設定と通信確認を行う。

2-1. Port 0設定

  • Port 0を右クリックし、「Acquire」をクリックして編集できるようにする。
  • 「Configuration」タブを選択し、Modeを「L3」、Sourceを「Port 0のIPアドレス」、Destinationを「Port 1のIPアドレス」に指定(到達性のある他のアドレスでも問題なし)。
  • 「Apply」ボタンをクリックして宛先アドレスのARP解決を行う。

2-2. Port 1設定

  • Port 0と同様「Acquire」をクリックし、SourceとDestinationを逆に指定した上で「Apply」ボタンをクリック。

  • 「Control」タブを選択し、Serviceを「ON」にして、受信パケットをキャプチャできるようにする。

2-3. 通信確認

  • Port 0で「Configuration」タブを選択し、Ping hostにDestinationアドレスを入力してPingが通るか確認。

3. プロファイル設定

3-1. プロファイルの作成

  • Port 0のプルダウンからProfileを選択。
  • 「New Profile」をクリック。今回はProfile Nameを「TrafficTest1」に指定し、「OK」をクリック。
  • 以下画面で発生させるトラフィック量を指定。L2 bps(L2ヘッダまでをトラフィック計算に含める)で「20Mbps」とした。

3-2. ストリームの作成 (IPパケット)

TCPやUDPヘッダを付与しないパケットの送信手順。

  • 「Build Stream」をクリックし、Stream Name「test_ip_1」を作成。
  • Rateは適当にbps L2で「10.0M」。また、RX Statsの「Enabled」にチェックを入れ、ダッシュボードでチャートビュー表示できるようにした。「Latency enabled」は、チェックを入れると複数のストリームを同時に流せなかったためそのままにした。Gapsの「ISG」でトラフィック送信開始までの時間を遅らせたり、「IPG」でパケット間の送信間隔も指定可能。
  • 「Simple mode」をクリックし、「Protocol Selection」タブを選択。
  • L4を「None」に指定。「Frame length (including FCS)」で、フレーム長を「500」に指定(処理性能を見たければ、もっと小さい値にしてppsを引き上げた方が良いと思う)。今回は「Fixed」で固定長にしたが、範囲を決めてランダム値にしたり、増減させていく事も可能。
  • 「Protocol Data」タブを選択し、「Internet Protocol v4」でDestinationとSourceをPort 1Port 0のアドレスに変更する。Media Access Protocol(MACアドレス)やEthernet Typeは、特に変更しなくても適切な値にして送信してくれた。
  • 最後に「Save」をクリック。ストリームが追加されている事を確認。

3-3. ストリームの作成 (TCP/UDPパケット)

TCPやUDPヘッダを付与したパケットの送信手順。

  • 「Build Stream」をクリックし、Stream Name「test_tcp_1」もしくは「test_udp_1」を作成。
  • Rateは適当にbps L2で「10.0M」。RX Statsの「Enabled」にチェックを入れるとパケット送信できなかったのでデフォルトのままとした。
  • 「Simple mode」をクリックし、「Protocol Selection」タブを選択。
  • L4を「TCP」もしくは「UDP」に指定。「Frame length (including FCS)」はIPパケット同様「500」を指定。
  • 「Protocol Data」タブを選択し、「Internet Protocol v4」でDestinationとSourceをPort 1Port 0のアドレスに変更する。TCPの場合「Transmission Control Protocol」タブが表示されるが、デフォルトのままでも問題なし。TCP1025、シーケンス番号12908のパケットが繰り返し送信される動きになる。

    UDPの場合も「User Datagram Protocol」タブはそのままで問題なし。UDP1025のパケットが繰り返し送信される。
  • 最後に「Save」をクリック。ストリームが追加されている事を確認。

4. トラフィック発生および確認

4-1. 送信開始

  • 前項の画面の通り、ストリーム「test_tcp_1」のチェックを外し、各ストリームの合計がプロファイルで設定した「20.0M」と同じになるようにした。(全てチェックを入れてもエラーにはならないが、実際に送信されるのは20.0M分。逆に1つだけチェックを入れても20.0Mになる。)
  • 画面右上の「Dashboard」(青いメーターボタン)をクリックし、Port 0Port 1で送受信されるトラフィックが見えるようにしておく。
  • 画面左上の「Start Transit」(緑の再生ボタン)をクリック。
  • ダッシュボードでTx/Rxの値を確認。今回はルータで帯域制御設定を行っているため、Tx 20Mbpsに対し、Rxが10Mbpsになっている。

4-2. パケットキャプチャ(リアルタイムでモニター)

  • 画面上のメニューから「Capture」> 「Open Monitor」をクリック。
  • 左上の「Start Monitor」(緑の再生ボタン)をクリックすると、Port 1で送受信されるパケットのキャプチャが開始される。停止時は「Stop Monitor」(赤の停止ボタン)をクリック。
  • 表示をクリアしたい場合は、「Clear Monitor Table」(青いブラシのボタン)をクリック。

4-3. パケットキャプチャ(レコード)

  • 「Recorders」タブを選択し、上の「Add Recorder」(赤い丸ボタン)をクリック。
  • Rxを「Port 1」、Txを「Port 1」、Limit(キャプチャするパケット上限数)を「10000」などに指定し、「OK」をクリック。
  • キャプチャが終わったら、保存ボタンをクリック。pcap形式のファイルで、Wireshark等で確認可能。