TenForward

技術ブログ。はてなダイアリーから移転しました

macvtap でつないだ kvm ゲストとホスト間の通信

kvm ゲストの仮想 NIC を macvtap 経由で物理 NIC に直接アタッチするとパフォーマンスが良いようですね.macvtap については

等が判りやすいかと.

この際,ゲスト〜ホスト間の通信はできません.まあ,きちんとしたサービスとしてやるときは必要ないかもしれませんが,手元でちょっとテストをやってる時なんかは,ゲスト〜ホスト間通信ができると便利な事もあります.

macvtap というのは Linux kernel の持つ機能で macvlan というインターフェースを作れますが,これを Tap として利用するモノのようです.ということは macvlan/macvtap 間の通信は "bridgeモード" に設定しておけば可能です(この辺りのモードについては前述の参考文書を参照) ので,ホスト上に macvlan インターフェースを作成して,そこにホストのアドレスを割り当ててしまえば,ゲスト〜ホスト間の通信は可能なはず,ということでやってみました.

ゲストVMは eth0 に作られた macvtap につながっています.

  1. macvlanインターフェースを作成."macvlan0" という名前にします.
    ip link add dev macvlan0 link eth0 type macvlan mode bridge
  2. eth0 のアドレスは削除して macvlan0 に割り当て.
    ip addr del 172.16.44.18/24 dev eth0
    ip addr add 172.16.44.18/24 broadcast 172.16.44.255 dev macvlan0
    ip link set macvlan0 up
  3. デフォルトルート設定.
    ip route flush dev eth0
    ip route add default via 172.16.44.254 dev macvlan0 proto static

ごちゃごちゃと試行錯誤しながらやってたので,ヌケがあるかもしれませんが,大体こんな感じで無事ゲスト〜ホスト間の通信が可能になりました.(後日確認します)