オープンクラウド・キャンパス
OpenStack Quantum LinuxBridge Plugin




           OpenStackのQuantum(LinuxBridge Plugin)が
                  実際どうやって仮想ネットワークを
                         構成するのか説明する資料




                                        ver1.1 中井悦司
                                       Twitter @enakai00
OpenStack Quantum LinuxBridge Plugin

    自己紹介
     中井悦司(なかいえつじ)
       – Twitter @enakai00

     日々の仕事
       – Senior Solution Architect and
         Cloud Evangelist at Red Hat K.K.   好評発売中
         企業システムでオープンソースの活用を希望される
         お客様を全力でご支援させていただきます。


     昔とった杵柄
       – 素粒子論の研究(超弦理論とか)
       – 予備校講師(物理担当)
       – インフラエンジニア(Unix/Linux専門)




                                                    Open Cloud Campus
2
OpenStack Quantum LinuxBridge Plugin




                                           前提環境




                                                  Open Cloud Campus
3
OpenStack Quantum LinuxBridge Plugin

    物理ネットワーク構成とQuantum Agentの配置
                                                   L2 AgentはPluginを選択可能
                                                 ここでは、LinuxBridge Pluginを使用
                  パブリック
                 ネットワーク
                                              管理ネットワーク


                                                           インスタンスが
     仮想ルータが                                                起動するノード
    構成されるノード
                      eth0          eth2          eth0                 eth0
                      Network Node
                      Quantum Server          Compute Node       Compute Node
                         L2 Agent                                    L2 Agent
                                                L2 Agent
                       DHCP Agent
                         L3 Agent
     Quantum Serverは         eth1                 eth1                 eth1
    別ノードに外出しも可能




                                           プライベートネットワーク
                                                                        Open Cloud Campus
4
OpenStack Quantum LinuxBridge Plugin

    この資料で説明する仮想ネットワークの論理構成


      特定テナント専用の
     ネットワークも用意可能



                                         インスタンスごとに接続する
                                        プライベートネットワークを選択
          パブリックネットワークとの                     (複数選択可能)
             通信はNATを使用
                                              ファイアウォール機能付き
                                              NATルータ
               パブリック
              ネットワーク                                 異なるサブネットからの通信は
                                                   セキュリティグループでフィルタリング

                                net01            net02
     プライベートネットワーク                                        プライベートネットワーク
         (サブネット01)                                       (サブネット02)


                                                          同一サブネット内の通信は
                                                           フィルタリングされない

                                                                   Open Cloud Campus
5
OpenStack Quantum LinuxBridge Plugin

    (参考)テナントごとに独立ネットワークを提供する構成例

     テナントごとにIPアドレスの範囲を自由に設定可能で、テナント間でIPアドレス
      が重複しても問題になりません。
     下図の「サブネット」は、テナントごとに自由に追加することができます。



                                             パブリック
                                            ネットワーク

         テナント外との通信はNATで行う



              テナントA                                                  テナントB
              専用ルータ                                                  専用ルータ


             サブネット1                サブネット2               サブネット1        サブネット2
         192.168.1.0/24            192.168.2.0/24   192.168.1.0/24    192.168.2.0/24




                                                                              Open Cloud Campus
6
OpenStack Quantum LinuxBridge Plugin




                       まずは完成形を見てみましょう




                                           Open Cloud Campus
7
OpenStack Quantum LinuxBridge Plugin

    Compute Nodeの完成形

                                                                                Nova Computeが構成

                                   vm01                        vm02                      vm03
                                 IP                IP             IP                IP
                                      eth0              eth0           eth1              eth0

        Network Node上の
     dnsmasqからIPを割り当て             tapXXX             tapXXX           tapXXX         tapXXX


                                             brqxxxx                          brqxxxx
                                                    net01               net02

          プライベートネットワーク                       eth1.101                         eth1.102
          ごとにVLANデバイスを構成
                                                               eth1               L2 Agentが構成


           プライベートネットワーク用                   VLAN101
                   L2スイッチ
                                                 VLAN102

                                                                                                Open Cloud Campus
