Posted at

iij/ipgenを試してみる

More than 3 years have passed since last update.

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を調べてみるのも面白そうです。