PR

Neutron DVR環境でのパケット処理を探る

2015年6月17日(水)
工藤 雄大

第3回では、DVR環境でのパケット処理を解析してみます。少しだけ難しいですが、興味深い挙動がわかるので、最後までおつきあいください。

解析のためのコマンド

第2回で構築した手順では、NeutronのML2 pluginとしてOVS(Open vSwitch)を選択しています。この場合、仮想ルータの実態はNamespace(Linux Namespace)、iptables、OVSの組み合わせで構成されています。これを前提に、今回の解析で使うコマンドを以下に示します。なお出力結果は大量となるので、必要な箇所以外は適宜省略しています。

インタフェース、ブリッジ名確認

# ip addr

パケットキャプチャ方法

# tcpdump -i <インタフェース名> -n

OVSの構成確認

# ovs-vsctl show

ルーティング情報確認

# ip rule ls
# ip route show table <テーブル名>

OVSのフローテーブル確認

# ovs-ofctl dump-flows <ブリッジ名>

Namespace確認

# ip netns

Namespace内でのコマンド実行

# ip netns exec <Namespace> <コマンド>

ネットワークの状態を把握する

パケット処理解析の前に、現在のOpenStack内部のネットワークがどのようになっているかを把握します。各テナントで、それぞれインスタンス(VM)を起動します。ネットワークトポロジー上では図1のようになっています。

ネットワークトポロジー

図1:ネットワークトポロジー

最初にインタフェースやブリッジ等のネットワーク周りの状態を確認します。まずは、Controller + Network Serverの状態を確認します。

インタフェース名、ブリッジ名は、以下の手順で確認します。

インタフェース、ブリッジ名確認

# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.10.101/24 brd 192.168.10.255 scope global eth1
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.20.101/24 brd 192.168.20.255 scope global eth2
6: ovs-system: <BROADCAST,MULTICAST>
7: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP>
8: br-int: <BROADCAST,MULTICAST>
10: br-tun: <BROADCAST,MULTICAST>

次にNamespaceと、Namespace内のインタフェースを確認します。

Namespace確認

# ip netns
snat-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f
qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f

SNAT用Namespace内のインタフェース確認

# ip netns exec snat-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f ip addr
11: qg-e74ea6e5-c8: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 10.0.0.10/24 brd 10.0.0.255 scope global qg-e74ea6e5-c8
13: sg-cab3bcca-30: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.210.10/24 brd 192.168.210.255 scope global sg-cab3bcca-30
15: sg-7d59c9a4-4d: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.220.10/24 brd 192.168.220.255 scope global sg-7d59c9a4-4d

仮想ルータ用Namespace内のインタフェース確認

# ip netns exec qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f ip addr
12: qr-bdc3d5ac-e6: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.210.1/24 brd 192.168.210.255 scope global qr-bdc3d5ac-e6
14: qr-84e871c6-a4: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.220.1/24 brd 192.168.220.255 scope global qr-84e871c6-a4

続いて、OVSの構成確認をします。

# ovs-vsctl show
    Bridge br-tun
        Port "gre-c0a81466"
                options: {(略) remote_ip="192.168.20.102"}
        Port patch-int
                options: {peer=patch-tun}
        Port br-tun
        Port "gre-c0a81467"
                options: {(略) remote_ip="192.168.20.103"}
    Bridge br-ex
        Port "qg-e74ea6e5-c8"
        Port phy-br-ex
        Port "eth0"
        Port br-ex
    Bridge br-int
        Port "qr-bdc3d5ac-e6"
        Port "sg-7d59c9a4-4d"
        Port int-br-ex
        Port br-int
        Port patch-tun
                options: {peer=patch-int}
        Port "sg-cab3bcca-30"
        Port "qr-84e871c6-a4"

以上の結果から判明したインタフェース、ブリッジ、IPアドレスを関連付けて図示すると、図2のようになります。

Controller + Network Serverの状態

図2:Controller + Network Serverの状態

同様に、Compute Server1、2も調査します。今回の検証環境では、図3のようになっていることを確認しました(図が複雑なので、Management Network用のeth1は省略しています)。注目していただきたいのは、仮想ルータ用Namespaceをすべてのノードが同じ名前、同じインタフェース、同じIPアドレスで有している点です(図3の赤い点線部分)。

全体の状態

図3:全体の状態

