KVMで使用するスイッチをLinux標準のブリッジからOpenvSwitchに変更して、外部と接続してみました。
その手順を備忘録として記します。
また、KVMの環境で1つ以上のVMが存在していることを前提とし、VM作成の説明は省きます。VMの作成方法がわからない方はこちら→CentOS7でKVMを使って仮想マシンをつくってみたを参考にしてみてください。
#環境
- Host CentOS 7.5
- openvswitch 2.0.0
#手順
##パッケージのインストールと起動
まずは、OpenvSwtichのインストールとデーモンの起動をさせましょう。
最新版のものを触りたのであれば、ソースからインストールするんのがいいでしょう。方法はネット上に転がっていると思うので、ここでは説明しません。
# yum install -y openvswitch python-openvswitch
# systemctl start openvswitch
# systemctl enable openvswitch
##ブリッジの作成
ブリッジの作成はovs-vsctl add-br
コマンドでもできますが、ここではスクリプトに直接書き込みます。
xxの部分は自身の環境に合わせてください。
# vi /etc/sysconfig/network-scripts/ifcfg-ovsbr0 // 以下のように書き込みます
DEVICE=ovsbr0
NAME=ovsbr0
ONBOOT=yes
BOOTPROTO=none
DEVICETYPE=ovs
TYPE=OVSBridge
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=xx.xx.xx.xx
DNS1=xx.xx.xx.xx
# systemctl restart network // 設定を反映させる
##ブリッジとホストのインターフェースを結びつける
# ovs-vsctl add-port ovsbr0 eno1
ブリッジとホストのインターフェースがちゃんと結びついていれば、以下のような出力が得られます。
# ovs-vsctl show
2dc06fcd-3735-4498-a963-3642d7e662d4
Bridge "ovsbr0"
Port "ovsbr0"
Interface "ovsbr0"
type: internal
Port "eno1"
Interface "eno1"
ovs_version: "2.0.0"
##VMのネットワーク設定を編集
既存のVMのネットワーク設定を変更して、ovsbr0
に接続して、外部と通信できるようにしましょう。
編集する部分は、先頭に「+」がついている部分です。
ちなみに、vi
やnano
で直接ファイルを編集しても変更は反映されません。
# virsh edit vm
+ <interface type='bridge'>
<mac address='52:54:00:6c:4a:50'/>
+ <source bridge='ovsbr0'/>
+ <virtualport type='openvswitch'>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
一旦保存終了してから、また開くと以下のようにパラメータが追加されています。
<interface type='bridge'>
<mac address='52:54:00:6c:4a:50'/>
<source bridge='ovsbr0'/>
<virtualport type='openvswitch'>
+ <parameters interfaceid='97233b2f-b55a-4a48-b6f0-cb254854ed39'/>
+ </virtualport>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
##確認
以上で設定が終わったので、vmがovsbr0
と接続されているか、確認してみましょう。
# virsh start vm // vmの起動
# ovs-vsctl show
2dc06fcd-3735-4498-a963-3642d7e662d4
Bridge "ovsbr0"
Port "ovsbr0"
Interface "ovsbr0"
type: internal
Port "eno1"
Interface "eno1"
Port "vnet0" // ←が追加されているので成功!
Interface "vnet0"
ovs_version: "2.0.0"
#参考