KVM で macvtap (direct) を使ってみるメモ

下記の記事で 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 にはないけど下記だと nmclitypemacvlan が指定出来そうだったので試してみたところ・・

# 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].

だめっぽい。

参考