B.9. ゲストは外部ネットワークに到達できるが、macvtap インターフェイスの使用時にはホストにアクセスできない
- 現象
- ゲストは他のゲストと通信できるが、macvtap (または
type='direct'
) ネットワークインターフェイスを使用するように設定された後にはホストマシンに接続できない。 - 調査
- Virtual Ethernet Port Aggregator (VEPA) や VN-Link 対応スイッチに接続していない場合でも、macvtap インターフェイスは役に立ちます。このようなインターフェイスのモードを
bridge
に設定すると、従来のホストブリッジデバイスの使用に伴う設定の問題(または NetworkManager の非互換性)なしに、ゲストが非常に簡単に物理ネットワークに直接接続できます。ただし、ゲスト仮想マシンが macvtap などのtype='direct'
ネットワークインターフェイスを使用するように設定されている場合、ネットワーク上の他のゲストや他の外部ホストと通信できるにも拘らず、ゲストは独自のホストと通信できません。この状況は、実際にはエラーではありません。これは、macvtap の定義済み動作です。ホストの物理イーサネットが macvtap ブリッジに割り当てられている方法が原因で、物理インターフェイスに転送されるゲストからそのブリッジへのトラフィックは、ホストの IP スタックに送り返されることはありません。さらに、物理インターフェイスに送信されたホストの IP スタックからのトラフィックも macvtap ブリッジに送り返されず、ゲストに転送することができません。 - ソリューション
- libvirt を使って、分離されたネットワークと、このネットワークに接続する各ゲスト仮想マシンの 2 つ目のインターフェイスを作成します。これでホストとゲストはこの分離されたネットワーク上で直接通信でき、NetworkManager との互換性も維持できます。
手順B.3 libvirt で分離されたネットワークを作成します。
/tmp/isolated.xml
ファイルに以下の XML を追加して保存します。自分のネットワーク上で 192.168.254.0/24 が既に使われている場合、別のネットワークを選びます。<network> <name>isolated</name> <ip address='192.168.254.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.254.2' end='192.168.254.254' /> </dhcp> </ip> </network>
- 次のコマンドでネットワークを作成します。virsh net-define /tmp/isolated.xml
- virsh net-autostart isolated コマンドでネットワークを自動起動するように設定します。
- virsh net-start isolated コマンドでネットワークを起動します。
- virsh edit name_of_guest を使用して、ネットワーク接続に macvtap を使用する各ゲストの設定を編集し、
<devices>
セクションに新しい<interface>
を追加します(<model type='virtio'/>
行は任意です)。<interface type='network'> <source network='isolated'/> <model type='virtio'/> </interface>
- 各ゲストをシャットダウンし、再起動します。
これでゲストは 192.168.254.1 のアドレスにあるホストにアクセスでき、ホストは各ゲストが DHCP から取得した IP アドレスでゲストにアクセスできます (または、ゲストに手動で IP アドレスを設定することもできます) 。この新たなネットワークはこのホストとゲスト専用に分離されているので、ゲストからの他の通信はすべて macvtap インターフェイスを使用することになります。