8
OpenStack Quantum LinuxBridge Plugin

    Network Nodeの完成形                                             パブリックネットワークへ
                                           L3 Agentが構成                    eth0

                                                      tapVVV             brqxxxx
                           iptablesで
                       NAT&フィルタリング               IP
                                                      qg-VVV
                                      dnsmasq                          dnsmasq
       サブネットごとに
       dnsmasqが起動
                                 IP              IP               IP               IP
                                      ns-XXX          qr-YYY           ns-ZZZ        qr-WWW
       ここはvethで直結
     (TAPデバイスではない)
                                      tapXXX          tapYYY           tapZZZ      tapWWW
             DHCP Agentが構成
                                            brqxxxx                        brqxxxx
                                                      net01             net02
                                            eth1.101                       eth1.102


                                                               eth1              L2 Agentが構成

                                                プライベートネットワーク用スイッチへ                     Open Cloud Campus
9
OpenStack Quantum LinuxBridge Plugin




     iptablesによるフィルタリングとNATの設定内容




                                        Open Cloud Campus
10
OpenStack Quantum LinuxBridge Plugin

 Compute Nodeにおけるパケットフィルタリング

       filter table                                        インスタンスに対する
                                                          パケットフィルタリングは
                                                           各Compute Nodeで実施
         FORWARD

                   nova-filter-top
                                                     インスタンス個別に
                      nova-compute-local          フィルタリングチェーンを用意

                         nova-compute-inst-xx           同じサブネットからは
                                                         無条件に通信可能
                               nova-compute-provider
                                                                   Security Groupの
                            同じサブネットからのパケット                ACCEPT      適用はココ

                            Security Groupによるフィルタ         ACCEPT

                             nova-compute-sg-fallback      DROP

              nova-compute-FORWARD

                                                   ※ これらはNova Computeが設定します。
     ACCEPT
                                                   (Security GroupはNovaの機能)
                                                                         Open Cloud Campus
11
OpenStack Quantum LinuxBridge Plugin

 Network NodeにおけるNAT処理 (1/2)
                                                             パブリックネットワーク接続時の
     nat table       POSTROUTING                             NAT処理はNetwork Nodeで実施

                          quantum-l3-agent-POSTROUTING

                              パブリックNWとの出入り以外                      ACCEPT

                          quantum-postrouting-bottom        パブリックNWに出入りする
                                                             タイミングでNATを適用
                                 quantum-l3-agent-snat
                                                                    送信元IPを仮想ルータの
                                    quantum-l3-agent-float-snat      パブリックIPに変換


                                          Floating IPからの送信             SNAT


                                     プライベートNWからの送信                     SNAT

                            nova-api-POSTROUTING                      送信元IPを対応する
                                                                      Floating IPに変換
                        nova-api-postrouting-bottom

                                                       ※ これらは主にL3 Agentが設定します。
                 ACCEPT
                                                                                Open Cloud Campus
12
OpenStack Quantum LinuxBridge Plugin

 Network NodeにおけるNAT処理 (1/2)


               nat table


                 PREROUTING

                       quantum-l3-agent-PREROUTING

                           Floating IP宛の受信           DNAT

                         nova-api-PREROUTING
                                                      宛先IPをFloating IPから
                                                     対応するプライベートIPに変換
              ACCEPT




                                                     ※ これらは主にL3 Agentが設定します。
                                                                           Open Cloud Campus
13
OpenStack Quantum LinuxBridge Plugin




           仮想ネットワークの構成手順にしたがって
            実際の構成の様子を追ってみましょう




                                        Open Cloud Campus
14
OpenStack Quantum LinuxBridge Plugin

 仮想ルータの定義

  仮想ルータは定義しただけでは、実際の構成は何も行われません。
     # quantum router-create router01




                                        Open Cloud Campus
