This post is Private. Only a writer or those who know its URL can access this post.

Tremaではじめるパケット生成ハンズオン 操作手順

More than 1 year has passed since last update.

この文書はTremaを使用してパケットレコーダーSonarmanを操作するDemoの操作手順です。

Section1 インストール

このハンズオンはVirtualboxおよびExtentionPackがインストールされている環境が必要です。
予めご用意ください。

会場で配布するUSBメモリに同梱されている
Sonarman_RD_License_1.5.4_with_Trema.ova
をインポートしてください。

インポートはVirtualboxのファイルメニューから仮想アプライアンスのインポートを選択し、Sonarman_RD_License_1.5.4_with_Trema.ovaを指定します。

import0.png

続いてアプライアンスの設定画面で以下の画面が表示されますが、Macアドレスを初期化せずにインポートボタンを押してください。

import1.PNG

ライセンスが表示されます。当勉強会で使用した環境はデモ用にカスタマイズした特別なバージョンですので、試用されたい場合は別途お問い合わせください。

license.PNG

初回起動時に以下のメッセージが表示されますが、「ネットワーク設定の変更」をクリックします。

error.PNG

アダプタ2タブのデバイス名(名前欄)をPCの無線アダプタに設定し、OKを押します。

アダプタ設定.PNG

もし、「ホストオンリーアダプタがありません」
というエラーが表示される場合は以下の設定からアダプタを手動追加してください。
ファイル > 環境設定 > ネットワーク > ホストオンリーネットワーク

1.PNG

2.PNG

Section2 Sonarmanの操作

VMが起動しログインプロンプトが表示されます。
ID/パスワードはsonarman/sonarmanです。

logon.PNG

操作コンソールとなるeth0 の IPアドレスを確認します。
以下のコマンドを打ってください。

$ ip a

ip.PNG

IPアドレスが判明したので、httpでアクセスします。
http://192.168.56.101

basic認証のID/パスワードはadmin/passです。

basic.PNG

ログイン後、左メニューの「キャプチャ」を開き、リングバッファを開いてください。

リングバッファ.PNG

現在PCで発生しているトラフィックが保存されているのが分かると思います。F5でリロードしてバイト数が増えていくのを確認してください。

次に、リングバッファのキャプチャファイルをsyslogからのメッセージで自動的にスイッチ、退避させてみましょう。

sshでSonarmanにログインします。
アカウントはsonarman/sonarmanです。

teraterm.PNG

syslogパケットを出力します。
以下のコマンドを打ってください。

$ echo "ERRORINFO syslog message from bash" > /dev/udp/localhost/514

WEB画面のキャプチャメニューからsyslog退避画面に遷移します。

syslog1.PNG

syslogメッセージを含んだファイル名で、現在と一つ前のキャプチャがアーカイブされて退避されています。

Section3 パケット生成

これからSDNフレームワークであるTremaを使用して、仮想スイッチからsyslogパケットを直接生成し、Sonarmanにsyslogパケットを届けてみましょう。

Tremaからのsyslog送信に必要な仮想スイッチや接続状態の概要図は以下のようになります。

env.PNG

前準備として仮想NICを作成し、アドレスを振ります。
以下のコマンドを打ってください。

$ ./handson.sh

Tremaを起動し、syslogパケットを送信します。

Tremaからsyslogパケットを送信するコードは以下のとおりです。

syslog_send.rb
class Test < Trema::Controller
  def start(_args)
    @port_no = 1
  end

  def switch_ready(dpid)
    p `sudo ovs-ofctl show br0xabc`
    system('sudo ovs-vsctl add-port br0xabc veth12')
    system('sudo ovs-vsctl set Interface veth12 ofport_request=1')
    veth11mac = `ip addr show veth11 | grep ether | awk -F ' ' '{ print $2 }'`
      udp = Udp.new(destination_mac: veth11mac,
        source_mac: '08:00:00:00:00:00',
        source_ip_address: '192.168.1.100',
        destination_ip_address: '192.168.1.35',
        udp_checksum: 49077,
        udp_source_port: 62558,
        udp_destination_port: 514,
        udp_payload: 'ERRORINFO This message was sent by Trema !!!')

        send_packet_out(dpid, raw_data: udp.to_binary_s, actions: [SendOutPort.new(@port_no)])
  end
end

このコードをTremaから実行します。

$ cd syslog_send/
$ trema run ./lib/syslog_send.rb -c trema.conf

先ほどと同様のsyslog退避画面にTremaからのsyslogメッセージによって退避されたアーカイブが参照できます。

trema_syslog.PNG

Tremaのプログラムを集了する場合はCtrl+Cで終了させてください。

Section4 パケットの観察

Tremaのプログラムは何回も繰り返して実行することができます。

ここで、スイッチから送信されるsyslogパケットとOpenFlowパケットの実物を見てみましょう。
sshのターミナルを新たに接続し、以下のコマンドでキャプチャを取得します。

veth11ではスイッチから出力される実際のsyslogパケットが参照できます。

$ sudo tshark -i veth11 -w /tmp/veth11.cap

キャプチャコマンドはCtrl+Cで終了させます。
終了後、SCP等でローカルPCに上記ファイルをコピーし、Wiresharkで展開してみましょう。
コピーの前に/tmp/veth11.capのパーミッションを設定しておいてください。

$ sudo chmod 777 /tmp/veth11.cap

Wiresharkで参照した結果がこちらです。

udp.PNG

プログラムを修正することでメッセージの書き換えが可能になりますが、UDPチェックサムの修正も同時に必要になります。
UDPチェックサムの値を0にすることでチェックをバイパスできますので試してみてください。

syslog_send.rb
#udp_checksum: 49077, 下記のように変更
 udp_checksum: 0,

loではTremaから出力される実際のOpenFlowパケットが参照できます。

$ sudo tshark -i lo -w /tmp/localhost.cap

同様にパーミッションを設定してSCPでローカルにコピーします

$ sudo chmod 777 /tmp/localhost.cap

lo.png

一連のOpenFlowプロトコルの動作が参照できます。

以上

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.