ヒスねこTechBlog

日々の気になる技術をまとめてます。

KVMとOVSでネットワーク接続

N番煎じ感がありますが、OVS(Open vSwitch)とKVMの組み合わせを試してみます。

環境はUbuntu 20.04(x86_64)です。

ブリッジの作成と接続

まずはOVSのパッケージをインストールしておきます。

$ sudo apt install openvswitch-common openvswitch-switch

早速作成していきます。NICがひとつしかない環境なので、ipコマンドで仮想インタフェースを作成してこれとブリッジを結びつけようかと画策していました。ちょっとコマンド調べてみたり。

仮想ネットワーク周りのipコマンドメモ - ヒスねこTechBlog

...がしかし、IPアドレスの割当とリンクアップをしてもパケットが外に出ていかなかったので、また今度チャレンジします...

今回はとりあえず、USB-Ethernetアダプタを使って物理インタフェースを増やしました。構成イメージとしては下の画像のような感じ。

# ブリッジの作成とネットワークインタフェースへの接続
# ブリッジ名はbr0としました
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl add-port br0 インタフェース名
# 既存のVM設定を編集してbr0に接続
$ virsh edit ドメイン名

最後のコマンドでエディタが開くので、下記のinterfaceタグのあたりを変更します。(左側の数字はエディタの行番号なので読み捨ててください)

100     <interface type='network'>
101       <mac address='52:54:00:a5:bb:fa'/>
102       <source network='default'/>                                                                                                                                                                      
103       <model type='virtio'/>
104       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
105     </interface>

変更点は以下です。

  • interface typeをbirdgeに変更
  • source を作成したブリッジ名に変更
  • virtualport type='openvswitch'を追加
100     <interface type='bridge'>         
101       <mac address='52:54:00:a5:bb:fa'/>
102       <source bridge='br0'/>         
103       <virtualport type='openvswitch'>
104       </virtualport>                                                                                                                                                                 
105       <model type='virtio'/>          
106       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
107     </interface>

もういちどvirsh editしてみると、virtualportタグ中にinterfaceidが自動で追加されていると思います。

100     <interface type='bridge'>                                                                                                                                                                          
101       <mac address='52:54:00:a5:bb:fa'/>
102       <source bridge='br0'/>
103       <virtualport type='openvswitch'>
104         <parameters interfaceid='565391c0-86a4-4b27-9849-06698f5f8674'/>
105       </virtualport>
106       <model type='virtio'/>
107       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
108     </interface>

この状態でVMを起動すると、めでたくOVSのブリッジを介してホストの外へ通信できます。

今後試したいリスト...

  • ブリッジ永続化
    • /etc/sysconfig/network-scripts/の下に設定ファイルを置けばよいらしい
  • 仮想インタフェースでの通信
  • VMのdefine時にOVSをインタフェースとして設定