これで、現在の状態がわかりました。それでは、実際にパケット処理を解析します。「別テナント上のインスタンス向けパケット」、「FIP(Floating IP)なしでのPublic Network向けパケット」、「FIPありでのPublic Network向けパケット」の順で解析していきます。

別テナント(セグメント)上のインスタンス向けパケット処理

非DVR環境では、別テナント向けの通信も、Network Server上の仮想ルータを経由していました。では、DVR環境下ではどうなっているのでしょうか。

Compute Server1上のインスタンスtest220-1(IPアドレス192.168.220.11、DFG 192.168.220.1)から、Compute Server2上のインスタンスtest210-1(IPアドレス192.168.210.14、DFG 192.168.210.1)へpingを実行します。パケット処理の大まかなあたりをつけるため、各サーバのTenant Networkのインタフェースでパケットをキャプチャします。

Controller + Networkのeth2でのパケットキャプチャ

# tcpdump -i eth2 -n
(出力なし)

Compute1のeth2でのパケットキャプチャ

# tcpdump -i eth2 -n
IP 192.168.20.102 > 192.168.20.103: GREv0, key=0xb, length 106: IP 192.168.220.11 > 192.168.210.14: ICMP echo request, id 15364, seq 1, length 64
IP 192.168.20.103 > 192.168.20.102: GREv0, key=0xc, length 106: IP 192.168.210.14 > 192.168.220.11: ICMP echo reply, id 15364, seq 1, length 64

Compute2でのeth2でのパケットキャプチャ

# tcpdump -i eth2 -n
IP 192.168.20.102 > 192.168.20.103: GREv0, key=0xb, length 106: IP 192.168.220.11 > 192.168.210.14: ICMP echo request, id 15364, seq 1, length 64
IP 192.168.20.103 > 192.168.20.102: GREv0, key=0xc, length 106: IP 192.168.210.14 > 192.168.220.11: ICMP echo reply, id 15364, seq 1, length 64

Controller + Network Serverでは処理が行われず、Compute Server1、2だけで完結しています。Compute Server1、2は、それぞれ一つずつ仮想ルータを有しており、両テナント用のインタフェースを有しています。どの仮想ルータのインタフェースで処理されているかを確認するため、今度は仮想ルータ用Namespace内でパケットキャプチャをします。

Compute Server1の仮想ルータ用Namespace内で、送信側インタフェース(192.168.220.1)でのパケットキャプチャ

# ip netns exec qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f tcpdump -i qr-84e871c6-a4 -n
IP 192.168.220.11 > 192.168.210.14: ICMP echo request, id 19204, seq 1, length 64

Compute Server1の仮想ルータ用Namespace内で、受信側インタフェース(192.168.210.1)でのパケットキャプチャ

# ip netns exec qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f tcpdump -i qr-bdc3d5ac-e6 -n
IP 192.168.220.11 > 192.168.210.14: ICMP echo request, id 19204, seq 1, length 64

Compute Server2の仮想ルータ用Namespace内で、送信側インタフェース(192.168.220.1)でのパケットキャプチャ

# ip netns exec qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f tcpdump -i qr-84e871c6-a4 -n
IP 192.168.210.14 > 192.168.220.11: ICMP echo reply, id 19204, seq 1, length 64

Compute Server2の仮想ルータ用Namespace内で、受信側インタフェース(192.168.210.1)でのパケットキャプチャ

# ip netns exec qrouter-dc03bb5f-7a0e-4132-8b78-0fa2d35ca39f tcpdump -i qr-bdc3d5ac-e6 -n
IP 192.168.210.14 > 192.168.220.11: ICMP echo reply, id 19204, seq 1, length 64

ICMP echo requestはCompute Server1だけで、replyはCompute Server2だけで処理されていることがわかります。これを図示すると、図4のようになります。

別テナント上のインスタンス向け通信

図4:別テナント上のインスタンス向け通信

このようにDVR環境下では、別テナント上のインスタンス向け通信は、それぞれのインスタンスが動作しているCompute Server上の仮想ルータのみで処理されていることがわかります。

株式会社日立ソリューションズ

技術開発本部 研究開発部 オープンソース技術グループ 技師
新技術、新製品の評価及びソリューション開発に従事。ここ7、8年は仮想化関連技術の先行評価に取り組み、近年はオープンソースのクラウド技術の評価及び技術情報展開を実施している。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています