LoginSignup
8
8

More than 5 years have passed since last update.

Open vSwitchのconntrack連携を試してみた(その1)

Last updated at Posted at 2016-01-12

うわっ・・私のnf_conntrack力、低すぎ・・?

と思うくらい、これまでiptablesとか使わずにOpen vSwitchのみで弊社クラウドサービスの仮想スイッチを実装をしてきたわけですが、、

最近、Open vSwitchにてNetfilter conntrack(以下nf_conntrack)とのインテグレーションが開発されているそうです。

nf_conntrackは、Linux上で動作するモジュールで、パケットフィルタにステート管理を実装するための機能です。iptablesで使われている方も多いと思いますが、以下のようなことが実現できます。

  • ステートフルインスペクション
    自身から発した通信の戻りパケットを自動的に許可する

  • NAPT(Network Address Port Translation)

  • ALG(アプリケーションゲートウェイ)
    NAPTに加えFTPなどペイロード内の書き換えが必要なアプリケーションを通す

  • その他

素のOpen vSwitchだけではこのような通信のセッション管理ができず、ステートレスなパケットフィルタしか実装できませんでした。

今回、このnf_conntrack連携機能により、Open vSwitchだけでステートフルなファイアウォール機能をシンプルに実装できるようになるというわけです(たぶん)。

※ 補足:例えば、OpenStackでOVS Pluginを使用する場合、ステートフルを実装するためにiptablesやLinux Bridgeが併用されていたりします。

連携のイメージは下図のような感じだそうです。

SnapCrab_NoName_2016-1-12_17-44-24_No-00.png

引用元: http://openvswitch.org/support/ovscon2014/17/1030-conntrack_nat.pdf

ということで、結構期待できそうな機能なので試してみました。

テスト環境

当方では以下の環境で試してみました。

  • CPU: Intel Xeon L5630 2.13GHz 16 Threads

  • MEM: 72GB

  • OS: Scientific Linux 6.7
    RHELやCentOSでも同様にいけるはずです。

  • Kernel: Linux 4.3.3

  • Open vSwitchバージョン: branch-2.5

Step1. カーネルのバージョンアップ

まずカーネルを新しめのものに上げる必要がありました(標準の2.6.32-573では動きませんでした)。

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel
vi /boot/grub/grub.conf
reboot

手元の環境では以下のようになりました。

# uname -a
Linux sl67-r4 4.3.3-1.el6.elrepo.x86_64 #1 SMP Tue Dec 15 13:13:15 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

Step2. Open vSwitchのソースコード取得

まだ正式リリースではないようですが、githubのレポジトリを調べたところ、branch-2.5にこの機能がマージされているようです。レポジトリをクローンし、branch-2.5をチェックアウトします。

git clone https://github.com/openvswitch/ovs.git
cd ovs
git branch -a
git checkout branch-2.5

Step3. Open vSwitchのコンパイル、インストール

いつも通りコンパイルしてインストールします。

./boot.sh
./configure --prefix=/usr --localstatedir=/var --with-linux=/lib/modules/`uname -r`/build
make
make install
make modules_install

Step4. Open vSwitchの起動

インストールできたら、普通にOpen vSwitchを起動します。

mkdir -p /var/run/openvswitch/
modprobe openvswitch
rm -f /var/run/openvswitch/ovs-vswitchd.conf.db
ovsdb-tool create /var/run/openvswitch/ovs-vswitchd.conf.db /usr/share/openvswitch/vswitch.ovsschema
ovsdb-server /var/run/openvswitch/ovs-vswitchd.conf.db --remote=punix:/var/run/openvswitch/db.sock --pidfile --detach
ovs-vsctl --no-wait init
ovs-vswitchd unix:/var/run/openvswitch/db.sock --pidfile --detach

ovs-vsctl add-br br0
ip link set br0 up

ovs-vsctl add-port br0 eth2
ip link set eth2 up

modprobe nf_conntrack_ipv4

nf_conntrack_ipv4モジュールが必要なのですが、自動でロードされないので、最後に手動でロードしています。以下のようにログ出力されればOKです。

Jan  7 12:57:10 sl67-r4 ovs-vswitchd: ovs|00010|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_state
Jan  7 12:57:10 sl67-r4 ovs-vswitchd: ovs|00011|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_zone
Jan  7 12:57:10 sl67-r4 kernel: device ovs-system entered promiscuous mode
Jan  7 12:57:10 sl67-r4 ovs-vswitchd: ovs|00012|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_mark
Jan  7 12:57:10 sl67-r4 ovs-vswitchd: ovs|00013|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_label

次回へ続く

ちょっと長くなったので、今回はnf_conntrackインテグレーションに対応したOpen vSwitchのインストールから起動までの手順を紹介しました。

次回、実際にフローエントリを書いて通信できることを確認します。

→ Open vSwitchのconntrack連携を試してみた(その2)

8
8
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
8
8