概要
KVM仮想サーバ用のぼくがかんがえたさいきょうのネットワーク設定のメモ。
前提
- (10)GbEをWAN用に2ポート備えたCentOS 7のKVM仮想化サーバ(仮想化ホスト)
- 対向スイッチとはbondingで接続
- 対向スイッチにはVLANが設定してあり、接続先ポートはタグ付のまま
- 対向スイッチには割とたくさんのVLANが設定してあるため、ethポート毎にVLANを変えるのは無理
- VLANはOS側でアンタグしてブリッジとして仮想化ゲストに渡す
- 仮想化ホストと仮想化ゲストの管理者は異なる可能性がある
- 仮想化ゲストの管理者に変な設定をされて想定外のVLANにアクセスされたくない
- 仮想化ホストへのリモート接続やストレージへの接続は別のethポートで行うため今回の設定では考慮しない
というわけでbonding + タグVLAN + ブリッジで実現する。
設定
em1
とem2
を対象のポートとする。
libvirtの作成する仮想ネットワークを潰す
# virsh net-destroy default
# virsh net-undefine default
# virsh net-list --all
邪魔なネットワーク設定を削除
# rm /etc/sysconfig/network-scripts/ifcfg-em1
# rm /etc/sysconfig/network-scripts/ifcfg-em2
bondインターフェースを作成
# nmcli connection add type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
# nmcli connection mod bond0 ipv4.method disabled ipv6.method ignore
# nmcli connection add type bond-slave autoconnect yes ifname em1 master bond0
# nmcli connection add type bond-slave autoconnect yes ifname em2 master bond0
VLANとブリッジの設定
以下の2つのファイルをVLAN ID毎に作成する。サンプルはVLAN 100の場合。
VLANがDHCP配下だとしてもBOOTPROTO=none
にしておいて、仮想化ゲスト側で自動取得の設定にする。
当初はnmcliでやろうとしたけどめんどくさいので自分で書いてる。
# vi /etc/sysconfig/network-scripts/ifcfg-bond0.100
DEVICE=bond0.100
BRIDGE=br100
VLAN=yes
ONBOOT=yes
BOOTPROTO=none
# vi /etc/sysconfig/network-scripts/ifcfg-br100
DEVICE=br100
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
設定反映
試行錯誤でやったので、初回は再起動しないとダメかも。
VLAN設定を追加したときはこれで問題ない。
# nmcli connection reload
KVM側の設定
仮想化ゲストのXMLで下記みたいな感じになるよう設定。
<interface type='bridge'>
<mac address='52:54:00:xx:xx:xx'/>
<source bridge='br100'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
テスト
仮想化ゲストに適当なIPアドレスを振って、pingが飛ぶか疎通チェック。
仮想化ゲストをシャットダウンして別のブリッジを設定して期待通りの挙動になるかのチェック。
pingを飛ばしながらem1
とem2
の接続してあるケーブルを交互に抜くことで冗長化されているかチェック。
参考リンク
下記記事あたりを参考にしました。
http://www.postcard.st/nosuz/tech/2011/09/17-23
http://www.si1230.com/?page_id=967
http://www.si1230.com/?page_id=4728
https://qiita.com/yteraoka/items/e661c2a8c6e7617e64f9