Upgrade to Pro — share decks privately, control downloads, hide ads and more …

さくらのクラウドでOpenFlowをやってみよう

Avatar for notchi notchi
August 21, 2020

 さくらのクラウドでOpenFlowをやってみよう

Avatar for notchi

notchi

August 21, 2020

Other Decks in Technology

Transcript

  1. (C) Copyright 1996-2020 SAKURA Internet Inc. OpenFlowを気軽に使ってみよう 2 ovs-vswitchd openvswitch.ko

    フロー キャッシュ デーモン (ユーザランド) カーネル モジュール パケット転送処理 Src MAC = XX:XX:XX:XX:XX:XX Dst MAC = YY:YY:YY:YY:YY:YY EtherType = TTTT Src IP = A.B.C.D Dst IP = E.F.G.H Proto = OOOO Src Port = NNNN Dst Port = MMMM
  2. (C) Copyright 1996-2020 SAKURA Internet Inc. さくらのクラウドでOpenFlowの構成 3 client-1 client-2

    client-3 ofs sw2 sw3 sw1 192.168.1.1/24 192.168.1.2/24 192.168.1.3/24 eth1 eth2 eth3 192.168.1.0/24 eth1 eth1 eth1 注:全VMのeth0は管理用のグローバルアドレス付き
  3. (C) Copyright 1996-2020 SAKURA Internet Inc. 環境構築 4 1. VMを4台作る

    • クライアントVM3台 • OpenFlowスイッチVM1台 2. 仮想スイッチを3台作る • VM同士を直接接続できないのでスイッチ経由で接続 3. 初期設定する • クライアント3台の共通設定 • Open vSwitchインストール 4. Open vSwitchの設定 • フローエントリの文法 • 実際にフローを投入してみよう
  4. (C) Copyright 1996-2020 SAKURA Internet Inc. 1.VMを作る 5 クライアントのスペック •

    1Core 1GB 20GB-SSD • Ubuntu 16.04LTS • グローバル向けインタフェース(SSHする用, eth0) • ローカル向けインタフェース(OpenFlow用, eth1) OpenFlow Switchのスペック • 1Core 1GB 20GB-SSD • Ubuntu 16.04LTS • グローバル向けインタフェース(SSHする用, eth0) • ローカル向けインタフェース(OpenFlow用, eth1/2/3)
  5. (C) Copyright 1996-2020 SAKURA Internet Inc. 2.仮想スイッチを作る 6 ネットワークタブから、スイッチを3台追加する 1.

    スイッチ1はクライアント1のeth1とofsのeth1を接続 2. スイッチ2はクライアント2のeth1とofsのeth2を接続 3. スイッチ3はクライアント2のeth1とofsのeth3を接続 スイッチ作成はスイッチの名前を入力して作成するだけでOK
  6. (C) Copyright 1996-2020 SAKURA Internet Inc. 3. 初期設定する 7 クライアント共通設定

    • eth1にIPアドレス(192.168.1.x/24)を設定 • /etc/network/interfacesを編集する。 OFSの設定 • apt update && apt upgradeで最新状態にしておく • Open vSwitchをパッケージインストールする • インストールしたら確認する • OpenFlowで使うブリッジを作成する • eth1~3をブリッジに紐付ける • それぞれのインタフェースをupさせる 詳細なコマンドは次ページ参照
  7. (C) Copyright 1996-2020 SAKURA Internet Inc. 3.初期設定する 8 ofs:~$ sudo

    apt install openvswitch-switch ofs:~$ sudo ovs-vsctl –version [sudo] password for ubuntu: ovs-vsctl (Open vSwitch) 2.5.4 Compiled Oct 30 2017 10:38:01 DB Schema 7.12.1 ofs:~$ sudo ovs-vsctl add-br br0 ofs:~$ sudo ovs-vsctl add-port br0 eth1 ofs:~$ sudo ifconfig eth1 up ofs:~$ sudo ovs-vsctl add-port br0 eth2 ofs:~$ sudo ifconfig eth2 up ofs:~$ sudo ovs-vsctl add-port br0 eth3 ofs:~$ sudo ifconfig eth3 up 先にsudo apt update && sudo apt upgradeしておく
  8. (C) Copyright 1996-2020 SAKURA Internet Inc. 3.初期設定する 9 ofs br0

    eth1 eth2 eth3 設定が完了すると内部はこうなっている
  9. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. Open vSwitchの設定 10

    フローエントリ追加の文法 ovs-ofctl add-flow [ブリッジ名] [マッチ条件] [アクション] フローエントリ削除の文法 ovs-ofctl del-flows [ブリッジ名] [マッチ条件] [アクション] フローエントリ確認の文法 ovs-ofctl dump-flows [ブリッジ名]
  10. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. フローを投入する前に 13 client-1

    client-2 client-3 ofs sw sw sw 192.168.1.1/24 192.168.1.2/24 192.168.1.3/24 eth1 eth2 eth3
  11. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. フローを投入する前に 14 client-1

    client-3 ofs 192.168.1.1/24 192.168.1.3/24 eth3 eth1 dst_mac: broadcast src_mac: client-1 arp-request dst_mac: broadcast src_mac: ofs-eth3 arp-request dst_mac: client-1 src_mac: client-3 arp-reply dst_mac: client-1 src_mac: ofs-eth1 arp-reply src_macを双方向で 書き換えてみる
  12. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. フローを投入する前に 15 client-1

    client-3 ofs 192.168.1.1/24 192.168.1.3/24 eth3 eth1 dst_mac: broadcast src_mac: client-1 Echo-request dst_ip: client-3 src_ip: client-1 dst_mac: broadcast src_mac: ofs-eth3 Echo-request dst_ip: client-3 src_ip: client-1 dst_mac: client-1 src_mac: client-3 Echo-response dst_ip: client-1 src_ip: client-3 dst_mac: client-1 src_mac: ofs-eth1 Echo-response dst_ip: client-1 src_ip: client-3 同じく ではやってみよう!
  13. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. 実際にフローエントリを投入してみよう 16 クライアント1からのパケットをsrc-mac書き換えてPort3に出力

    sudo ovs-ofctl add-flow br0 in_port:1,actions=mod_dl_src:[ofsのeth3のmac_addr],output:3 sudo ovs-ofctl add-flow br0 in_port:3,actions=mod_dl_src:[ofsのeth1のmac_addr],output:1 クライアント3からのパケットをsrc-mac書き換えてPort1に出力 Port番号の確認方法 ubuntu@ofss:~$ sudo ovs-vsctl --columns=ofport,name list interface ofport : 65534 name : "br0" ofport : 1 name : "eth1“ ofport : 2 name : "eth2" ofport : 3 name : "eth3" ※ofport番号の指定をしなければ、ovs-vsctl add-portした順番にインクリメントされて割り当てられる
  14. (C) Copyright 1996-2020 SAKURA Internet Inc. 192.168.1.0/24 さくらのクラウドでOpenFlow 17 client-1

    client-2 client-3 ofs sw sw sw 192.168.1.1/24 192.168.1.2/24 192.168.1.3/24 eth1 eth2 eth3 pingできた!
  15. (C) Copyright 1996-2020 SAKURA Internet Inc. 4. 投入したフローエントリを確認してみよう 18 フローエントリを確認する

    ubuntu@ofss:~$ sudo ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=615.557s, table=0, n_packets=633, n_bytes=61008, idle_age=0, in_port=1 actions=mod_dl_src:9c:a3:ba:31:fe:82,output:3 cookie=0x0, duration=589.260s, table=0, n_packets=604, n_bytes=58352, idle_age=0, in_port=3 actions=mod_dl_src:9c:a3:ba:31:17:1c,output:1 cookie=0x0, duration=13.083s, table=0, n_packets=0, n_bytes=0, idle_age=13, priority=0 actions=NORMAL パケットの書き換えを行うフローエントリが見える ※最後のactions=NORMALは普通のL2スイッチングを行う動作。デフォルト状態で入っている 実際に投入したコマンド sudo ovs-ofctl add-flow br0 in_port:1,actions=mod_dl_src:9c:a3:ba:31:fe:82,output:3 sudo ovs-ofctl add-flow br0 in_port:3,actions=mod_dl_src:9c:a3:ba:31:17:1c,output:1
  16. (C) Copyright 1996-2020 SAKURA Internet Inc. 参考 19 • OpenFlowコントローラRyuとOpen

    vSwitchを使って OpenFlow1.3を 試す (CUBE SUGAR STORAGE) • 【Open vSwitchのみでOpenFlowプログラミング】VLAN IDコンバータ (ranosgrantのブログ) • OpenFlowとOpen vSwitchによるIPスプーフィング機能の実装 (三菱電 機情報技術総合研究所) • Raspberry Pi3 でOpenvSwitch+Tremaを動かした~OpenFlow入門~ (あさのひとりごと) • OpenFlowにてNW機能構築 (ビットアイル総合研究所ブログ) • 「さくらのクラウド」の舞台裏 (さくらインターネット研究所) • クラウドインフラを支える高性能ネットワーク、ストレージ技術 (同上) • 「さくらのクラウド」におけるL2ネットワークの課題 (同上)