Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@furandon_pig

iij/ipgenを試してみる

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

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?