ユーザ用ツール

サイト用ツール


linux:kvm

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
最新のリビジョン 両方とも次のリビジョン
linux:kvm [2020/11/26 12:16]
Wiki Editor [カーネル]
linux:kvm [2020/11/26 12:59]
Wiki Editor
行 29: 行 29:
         [*]IGMP/MLD snooping         [*]IGMP/MLD snooping
  
-ネットワークに関しては、macvtapで物理NICに直接接続する方法もある。NICが複数ある場合は、余計なブリッジ構成しなくてよいので、こちらの方が便かもしれない。ただし、いまのところGentooではmacvtapを起動スクリプトで扱えないので、仮想マシンを起動する時などにインタフェースを構成する必要がある。また、Qemuからも直接扱えないので、ネットワークデバイスに関するパラメータも少し変更が必要になる。+macvtapを利する(後述)
      
 +  Device Drivers  ---> 
 +    [*] Network device support  --->
 +       [*]     MAC-VLAN support
 +       [*]       MAC-VLAN based tap driver
  
 + 
  
 KSM (複数のVM間でメモリを共有する) KSM (複数のVM間でメモリを共有する)
行 45: 行 50:
  
 ==== ネットワーク設定 ==== ==== ネットワーク設定 ====
 +=== macvtapを利用する場合 ===
 +
 +  * [[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-virtual_networking-directly_attaching_to_physical_interface]]
 +  * [[https://ahelpme.com/linux/howto-do-qemu-full-virtualization-with-macvtap-networking/]]
 +
 +ネットワークに関して当初は以下のようにしていたが、macvtapで物理NICに直接接続する方法もある。NICが複数ある場合は、余計なブリッジを構成しなくてよいので、こちらの方が便利かもしれない。ただし、いまのところGentooではmacvtapを起動スクリプトで扱えないので、仮想マシンを起動する時などにインタフェースを構成する必要がある。また、Qemuからも直接扱えないので、ネットワークデバイスに関するパラメータも少し変更が必要になる。
 +
 +既にnetifrcパッケージに修正がなされつつあるようなので、Gentooの起動スクリプトでmacvtapが扱えるようになったら設定を見直そう。
 +
 +macvtapデバイスの構成
 +
 +以下は、/etc/init.d内のOpenRCの起動スクリプト側に記述。macvtapのデバイスファイル/dev/tapNは、インタフェースを作成した段階ではrootのみしかアクセスできない。そのためownerやpermissionを書き換えるためには、root権限で実行されているスクリプトで処理する必要がある。VMをrootで動かすならば必要ないが、別ユーザで動かしたいため。
 +
 +  # 「macvtap0」という名前でmacvtapデバイスを作成し、物理NICの「enp8s0f0」に接続
 +  # modeはbridgeとする。1つのVMで1つのNICを使うので今回は何でもよい
 +  # 複数VMが物理NICを共有する形で構成される場合、modeによってVM同士の通信の仕方が変わる。
 +  ip link add link enp8s0f0 name macvtap0 type macvtap mode bridge
 +  # 作成したインタフェースを起動
 +  ip link set macvtap0 up
 +  # Qemuは今のところ/dev/tapN経由で利用するが起動直後はデバイスファイルのownerとpermissionがrootのみrwとなっているため修正
 +  # /sys/class/macvtap0/ifindexが/dev/tapNの「N」を示す
 +  chown root:kvm /dev/tap$(cat /sys/class/net/macvtap0/ifindex)
 +  chmod 660 /dev/tap$(cat /sys/class/net/macvtap0/ifindex)
 +
 +Qemuのネットワークインターフェースのパラメータ
 +  # Qemu側からはインターフェースを直接利用できないのでtapのファイルディスクリプタを指定する
 +  # fd=3は適当な番号(3未満は標準入出力で利用されている?)
 +  # /dev/tapNの番号は/sys/class/net/${MACVTAP}/ifindex)から取得できる
 +  -netdev tap,id=net0,vhost=on,fd=3 3<>/dev/tap$(cat /sys/class/net/${MACVTAP}/ifindex)
 +  
 +  # macアドレスをHostのmacvtapインターフェースとゲストで一致させないと通信できない
 +  # たぶん、物理NICを直接VMに接続するイメージなので、macアドレスが一致していないと通信できない
 +  # macvtapを構成する際に指定してもよいが、自動的に付与されたものを利用する
 +  # macvtapに割り当てられたmacアドレスは/sys/class/net/${MACVTAP}/addressで取得できる
 +  -device virtio-net,netdev=net0,mac=$(cat /sys/class/net/${MACVTAP}/address)
 +
 +=== tap + bridgeで構成する場合 ===
 +
 Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネットワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使うこともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする)。 Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネットワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使うこともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする)。
  
linux/kvm.txt · 最終更新: 2020/11/26 13:22 by Wiki Editor