15
OpenStack Quantum LinuxBridge Plugin

 プラベートネットワークの定義

  プラベートネットワークとサブネットを定義すると、Network Node上で次の構成が行われ
   ます。(Compute Nodeでは、まだ何も行われません。)
     – プライベートネットワーク用ブリッジ brxxxxを作成
     – プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続
     – vethで直結された仮想NICペア [tapXXXX --- ns-XXXX] を作成して、tapXXXXをブリッジに接続
     – nsXXXXにIPを割り当てて、これをListenインターフェースとするdnsmasqを起動
     # tenant=$(keystone tenant-list|awk '/redhat/ {print $2}')
     # quantum net-create --tenant-id $tenant net01 --provider:network_type vlan 
                          --provider:physical_network physnet2 --provider:segmentation_id 101
     # quantum subnet-create --tenant-id $tenant --name subnet01 net01 192.168.101.0/24

     # route -n
     Kernel IP routing table
     Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
     192.168.101.0   0.0.0.0         255.255.255.0   U     0      0        0 ns-ca045488-1e
     ・・・
     # ip addr show ns-ca045488-1e
     20: ns-ca045488-1e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000




                                                                                                               vethで直結
         link/ether e6:3b:bd:07:11:42 brd ff:ff:ff:ff:ff:ff
         inet 192.168.101.2/24 brd 192.168.101.255 scope global ns-ca045488-1e
     ・・・
     # brctl show
     bridge name bridge id               STP enabled interfaces
     brq6c6cc680-a8                      8000.e89a8fbe1f79       no                      eth1.101
                                                                                         tapca045488-1e
     # ps -ef | grep dnsmasq
     nobody   14920     1 0 15:22 ?         00:00:00 /usr/sbin/dnsmasq --no-hosts --no-resolv --strict-order
     --bind-interfaces --interface=ns-ca045488-1e --except-interface=lo --domain=openstacklocal --pid-
     file=/var/lib/quantum/dhcp/6c6cc680-a8fc-4f96-a8ae-1e88eabffec3/pid ・・・
                                                                                                   Open Cloud Campus
16
OpenStack Quantum LinuxBridge Plugin

 パブリックネットワークの定義とルータ接続

  パブリックネットワークは定義しただけでは、実際の構成は何も行われません。
     # tenant=$(keystone tenant-list|awk '/service/ {print $2}')
     # quantum net-create --tenant-id $tenant public01 --provider:network_type flat 
                          --provider:physical_network physnet1 --router:external=True
     # quantum subnet-create --tenant-id $tenant --name pub_subnet01 --gateway 10.64.201.254 
                             public01 10.64.201.0/24 --enable_dhcp False

  仮想ルータの外部ゲートウェイにパブリックネットワークを指定すると、Network Node上
   で次の構成が行われます。
     – パブリックネットワーク用ブリッジ brxxxxを作成して、パブリックネットワークの物理NICを接続
     – vethで直結された仮想NICペア [tapXXXX --- qg-XXXX] を作成して、tapXXXXをブリッジに接続
     – qgXXXXにIPを割り当てて、これをパブリックネットワーク接続用にルーティングテーブルを構成
     # quantum router-gateway-set router01 public01

     # route -n
     Kernel IP routing table
     Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
     ・・・
     0.0.0.0         10.64.201.254   0.0.0.0         UG    0      0        0 qg-3faf6516-c1
     # ip addr show qg-3faf6516-c1
     32: qg-3faf6516-c1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000




                                                                                                               vethで直結
         link/ether 4a:d4:a3:46:12:5c brd ff:ff:ff:ff:ff:ff
         inet 10.64.201.1/24 brd 10.64.201.255 scope global qg-3faf6516-c1
     ・・・
     [root@opst01 work(keystone_admin)]$ brctl show
     bridge name bridge id               STP enabled interfaces
     brq01092489-9f                      8000.e89a8fbe1f78       no                      eth0
                                                                                         tap3faf6516-c1
     ・・・
                                                                                                   Open Cloud Campus
