LoginSignup
14
7

More than 5 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?)からパケット送出の開始・停止や送出パケットサイズ等を変更することができます。

img101.png

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

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

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

まとめ

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

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7