• 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

iij/ipgenというFreeBSD上で動作するパケットジェネレータがGitHubで公開されていたので試してみました。

以下の手順はiij/ipgen/README.mdの内容を元に、FreeBSD+NetBSDでテスト環境を構築するまでの手順です。

ネットワーク構成

今回は以下のようなネットワーク構成で試してみました。

+-------------------------------------+
|               FreeBSD               |
+---+-----------------+---------------+
    |em1              |em2
    |172.16.0.59      |172.16.1.159
    |                 |
    |                 |
    |wm1              |wm2
    |172.16.0.58      |172.16.1.158
+---+-----------------+---------------+
|                NetBSD               |
+-------------------------------------+

FreeBSDは10.3-RELEASEを使用しています。

$ freebsd-version -ku
10.3-RELEASE
10.3-RELEASE

netmap機能をカーネルに組み込む

ipgenはnetmapというパケットI/Oフレームワークを使用しています。この機能はGENERICカーネルには組み込まれていないため、事前にカーネルを再構築します。

$ mkdir -p ~/work/pakeana
$ cd ~/work/pakeana
$ curl -O http://ftp.jaist.ac.jp/pub/FreeBSD/releases/amd64/10.3-RELEASE/src.txz
$ tar Jxvf src.txz -C .
$ cd usr/src/sys/amd64/conf/
$ cp -p GENERIC PAKEANA01
$ vi PAKEANA01
...
$ diff -ur GENERIC PAKEANA01
--- GENERIC     2016-03-25 10:09:25.000000000 +0900
+++ PAKEANA01   2016-04-20 00:41:01.631701000 +0900
@@ -364,3 +364,5 @@

 # VMware support
 device         vmx                     # VMware VMXNET3 Ethernet
+
+device         netmap
$ config PAKEANA01
Kernel build directory is ../compile/PAKEANA01
Don't forget to do ``make cleandepend && make depend''
$ cd ../compile/PAKEANA01/
$ make cleandepend
$ make depend
$ make
$ sudo make install

これでnetmapが組み込まれたカーネルがインストールされました。FreeBSDを再起動した後、以下のコマンドでnetmapが有効になっていることを確認できます。

$ sysctl -a | grep device | grep netmap
device   netmap

ipgenのビルドとインストール

次にipgenをビルドします。ipgenはlibeventを使用しているので予めパッケージからインストールしておきます。

$ pkg search libevent2
libevent2-2.0.22_1             API for executing callback functions on events or timeouts
$ sudo pkg install libevent2-2.0.22_1
$ git clone https://github.com/iij/ipgen.git
$ cd ipgen
$ make depend
$ sudo make install

NetBSD側での準備

対向側のマシンとなるNetBSDでは、IP forwardingを有効にしておきます。

# sysctl -w net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

これでipgenを試してみるための準備が整いました。

ipgenでパケット送出

以下のコマンドでパケットを送出します。"T"はTx、"R"はRxですね。

$ sudo ipgen -Tem1,172.16.0.58,172.16.0.59/24 -Rem2,172.16.1.158,172.16.1.159/24

実行画面はこんな感じです。CLI(TUI?)からパケット送出の開始・停止や送出パケットサイズ等を変更することができます。

img101.png

また、CLIと共にWebインタフェースも利用できます。8080番ポートにアクセスすると、ブラウザからパケット送出の制御が行えます。

スクリーンショット 2016-04-22 8.08.52.png

こんな感じでipgenを試してみるための環境が構築できました。

まとめ

iij/ipgenというパケットジェネレータを試してみました。Raspberry Pi+FreeBSDでipgenを動かすようにすると、(NICが100Mなのが玉にキズですが)お手軽に利用できるパケットジェネレータ環境として活用できそうです。また、ipgenのソースコードを参考にnetmapを調べてみるのも面白そうです。