17
OpenStack Quantum LinuxBridge Plugin

 プライベートネットワークのルータ接続

  プライベートネットワークを仮想ルータに接続すると、Network Node上で次の構成が行わ
   れます。(Compute Nodeでは、まだ何も行われません。)
    – vethで直結された仮想NICペア [tapXXXX --- qr-XXXX] を作成して、tapXXXXをブリッジに接続
    – qr-XXXXにIPを割り当てる(プライベートネットワークのデフォルトゲートウェイに利用可能(*1))
    – iptablesのnatテーブルにSNAT(Masquerade)接続用のエントリを作成
    # quantum router-interface-add router01 subnet01

    # route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.101.0   0.0.0.0         255.255.255.0   U     0      0        0 ns-ca045488-1e
    192.168.101.0   0.0.0.0         255.255.255.0   U     0      0        0 qr-0339046d-b6
    ・・・
    # ip addr show qr-0339046d-b6
    35: qr-0339046d-b6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether aa:06:4e:fb:5c:86 brd ff:ff:ff:ff:ff:ff




                                                                                                              vethで直結
        inet 192.168.101.1/24 brd 192.168.101.255 scope global qr-0339046d-b6
    ・・・
    # brctl show
    bridge name bridge id               STP enabled interfaces
    ・・・
    brq6c6cc680-a8                      8000.e89a8fbe1f79       no                      eth1.101
                                                                                        tap0339046d-b6
                                                                                        tapca045488-1e
    $ iptables -t nat -L quantum-l3-agent-snat -v
    Chain quantum-l3-agent-snat (1 references)
     pkts bytes target     prot opt in     out     source               destination
        3   216 quantum-l3-agent-float-snat all -- any       any     anywhere             anywhere
        0     0 SNAT       all -- any      any     192.168.101.0/24     anywhere            to:10.64.201.1


18 *1) dnsmasqを使用する場合は、実際には、dnsmasq用のポートns-XXXXがゲートウェイになります。                                      Open Cloud Campus
OpenStack Quantum LinuxBridge Plugin

 インスタンスの起動

  インスタンスを起動してプライベートネットワークに接続すると、該当インスタンスが起動
   するCompute Node上で次の構成がおこなわれます。
     – プライベートネットワーク用ブリッジ brxxxxを作成
     – プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続
     – iptablesのfilterテーブルにdnsmasq接続/同一サブネット接続/Security Group用のエントリを作成
     – Nova Computeが作成した仮想マシンのtapデバイスをブリッジに接続

     # brctl show
     bridge name bridge id             STP enabled interfaces
     brq6c6cc680-a8                    8000.6aa83b0c369f        no                          eth1.101
                                                                                            tap10007fbc-f2
     # iptables -nL nova-compute-local -v
     Chain nova-compute-local (1 references)
      pkts bytes target     prot opt in     out    source                  destination
         0     0 nova-compute-inst-74 all -- *        *        0.0.0.0/0              192.168.101.3

     # iptables -nL nova-compute-inst-74 -v
     Chain nova-compute-inst-74 (1 references)
      pkts bytes target     prot opt in     out    source                  destination
         0     0 DROP       all -- *        *      0.0.0.0/0               0.0.0.0/0            state INVALID
         0     0 ACCEPT     all -- *        *      0.0.0.0/0               0.0.0.0/0            state
     RELATED,ESTABLISHED
         0     0 nova-compute-provider all -- *        *       0.0.0.0/0                 0.0.0.0/0
         0     0 ACCEPT     udp -- *        *      192.168.101.2        0.0.0.0/0                udp spt:67 dpt:68
         0     0 ACCEPT     all -- *        *      192.168.101.0/24     0.0.0.0/0
         0     0 ACCEPT     tcp -- *        *      0.0.0.0/0            0.0.0.0/0               tcp dpt:22
         0     0 nova-compute-sg-fallback all --   *      *       0.0.0.0/0                0.0.0.0/0



                                                                                                       Open Cloud Campus
19
OpenStack Quantum LinuxBridge Plugin

 Floating IPの割り当て

  Floating Ipをインスタンスのポートに割り当てると、Network Node上で次の構成がおこな
   われます。
     – iptablesのnatテーブルにFloating IPに対応するDNAT/SNATのエントリを作成
     # tenant=$(keystone tenant-list|awk '/redhat/ {print $2}')
     # quantum floatingip-create --tenant-id $tenant public01
     # quantum floatingip-associate a56c9247-6155-418f-b418-650ac021743f 10007fbc-f2e5-4688-9979-9acfd253b444

     # iptables -t nat -nL quantum-l3-agent-float-snat -v
     Chain quantum-l3-agent-float-snat (1 references)
      pkts bytes target     prot opt in     out     source              destination
         0     0 SNAT       all -- *        *       192.168.101.3       0.0.0.0/0            to:10.64.201.4
     # iptables -t nat -nL quantum-l3-agent-OUTPUT -v
     Chain quantum-l3-agent-OUTPUT (1 references)
      pkts bytes target     prot opt in     out     source               destination
         0     0 DNAT       all -- *        *       0.0.0.0/0            10.64.201.4         to:192.168.101.3




                                                                                                   Open Cloud Campus
