下記の記事で KVM の macvtap (direct) というものを知ったので使ってみたメモ。
ホスト・ゲストともに下記で試しています。
# cat /etc/centos-release CentOS Linux release 7.2.1511 (Core)
sv01 と sv02 というゲストがセットアップ済です。
# virsh list --all Id Name State ---------------------------------------------------- - sv01 shut off - sv02 shut off
既存のインタフェースはすべて削除しています。
virsh detach-interface sv01 bridge --config virsh detach-interface sv02 bridge --config virsh detach-interface sv01 direct --config virsh detach-interface sv02 direct --config virsh detach-interface sv01 network --config virsh detach-interface sv02 network --config
direct-bridge を libvirt のインタフェースで作る
インタフェースの定義ファイルを作成。
/tmp/attach-device.xml
<interface type='direct'> <source dev='eth0' mode='bridge'/> </interface>
インタフェースをゲストに追加。
virsh attach-device sv01 /tmp/attach-device.xml --config virsh attach-device sv02 /tmp/attach-device.xml --config
開始してコンソールに接続して ping とかで疎通を確認する。
virsh start sv01 virsh start sv02 virsh console sv01 virsh console sv02
この時点で、「ゲスト~ゲスト」とか「ゲスト~外部」は疎通があるが、「ゲスト~ホスト」は接続できない。
direct-bridge を libvirt のネットワークで作る
ネットワークの定義ファイルを作成。
/tmp/net-direct.xml
<network> <name>direct</name> <forward mode="bridge"> <interface dev="eth0"/> </forward> </network>
ネットワークを追加して開始。
virsh net-define --file /tmp/net-direct.xml virsh net-start direct
インタフェースの定義ファイルを作成。
/tmp/attach-device.xml
<interface type='network'> <source network='direct'/> </interface>
インタフェースをゲストに追加。
virsh attach-device sv01 /tmp/attach-device.xml --config virsh attach-device sv02 /tmp/attach-device.xml --config
開始してコンソールに接続して ping とかで疎通を確認する。
virsh start sv01 virsh start sv02 virsh console sv01 virsh console sv02
「ゲスト~ホスト」が接続できないのは同じ。
「ゲスト~ホスト」を通す
下記の記事の通り。
macvlan デバイスを作成して eth0 のアドレスとルーティングを macvlan0 に付ける。
ip link add link eth0 name macvlan0 type macvlan mode bridge ip link set macvlan0 up ip addr del 192.0.2.123/24 dev eth0 ip addr add 192.0.2.123/24 dev macvlan0 ip route flush dev eth0 ip route add default via 192.0.2.1 dev macvlan0 proto static metric 100
「ゲスト~ホスト」も接続できるようになる。
macvlan0 の永続化
man
にはないけど下記だと nmcli
の type
に macvlan
が指定出来そうだったので試してみたところ・・
# nmcli con add ifname macvlan0 type macvlan dev eth0 mode bridge Error: invalid connection type; 'macvlan' not among [generic, 802-3-ethernet (ethernet), pppoe, 802-11-wireless (wifi), wimax, gsm, cdma, infiniband, adsl, bluetooth, vpn, 802-11-olpc-mesh (olpc-mesh), vlan, bond, team, bridge, bond-slave, team-slave, bridge-slave].
だめっぽい。
参考
- http://qiita.com/sengoku/items/3b3715c6124cdd0afb00
- direct bridge を知ったきっかけの記事
- http://d.hatena.ne.jp/defiant/20111221/1324466720
- macvtap でつないだ kvm ゲストとホスト間の通信
- http://d.hatena.ne.jp/syuu1228/20111128/1322502673