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?)からパケット送出の開始・停止や送出パケットサイズ等を変更することができます。
また、CLIと共にWebインタフェースも利用できます。8080番ポートにアクセスすると、ブラウザからパケット送出の制御が行えます。
こんな感じでipgenを試してみるための環境が構築できました。
まとめ
iij/ipgenというパケットジェネレータを試してみました。Raspberry Pi+FreeBSDでipgenを動かすようにすると、(NICが100Mなのが玉にキズですが)お手軽に利用できるパケットジェネレータ環境として活用できそうです。また、ipgenのソースコードを参考にnetmapを調べてみるのも面白そうです。