20
OpenStack Quantum LinuxBridge Plugin




                                        参考資料




                                               Open Cloud Campus
21
OpenStack Quantum LinuxBridge Plugin

 参考書




                                        仮想ネットワークと
                 KVM全般の勉強に
                                         iptablesの勉強に

                                                        Open Cloud Campus
22
OpenStack Quantum LinuxBridge Plugin

 参考資料

  KVM勉強会!
    – http://www.slideshare.net/enakai/ljstudy-kvm

  Eucalyputsの仮想ネットワーク構成
     – http://cloud.watch.impress.co.jp/docs/column/euca_iaas/20110817_466963.html

  OpenStack Network (Quantum) Administration Guide
    – http://docs.openstack.org/trunk/openstack-network/admin/content/index.html

  Quantum L2 Linux Bridge Plugin
    – http://wiki.openstack.org/Quantum-Linux-Bridge-Plugin

  QuickStart with RHOS(Red Hat OpenStack) Folsom Preview
    – http://d.hatena.ne.jp/enakai00/20121118/1353226066




                                                                            Open Cloud Campus
23
オープンクラウド・キャンパス
OpenStack Quantum LinuxBridge Plugin




            Euaclyptusユーザ会もよろしくね!




                                            中井悦司
                                       Twitter @enakai00

OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

  • 1.
    オープンクラウド・キャンパス OpenStack Quantum LinuxBridgePlugin OpenStackのQuantum(LinuxBridge Plugin)が 実際どうやって仮想ネットワークを 構成するのか説明する資料 ver1.1 中井悦司 Twitter @enakai00
  • 2.
    OpenStack Quantum LinuxBridgePlugin 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 好評発売中 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) Open Cloud Campus 2
  • 3.
    OpenStack Quantum LinuxBridgePlugin 前提環境 Open Cloud Campus 3
  • 4.
    OpenStack Quantum LinuxBridgePlugin 物理ネットワーク構成とQuantum Agentの配置 L2 AgentはPluginを選択可能 ここでは、LinuxBridge Pluginを使用 パブリック ネットワーク 管理ネットワーク インスタンスが 仮想ルータが 起動するノード 構成されるノード eth0 eth2 eth0 eth0 Network Node Quantum Server Compute Node Compute Node L2 Agent L2 Agent L2 Agent DHCP Agent L3 Agent Quantum Serverは eth1 eth1 eth1 別ノードに外出しも可能 プライベートネットワーク Open Cloud Campus 4
  • 5.
    OpenStack Quantum LinuxBridgePlugin この資料で説明する仮想ネットワークの論理構成 特定テナント専用の ネットワークも用意可能 インスタンスごとに接続する プライベートネットワークを選択 パブリックネットワークとの (複数選択可能) 通信はNATを使用 ファイアウォール機能付き NATルータ パブリック ネットワーク 異なるサブネットからの通信は セキュリティグループでフィルタリング net01 net02 プライベートネットワーク プライベートネットワーク (サブネット01) (サブネット02) 同一サブネット内の通信は フィルタリングされない Open Cloud Campus 5
  • 6.
    OpenStack Quantum LinuxBridgePlugin (参考)テナントごとに独立ネットワークを提供する構成例  テナントごとにIPアドレスの範囲を自由に設定可能で、テナント間でIPアドレス が重複しても問題になりません。  下図の「サブネット」は、テナントごとに自由に追加することができます。 パブリック ネットワーク テナント外との通信はNATで行う テナントA テナントB 専用ルータ 専用ルータ サブネット1 サブネット2 サブネット1 サブネット2 192.168.1.0/24 192.168.2.0/24 192.168.1.0/24 192.168.2.0/24 Open Cloud Campus 6
  • 7.
    OpenStack Quantum LinuxBridgePlugin まずは完成形を見てみましょう Open Cloud Campus 7
  • 8.
    OpenStack Quantum LinuxBridgePlugin Compute Nodeの完成形 Nova Computeが構成 vm01 vm02 vm03 IP IP IP IP eth0 eth0 eth1 eth0 Network Node上の dnsmasqからIPを割り当て tapXXX tapXXX tapXXX tapXXX brqxxxx brqxxxx net01 net02 プライベートネットワーク eth1.101 eth1.102 ごとにVLANデバイスを構成 eth1 L2 Agentが構成 プライベートネットワーク用 VLAN101 L2スイッチ VLAN102 Open Cloud Campus 8
  • 9.
    OpenStack Quantum LinuxBridgePlugin Network Nodeの完成形 パブリックネットワークへ L3 Agentが構成 eth0 tapVVV brqxxxx iptablesで NAT&フィルタリング IP qg-VVV dnsmasq dnsmasq サブネットごとに dnsmasqが起動 IP IP IP IP ns-XXX qr-YYY ns-ZZZ qr-WWW ここはvethで直結 (TAPデバイスではない) tapXXX tapYYY tapZZZ tapWWW DHCP Agentが構成 brqxxxx brqxxxx net01 net02 eth1.101 eth1.102 eth1 L2 Agentが構成 プライベートネットワーク用スイッチへ Open Cloud Campus 9
  • 10.
    OpenStack Quantum LinuxBridgePlugin iptablesによるフィルタリングとNATの設定内容 Open Cloud Campus 10
  • 11.
    OpenStack Quantum LinuxBridgePlugin Compute Nodeにおけるパケットフィルタリング filter table インスタンスに対する パケットフィルタリングは 各Compute Nodeで実施 FORWARD nova-filter-top インスタンス個別に nova-compute-local フィルタリングチェーンを用意 nova-compute-inst-xx 同じサブネットからは 無条件に通信可能 nova-compute-provider Security Groupの 同じサブネットからのパケット ACCEPT 適用はココ Security Groupによるフィルタ ACCEPT nova-compute-sg-fallback DROP nova-compute-FORWARD ※ これらはNova Computeが設定します。 ACCEPT (Security GroupはNovaの機能) Open Cloud Campus 11
  • 12.
    OpenStack Quantum LinuxBridgePlugin Network NodeにおけるNAT処理 (1/2) パブリックネットワーク接続時の nat table POSTROUTING NAT処理はNetwork Nodeで実施 quantum-l3-agent-POSTROUTING パブリックNWとの出入り以外 ACCEPT quantum-postrouting-bottom パブリックNWに出入りする タイミングでNATを適用 quantum-l3-agent-snat 送信元IPを仮想ルータの quantum-l3-agent-float-snat パブリックIPに変換 Floating IPからの送信 SNAT プライベートNWからの送信 SNAT nova-api-POSTROUTING 送信元IPを対応する Floating IPに変換 nova-api-postrouting-bottom ※ これらは主にL3 Agentが設定します。 ACCEPT Open Cloud Campus 12
  • 13.
    OpenStack Quantum LinuxBridgePlugin Network NodeにおけるNAT処理 (1/2) nat table PREROUTING quantum-l3-agent-PREROUTING Floating IP宛の受信 DNAT nova-api-PREROUTING 宛先IPをFloating IPから 対応するプライベートIPに変換 ACCEPT ※ これらは主にL3 Agentが設定します。 Open Cloud Campus 13
  • 14.
    OpenStack Quantum LinuxBridgePlugin 仮想ネットワークの構成手順にしたがって 実際の構成の様子を追ってみましょう Open Cloud Campus 14
  • 15.
    OpenStack Quantum LinuxBridgePlugin 仮想ルータの定義  仮想ルータは定義しただけでは、実際の構成は何も行われません。 # quantum router-create router01 Open Cloud Campus 15
  • 16.
    OpenStack Quantum LinuxBridgePlugin プラベートネットワークの定義  プラベートネットワークとサブネットを定義すると、Network Node上で次の構成が行われ ます。(Compute Nodeでは、まだ何も行われません。) – プライベートネットワーク用ブリッジ brxxxxを作成 – プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続 – vethで直結された仮想NICペア [tapXXXX --- ns-XXXX] を作成して、tapXXXXをブリッジに接続 – nsXXXXにIPを割り当てて、これをListenインターフェースとするdnsmasqを起動 # tenant=$(keystone tenant-list|awk '/redhat/ {print $2}') # quantum net-create --tenant-id $tenant net01 --provider:network_type vlan --provider:physical_network physnet2 --provider:segmentation_id 101 # quantum subnet-create --tenant-id $tenant --name subnet01 net01 192.168.101.0/24 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e ・・・ # ip addr show ns-ca045488-1e 20: ns-ca045488-1e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 vethで直結 link/ether e6:3b:bd:07:11:42 brd ff:ff:ff:ff:ff:ff inet 192.168.101.2/24 brd 192.168.101.255 scope global ns-ca045488-1e ・・・ # brctl show bridge name bridge id STP enabled interfaces brq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101 tapca045488-1e # ps -ef | grep dnsmasq nobody 14920 1 0 15:22 ? 00:00:00 /usr/sbin/dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=ns-ca045488-1e --except-interface=lo --domain=openstacklocal --pid- file=/var/lib/quantum/dhcp/6c6cc680-a8fc-4f96-a8ae-1e88eabffec3/pid ・・・ Open Cloud Campus 16
  • 17.
    OpenStack Quantum LinuxBridgePlugin パブリックネットワークの定義とルータ接続  パブリックネットワークは定義しただけでは、実際の構成は何も行われません。 # tenant=$(keystone tenant-list|awk '/service/ {print $2}') # quantum net-create --tenant-id $tenant public01 --provider:network_type flat --provider:physical_network physnet1 --router:external=True # quantum subnet-create --tenant-id $tenant --name pub_subnet01 --gateway 10.64.201.254 public01 10.64.201.0/24 --enable_dhcp False  仮想ルータの外部ゲートウェイにパブリックネットワークを指定すると、Network Node上 で次の構成が行われます。 – パブリックネットワーク用ブリッジ brxxxxを作成して、パブリックネットワークの物理NICを接続 – vethで直結された仮想NICペア [tapXXXX --- qg-XXXX] を作成して、tapXXXXをブリッジに接続 – qgXXXXにIPを割り当てて、これをパブリックネットワーク接続用にルーティングテーブルを構成 # quantum router-gateway-set router01 public01 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface ・・・ 0.0.0.0 10.64.201.254 0.0.0.0 UG 0 0 0 qg-3faf6516-c1 # ip addr show qg-3faf6516-c1 32: qg-3faf6516-c1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 vethで直結 link/ether 4a:d4:a3:46:12:5c brd ff:ff:ff:ff:ff:ff inet 10.64.201.1/24 brd 10.64.201.255 scope global qg-3faf6516-c1 ・・・ [root@opst01 work(keystone_admin)]$ brctl show bridge name bridge id STP enabled interfaces brq01092489-9f 8000.e89a8fbe1f78 no eth0 tap3faf6516-c1 ・・・ Open Cloud Campus 17
  • 18.
    OpenStack Quantum LinuxBridgePlugin プライベートネットワークのルータ接続  プライベートネットワークを仮想ルータに接続すると、Network Node上で次の構成が行わ れます。(Compute Nodeでは、まだ何も行われません。) – vethで直結された仮想NICペア [tapXXXX --- qr-XXXX] を作成して、tapXXXXをブリッジに接続 – qr-XXXXにIPを割り当てる(プライベートネットワークのデフォルトゲートウェイに利用可能(*1)) – iptablesのnatテーブルにSNAT(Masquerade)接続用のエントリを作成 # quantum router-interface-add router01 subnet01 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e 192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-0339046d-b6 ・・・ # ip addr show qr-0339046d-b6 35: qr-0339046d-b6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether aa:06:4e:fb:5c:86 brd ff:ff:ff:ff:ff:ff vethで直結 inet 192.168.101.1/24 brd 192.168.101.255 scope global qr-0339046d-b6 ・・・ # brctl show bridge name bridge id STP enabled interfaces ・・・ brq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101 tap0339046d-b6 tapca045488-1e $ iptables -t nat -L quantum-l3-agent-snat -v Chain quantum-l3-agent-snat (1 references) pkts bytes target prot opt in out source destination 3 216 quantum-l3-agent-float-snat all -- any any anywhere anywhere 0 0 SNAT all -- any any 192.168.101.0/24 anywhere to:10.64.201.1 18 *1) dnsmasqを使用する場合は、実際には、dnsmasq用のポートns-XXXXがゲートウェイになります。 Open Cloud Campus
  • 19.
    OpenStack Quantum LinuxBridgePlugin インスタンスの起動  インスタンスを起動してプライベートネットワークに接続すると、該当インスタンスが起動 するCompute Node上で次の構成がおこなわれます。 – プライベートネットワーク用ブリッジ brxxxxを作成 – プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続 – iptablesのfilterテーブルにdnsmasq接続/同一サブネット接続/Security Group用のエントリを作成 – Nova Computeが作成した仮想マシンのtapデバイスをブリッジに接続 # brctl show bridge name bridge id STP enabled interfaces brq6c6cc680-a8 8000.6aa83b0c369f no eth1.101 tap10007fbc-f2 # iptables -nL nova-compute-local -v Chain nova-compute-local (1 references) pkts bytes target prot opt in out source destination 0 0 nova-compute-inst-74 all -- * * 0.0.0.0/0 192.168.101.3 # iptables -nL nova-compute-inst-74 -v Chain nova-compute-inst-74 (1 references) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 nova-compute-provider all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT udp -- * * 192.168.101.2 0.0.0.0/0 udp spt:67 dpt:68 0 0 ACCEPT all -- * * 192.168.101.0/24 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 nova-compute-sg-fallback all -- * * 0.0.0.0/0 0.0.0.0/0 Open Cloud Campus 19
  • 20.
    OpenStack Quantum LinuxBridgePlugin Floating IPの割り当て  Floating Ipをインスタンスのポートに割り当てると、Network Node上で次の構成がおこな われます。 – iptablesのnatテーブルにFloating IPに対応するDNAT/SNATのエントリを作成 # tenant=$(keystone tenant-list|awk '/redhat/ {print $2}') # quantum floatingip-create --tenant-id $tenant public01 # quantum floatingip-associate a56c9247-6155-418f-b418-650ac021743f 10007fbc-f2e5-4688-9979-9acfd253b444 # iptables -t nat -nL quantum-l3-agent-float-snat -v Chain quantum-l3-agent-float-snat (1 references) pkts bytes target prot opt in out source destination 0 0 SNAT all -- * * 192.168.101.3 0.0.0.0/0 to:10.64.201.4 # iptables -t nat -nL quantum-l3-agent-OUTPUT -v Chain quantum-l3-agent-OUTPUT (1 references) pkts bytes target prot opt in out source destination 0 0 DNAT all -- * * 0.0.0.0/0 10.64.201.4 to:192.168.101.3 Open Cloud Campus 20
  • 21.
    OpenStack Quantum LinuxBridgePlugin 参考資料 Open Cloud Campus 21
  • 22.
    OpenStack Quantum LinuxBridgePlugin 参考書 仮想ネットワークと KVM全般の勉強に iptablesの勉強に Open Cloud Campus 22
  • 23.
    OpenStack Quantum LinuxBridgePlugin 参考資料  KVM勉強会! – http://www.slideshare.net/enakai/ljstudy-kvm  Eucalyputsの仮想ネットワーク構成 – http://cloud.watch.impress.co.jp/docs/column/euca_iaas/20110817_466963.html  OpenStack Network (Quantum) Administration Guide – http://docs.openstack.org/trunk/openstack-network/admin/content/index.html  Quantum L2 Linux Bridge Plugin – http://wiki.openstack.org/Quantum-Linux-Bridge-Plugin  QuickStart with RHOS(Red Hat OpenStack) Folsom Preview – http://d.hatena.ne.jp/enakai00/20121118/1353226066 Open Cloud Campus 23
  • 24.
    オープンクラウド・キャンパス OpenStack Quantum LinuxBridgePlugin Euaclyptusユーザ会もよろしくね! 中井悦司 Twitter @enakai00